From 631f92d513e30dae7ffc2250ec14bc7cdbdb6756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 8 Nov 2024 21:16:58 +0800 Subject: [PATCH 1/8] pengyuthon --- .../documents_spreadsheet_controller_mixin.js | 4 ++-- .../spreadsheet_clone_xlsx_dialog.xml | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/documents_spreadsheet/static/src/documents_view/documents_spreadsheet_controller_mixin.js b/documents_spreadsheet/static/src/documents_view/documents_spreadsheet_controller_mixin.js index 8868551..cf078d8 100644 --- a/documents_spreadsheet/static/src/documents_view/documents_spreadsheet_controller_mixin.js +++ b/documents_spreadsheet/static/src/documents_view/documents_spreadsheet_controller_mixin.js @@ -92,10 +92,10 @@ export const DocumentsSpreadsheetControllerMixin = () => ({ } else { this.dialogService.add(SpreadsheetCloneXlsxDialog, { title: _t("Format issue"), - cancel: () => {}, + // cancel: () => {}, cancelLabel: _t("Discard"), documentId: mainDocument.resId, - confirmLabel: _t("Open with Odoo Spreadsheet"), + // confirmLabel: _t("Open with Odoo Spreadsheet"), }); } } else { diff --git a/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml b/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml index a979a8a..329590e 100644 --- a/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml +++ b/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml @@ -1,12 +1,14 @@ - - -

Spreadsheet files cannot be previewed or edited in Odoo. Opening your file with Odoo Spreadsheet will allow you to do so.

- - -
+ + + +

文档格式不支持,请使用onlyoffice预览2222

+ + +
+
From f2072e5f625a32291c215f0d704f5e8c15f3b7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Mon, 9 Dec 2024 18:36:41 +0800 Subject: [PATCH 2/8] pengyuthon wechat --- .../spreadsheet_clone_xlsx_dialog.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml b/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml index 329590e..07d09ac 100644 --- a/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml +++ b/documents_spreadsheet/static/src/spreadsheet_clone_xlsx_dialog/spreadsheet_clone_xlsx_dialog.xml @@ -2,7 +2,7 @@ - +

文档格式不支持,请使用onlyoffice预览2222

From 3109245fcf468164203878c0e7d5bfe80377b189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Sun, 15 Dec 2024 22:36:45 +0800 Subject: [PATCH 3/8] pengyuthon wechat --- voip/__init__.py | 3 + voip/__manifest__.py | 45 + voip/data/neutralize.sql | 5 + voip/doc/index.rst | 130 + voip/i18n/af.po | 1139 + voip/i18n/am.po | 1135 + voip/i18n/ar.po | 1169 + voip/i18n/az.po | 1140 + voip/i18n/bg.po | 1121 + voip/i18n/bs.po | 1140 + voip/i18n/ca.po | 1168 + voip/i18n/cs.po | 1143 + voip/i18n/da.po | 1121 + voip/i18n/de.po | 1190 + voip/i18n/el.po | 1141 + voip/i18n/es.po | 1181 + voip/i18n/es_419.po | 1181 + voip/i18n/es_CL.po | 1138 + voip/i18n/et.po | 1170 + voip/i18n/eu.po | 1140 + voip/i18n/fa.po | 1122 + voip/i18n/fi.po | 1180 + voip/i18n/fo.po | 1138 + voip/i18n/fr.po | 1181 + voip/i18n/fr_BE.po | 1137 + voip/i18n/fr_CA.po | 1138 + voip/i18n/gl.po | 1138 + voip/i18n/gu.po | 1139 + voip/i18n/he.po | 1130 + voip/i18n/hr.po | 1147 + voip/i18n/hu.po | 1122 + voip/i18n/hy.po | 1111 + voip/i18n/id.po | 1173 + voip/i18n/is.po | 1116 + voip/i18n/it.po | 1183 + voip/i18n/ja.po | 1136 + voip/i18n/ka.po | 1140 + voip/i18n/kab.po | 1138 + voip/i18n/km.po | 1141 + voip/i18n/ko.po | 1148 + voip/i18n/lb.po | 1135 + voip/i18n/lo.po | 1138 + voip/i18n/lt.po | 1128 + voip/i18n/lv.po | 1120 + voip/i18n/mk.po | 1138 + voip/i18n/ml_IN.po | 1137 + voip/i18n/mn.po | 1150 + voip/i18n/my.po | 1140 + voip/i18n/nb.po | 1120 + voip/i18n/ne.po | 1140 + voip/i18n/nl.po | 1187 + voip/i18n/nl_BE.po | 1138 + voip/i18n/pl.po | 1142 + voip/i18n/pt.po | 1117 + voip/i18n/pt_BR.po | 1179 + voip/i18n/ro.po | 1126 + voip/i18n/ru.po | 1184 + voip/i18n/sk.po | 1116 + voip/i18n/sl.po | 1125 + voip/i18n/sq.po | 1138 + voip/i18n/sr.po | 1143 + voip/i18n/sr@latin.po | 1141 + voip/i18n/sv.po | 1127 + voip/i18n/ta.po | 1139 + voip/i18n/th.po | 1165 + voip/i18n/tr.po | 1129 + voip/i18n/uk.po | 1172 + voip/i18n/vi.po | 1170 + voip/i18n/voip.pot | 1111 + voip/i18n/zh_CN.po | 1137 + voip/i18n/zh_TW.po | 1137 + voip/models/__init__.py | 9 + voip/models/mail_activity.py | 134 + voip/models/res_config_settings.py | 23 + voip/models/res_partner.py | 31 + voip/models/res_users.py | 134 + voip/models/res_users_settings.py | 41 + voip/models/voip_call.py | 168 + voip/models/voip_queue_mixin.py | 121 + voip/security/ir.model.access.csv | 3 + voip/security/voip_security.xml | 15 + voip/static/description/icon.png | Bin 0 -> 1288 bytes voip/static/description/icon.svg | 1 + voip/static/lib/sip.js | 20562 ++++++++++++++++ voip/static/src/activity/@types/models.d.ts | 5 + .../src/activity/activity_model_patch.js | 25 + voip/static/src/activity/activity_patch.js | 21 + voip/static/src/activity/activity_patch.xml | 29 + voip/static/src/core/call_model.js | 120 + voip/static/src/core/call_service.js | 90 + voip/static/src/core/correspondence_model.js | 51 + .../src/core/messaging_service_patch.js | 12 + voip/static/src/core/registerer.js | 91 + voip/static/src/core/user_agent_service.js | 642 + .../src/core/user_settings_service_patch.js | 26 + voip/static/src/core/voip_service.js | 316 + .../mobile/call_method_selection_dialog.js | 38 + .../mobile/call_method_selection_dialog.xml | 23 + .../src/mobile/device_selection_dialog.js | 54 + .../src/mobile/devise_selection_dialog.xml | 15 + voip/static/src/ringtones/dialtone.mp3 | Bin 0 -> 76402 bytes voip/static/src/ringtones/incomingcall.mp3 | Bin 0 -> 81954 bytes voip/static/src/ringtones/ringbacktone.mp3 | Bin 0 -> 775969 bytes voip/static/src/ringtones/ringtone_service.js | 38 + voip/static/src/softphone/activities_tab.js | 68 + voip/static/src/softphone/activities_tab.xml | 18 + voip/static/src/softphone/call_invitation.js | 34 + .../static/src/softphone/call_invitation.scss | 7 + voip/static/src/softphone/call_invitation.xml | 21 + voip/static/src/softphone/contacts_tab.js | 30 + voip/static/src/softphone/contacts_tab.xml | 15 + .../src/softphone/correspondence_details.js | 274 + .../src/softphone/correspondence_details.scss | 3 + .../src/softphone/correspondence_details.xml | 68 + voip/static/src/softphone/numpad.js | 67 + voip/static/src/softphone/numpad.xml | 16 + voip/static/src/softphone/recent_tab.js | 25 + voip/static/src/softphone/recent_tab.xml | 18 + voip/static/src/softphone/softphone.dark.scss | 3 + voip/static/src/softphone/softphone.js | 265 + voip/static/src/softphone/softphone.scss | 30 + voip/static/src/softphone/softphone.xml | 43 + .../src/softphone/softphone_container.js | 26 + voip/static/src/softphone/softphone_model.js | 125 + voip/static/src/softphone/transfer_popover.js | 87 + .../src/softphone/transfer_popover.scss | 7 + .../static/src/softphone/transfer_popover.xml | 27 + voip/static/src/utils/utils.js | 24 + voip/static/src/web/call_queue_switch.js | 107 + voip/static/src/web/call_queue_switch.scss | 16 + voip/static/src/web/call_queue_switch.xml | 13 + voip/static/src/web/phone_field_patch.js | 40 + voip/static/src/web/phone_field_patch.xml | 19 + voip/static/src/web/voip_systray_item.js | 46 + voip/static/src/web/voip_systray_item.xml | 11 + .../tests/activity/activity_patch_tests.js | 84 + .../mock_server/models/mail_activity.js | 83 + .../helpers/mock_server/models/res_partner.js | 44 + .../helpers/mock_server/models/res_users.js | 24 + .../helpers/mock_server/models/voip_call.js | 173 + .../tests/helpers/model_definitions_setup.js | 18 + .../tests/helpers/webclient_setup_patch.js | 32 + .../tests/softphone/activity_tab_tests.js | 101 + .../tests/softphone/contacts_tab_tests.js | 39 + .../softphone/correspondence_details_tests.js | 52 + .../device_selection_dialog.mobile.js | 57 + voip/static/tests/softphone/numpad_tests.js | 169 + .../static/tests/softphone/softphone_tests.js | 151 + .../tests/softphone/softphone_tests.mobile.js | 32 + .../tests/softphone/transfer_popover_tests.js | 29 + voip/static/tests/web/phone_field_tests.js | 55 + .../tests/web/voip_systray_item_tests.js | 34 + voip/tests/__init__.py | 4 + voip/tests/test_voip_access_rights.py | 47 + voip/tests/test_voip_user_config.py | 40 + voip/views/res_config_settings_views.xml | 27 + voip/views/res_partner_views.xml | 16 + voip/views/res_users_settings_views.xml | 20 + voip/views/res_users_views.xml | 43 + voip/views/voip_call_views.xml | 32 + voip_crm/__init__.py | 3 + voip_crm/__manifest__.py | 20 + voip_crm/i18n/ar.po | 36 + voip_crm/i18n/cs.po | 37 + voip_crm/i18n/da.po | 37 + voip_crm/i18n/de.po | 35 + voip_crm/i18n/es.po | 35 + voip_crm/i18n/fr.po | 36 + voip_crm/i18n/he.po | 25 + voip_crm/i18n/hr.po | 31 + voip_crm/i18n/hu.po | 37 + voip_crm/i18n/it.po | 35 + voip_crm/i18n/lb.po | 26 + voip_crm/i18n/lt.po | 25 + voip_crm/i18n/mn.po | 37 + voip_crm/i18n/nb.po | 30 + voip_crm/i18n/nl.po | 36 + voip_crm/i18n/pl.po | 37 + voip_crm/i18n/pt.po | 25 + voip_crm/i18n/pt_BR.po | 35 + voip_crm/i18n/ro.po | 36 + voip_crm/i18n/ru.po | 28 + voip_crm/i18n/tr.po | 37 + voip_crm/i18n/uk.po | 35 + voip_crm/i18n/vi.po | 35 + voip_crm/i18n/voip_crm.pot | 26 + voip_crm/i18n/zh_CN.po | 35 + voip_crm/i18n/zh_TW.po | 25 + voip_crm/models/__init__.py | 3 + voip_crm/models/crm_lead.py | 8 + .../tests/correspondence_details_tests.js | 37 + .../tests/helpers/mock_server/crm_lead.js | 24 + voip_crm/views/crm_lead_views.xml | 17 + voip_onsip/__init__.py | 3 + voip_onsip/__manifest__.py | 19 + voip_onsip/i18n/af.po | 56 + voip_onsip/i18n/am.po | 52 + voip_onsip/i18n/ar.po | 56 + voip_onsip/i18n/az.po | 56 + voip_onsip/i18n/bg.po | 58 + voip_onsip/i18n/bs.po | 55 + voip_onsip/i18n/ca.po | 60 + voip_onsip/i18n/cs.po | 57 + voip_onsip/i18n/da.po | 59 + voip_onsip/i18n/de.po | 56 + voip_onsip/i18n/el.po | 55 + voip_onsip/i18n/es.po | 57 + voip_onsip/i18n/es_419.po | 56 + voip_onsip/i18n/es_CL.po | 52 + voip_onsip/i18n/et.po | 58 + voip_onsip/i18n/eu.po | 52 + voip_onsip/i18n/fa.po | 58 + voip_onsip/i18n/fi.po | 57 + voip_onsip/i18n/fo.po | 52 + voip_onsip/i18n/fr.po | 56 + voip_onsip/i18n/gl.po | 52 + voip_onsip/i18n/gu.po | 56 + voip_onsip/i18n/he.po | 59 + voip_onsip/i18n/hr.po | 58 + voip_onsip/i18n/hu.po | 57 + voip_onsip/i18n/hy.po | 52 + voip_onsip/i18n/id.po | 57 + voip_onsip/i18n/is.po | 56 + voip_onsip/i18n/it.po | 56 + voip_onsip/i18n/ja.po | 56 + voip_onsip/i18n/ka.po | 55 + voip_onsip/i18n/kab.po | 52 + voip_onsip/i18n/km.po | 55 + voip_onsip/i18n/ko.po | 56 + voip_onsip/i18n/lb.po | 52 + voip_onsip/i18n/lo.po | 52 + voip_onsip/i18n/lt.po | 57 + voip_onsip/i18n/lv.po | 57 + voip_onsip/i18n/mk.po | 52 + voip_onsip/i18n/mn.po | 57 + voip_onsip/i18n/nb.po | 57 + voip_onsip/i18n/ne.po | 55 + voip_onsip/i18n/nl.po | 56 + voip_onsip/i18n/nl_BE.po | 52 + voip_onsip/i18n/pl.po | 56 + voip_onsip/i18n/pt.po | 57 + voip_onsip/i18n/pt_BR.po | 56 + voip_onsip/i18n/ro.po | 57 + voip_onsip/i18n/ru.po | 58 + voip_onsip/i18n/sk.po | 56 + voip_onsip/i18n/sl.po | 57 + voip_onsip/i18n/sq.po | 52 + voip_onsip/i18n/sr.po | 58 + voip_onsip/i18n/sr@latin.po | 55 + voip_onsip/i18n/sv.po | 58 + voip_onsip/i18n/th.po | 57 + voip_onsip/i18n/tr.po | 60 + voip_onsip/i18n/uk.po | 56 + voip_onsip/i18n/vi.po | 57 + voip_onsip/i18n/voip_onsip.pot | 52 + voip_onsip/i18n/zh_CN.po | 56 + voip_onsip/i18n/zh_TW.po | 57 + voip_onsip/models/__init__.py | 5 + voip_onsip/models/res_config_settings.py | 9 + voip_onsip/models/res_users.py | 24 + voip_onsip/models/res_users_settings.py | 9 + voip_onsip/static/description/icon.png | Bin 0 -> 631 bytes voip_onsip/static/description/icon.svg | 1 + .../static/src/user_settings_service_patch.js | 14 + voip_onsip/static/src/voip_service_patch.js | 14 + .../views/res_config_settings_views.xml | 15 + voip_onsip/views/res_users_views.xml | 23 + 267 files changed, 107181 insertions(+) create mode 100644 voip/__init__.py create mode 100644 voip/__manifest__.py create mode 100644 voip/data/neutralize.sql create mode 100644 voip/doc/index.rst create mode 100644 voip/i18n/af.po create mode 100644 voip/i18n/am.po create mode 100644 voip/i18n/ar.po create mode 100644 voip/i18n/az.po create mode 100644 voip/i18n/bg.po create mode 100644 voip/i18n/bs.po create mode 100644 voip/i18n/ca.po create mode 100644 voip/i18n/cs.po create mode 100644 voip/i18n/da.po create mode 100644 voip/i18n/de.po create mode 100644 voip/i18n/el.po create mode 100644 voip/i18n/es.po create mode 100644 voip/i18n/es_419.po create mode 100644 voip/i18n/es_CL.po create mode 100644 voip/i18n/et.po create mode 100644 voip/i18n/eu.po create mode 100644 voip/i18n/fa.po create mode 100644 voip/i18n/fi.po create mode 100644 voip/i18n/fo.po create mode 100644 voip/i18n/fr.po create mode 100644 voip/i18n/fr_BE.po create mode 100644 voip/i18n/fr_CA.po create mode 100644 voip/i18n/gl.po create mode 100644 voip/i18n/gu.po create mode 100644 voip/i18n/he.po create mode 100644 voip/i18n/hr.po create mode 100644 voip/i18n/hu.po create mode 100644 voip/i18n/hy.po create mode 100644 voip/i18n/id.po create mode 100644 voip/i18n/is.po create mode 100644 voip/i18n/it.po create mode 100644 voip/i18n/ja.po create mode 100644 voip/i18n/ka.po create mode 100644 voip/i18n/kab.po create mode 100644 voip/i18n/km.po create mode 100644 voip/i18n/ko.po create mode 100644 voip/i18n/lb.po create mode 100644 voip/i18n/lo.po create mode 100644 voip/i18n/lt.po create mode 100644 voip/i18n/lv.po create mode 100644 voip/i18n/mk.po create mode 100644 voip/i18n/ml_IN.po create mode 100644 voip/i18n/mn.po create mode 100644 voip/i18n/my.po create mode 100644 voip/i18n/nb.po create mode 100644 voip/i18n/ne.po create mode 100644 voip/i18n/nl.po create mode 100644 voip/i18n/nl_BE.po create mode 100644 voip/i18n/pl.po create mode 100644 voip/i18n/pt.po create mode 100644 voip/i18n/pt_BR.po create mode 100644 voip/i18n/ro.po create mode 100644 voip/i18n/ru.po create mode 100644 voip/i18n/sk.po create mode 100644 voip/i18n/sl.po create mode 100644 voip/i18n/sq.po create mode 100644 voip/i18n/sr.po create mode 100644 voip/i18n/sr@latin.po create mode 100644 voip/i18n/sv.po create mode 100644 voip/i18n/ta.po create mode 100644 voip/i18n/th.po create mode 100644 voip/i18n/tr.po create mode 100644 voip/i18n/uk.po create mode 100644 voip/i18n/vi.po create mode 100644 voip/i18n/voip.pot create mode 100644 voip/i18n/zh_CN.po create mode 100644 voip/i18n/zh_TW.po create mode 100644 voip/models/__init__.py create mode 100644 voip/models/mail_activity.py create mode 100644 voip/models/res_config_settings.py create mode 100644 voip/models/res_partner.py create mode 100644 voip/models/res_users.py create mode 100644 voip/models/res_users_settings.py create mode 100644 voip/models/voip_call.py create mode 100644 voip/models/voip_queue_mixin.py create mode 100644 voip/security/ir.model.access.csv create mode 100644 voip/security/voip_security.xml create mode 100644 voip/static/description/icon.png create mode 100644 voip/static/description/icon.svg create mode 100644 voip/static/lib/sip.js create mode 100644 voip/static/src/activity/@types/models.d.ts create mode 100644 voip/static/src/activity/activity_model_patch.js create mode 100644 voip/static/src/activity/activity_patch.js create mode 100644 voip/static/src/activity/activity_patch.xml create mode 100644 voip/static/src/core/call_model.js create mode 100644 voip/static/src/core/call_service.js create mode 100644 voip/static/src/core/correspondence_model.js create mode 100644 voip/static/src/core/messaging_service_patch.js create mode 100644 voip/static/src/core/registerer.js create mode 100644 voip/static/src/core/user_agent_service.js create mode 100644 voip/static/src/core/user_settings_service_patch.js create mode 100644 voip/static/src/core/voip_service.js create mode 100644 voip/static/src/mobile/call_method_selection_dialog.js create mode 100644 voip/static/src/mobile/call_method_selection_dialog.xml create mode 100644 voip/static/src/mobile/device_selection_dialog.js create mode 100644 voip/static/src/mobile/devise_selection_dialog.xml create mode 100644 voip/static/src/ringtones/dialtone.mp3 create mode 100644 voip/static/src/ringtones/incomingcall.mp3 create mode 100644 voip/static/src/ringtones/ringbacktone.mp3 create mode 100644 voip/static/src/ringtones/ringtone_service.js create mode 100644 voip/static/src/softphone/activities_tab.js create mode 100644 voip/static/src/softphone/activities_tab.xml create mode 100644 voip/static/src/softphone/call_invitation.js create mode 100644 voip/static/src/softphone/call_invitation.scss create mode 100644 voip/static/src/softphone/call_invitation.xml create mode 100644 voip/static/src/softphone/contacts_tab.js create mode 100644 voip/static/src/softphone/contacts_tab.xml create mode 100644 voip/static/src/softphone/correspondence_details.js create mode 100644 voip/static/src/softphone/correspondence_details.scss create mode 100644 voip/static/src/softphone/correspondence_details.xml create mode 100644 voip/static/src/softphone/numpad.js create mode 100644 voip/static/src/softphone/numpad.xml create mode 100644 voip/static/src/softphone/recent_tab.js create mode 100644 voip/static/src/softphone/recent_tab.xml create mode 100644 voip/static/src/softphone/softphone.dark.scss create mode 100644 voip/static/src/softphone/softphone.js create mode 100644 voip/static/src/softphone/softphone.scss create mode 100644 voip/static/src/softphone/softphone.xml create mode 100644 voip/static/src/softphone/softphone_container.js create mode 100644 voip/static/src/softphone/softphone_model.js create mode 100644 voip/static/src/softphone/transfer_popover.js create mode 100644 voip/static/src/softphone/transfer_popover.scss create mode 100644 voip/static/src/softphone/transfer_popover.xml create mode 100644 voip/static/src/utils/utils.js create mode 100644 voip/static/src/web/call_queue_switch.js create mode 100644 voip/static/src/web/call_queue_switch.scss create mode 100644 voip/static/src/web/call_queue_switch.xml create mode 100644 voip/static/src/web/phone_field_patch.js create mode 100644 voip/static/src/web/phone_field_patch.xml create mode 100644 voip/static/src/web/voip_systray_item.js create mode 100644 voip/static/src/web/voip_systray_item.xml create mode 100644 voip/static/tests/activity/activity_patch_tests.js create mode 100644 voip/static/tests/helpers/mock_server/models/mail_activity.js create mode 100644 voip/static/tests/helpers/mock_server/models/res_partner.js create mode 100644 voip/static/tests/helpers/mock_server/models/res_users.js create mode 100644 voip/static/tests/helpers/mock_server/models/voip_call.js create mode 100644 voip/static/tests/helpers/model_definitions_setup.js create mode 100644 voip/static/tests/helpers/webclient_setup_patch.js create mode 100644 voip/static/tests/softphone/activity_tab_tests.js create mode 100644 voip/static/tests/softphone/contacts_tab_tests.js create mode 100644 voip/static/tests/softphone/correspondence_details_tests.js create mode 100644 voip/static/tests/softphone/device_selection_dialog.mobile.js create mode 100644 voip/static/tests/softphone/numpad_tests.js create mode 100644 voip/static/tests/softphone/softphone_tests.js create mode 100644 voip/static/tests/softphone/softphone_tests.mobile.js create mode 100644 voip/static/tests/softphone/transfer_popover_tests.js create mode 100644 voip/static/tests/web/phone_field_tests.js create mode 100644 voip/static/tests/web/voip_systray_item_tests.js create mode 100644 voip/tests/__init__.py create mode 100644 voip/tests/test_voip_access_rights.py create mode 100644 voip/tests/test_voip_user_config.py create mode 100644 voip/views/res_config_settings_views.xml create mode 100644 voip/views/res_partner_views.xml create mode 100644 voip/views/res_users_settings_views.xml create mode 100644 voip/views/res_users_views.xml create mode 100644 voip/views/voip_call_views.xml create mode 100644 voip_crm/__init__.py create mode 100644 voip_crm/__manifest__.py create mode 100644 voip_crm/i18n/ar.po create mode 100644 voip_crm/i18n/cs.po create mode 100644 voip_crm/i18n/da.po create mode 100644 voip_crm/i18n/de.po create mode 100644 voip_crm/i18n/es.po create mode 100644 voip_crm/i18n/fr.po create mode 100644 voip_crm/i18n/he.po create mode 100644 voip_crm/i18n/hr.po create mode 100644 voip_crm/i18n/hu.po create mode 100644 voip_crm/i18n/it.po create mode 100644 voip_crm/i18n/lb.po create mode 100644 voip_crm/i18n/lt.po create mode 100644 voip_crm/i18n/mn.po create mode 100644 voip_crm/i18n/nb.po create mode 100644 voip_crm/i18n/nl.po create mode 100644 voip_crm/i18n/pl.po create mode 100644 voip_crm/i18n/pt.po create mode 100644 voip_crm/i18n/pt_BR.po create mode 100644 voip_crm/i18n/ro.po create mode 100644 voip_crm/i18n/ru.po create mode 100644 voip_crm/i18n/tr.po create mode 100644 voip_crm/i18n/uk.po create mode 100644 voip_crm/i18n/vi.po create mode 100644 voip_crm/i18n/voip_crm.pot create mode 100644 voip_crm/i18n/zh_CN.po create mode 100644 voip_crm/i18n/zh_TW.po create mode 100644 voip_crm/models/__init__.py create mode 100644 voip_crm/models/crm_lead.py create mode 100644 voip_crm/static/tests/correspondence_details_tests.js create mode 100644 voip_crm/static/tests/helpers/mock_server/crm_lead.js create mode 100644 voip_crm/views/crm_lead_views.xml create mode 100644 voip_onsip/__init__.py create mode 100644 voip_onsip/__manifest__.py create mode 100644 voip_onsip/i18n/af.po create mode 100644 voip_onsip/i18n/am.po create mode 100644 voip_onsip/i18n/ar.po create mode 100644 voip_onsip/i18n/az.po create mode 100644 voip_onsip/i18n/bg.po create mode 100644 voip_onsip/i18n/bs.po create mode 100644 voip_onsip/i18n/ca.po create mode 100644 voip_onsip/i18n/cs.po create mode 100644 voip_onsip/i18n/da.po create mode 100644 voip_onsip/i18n/de.po create mode 100644 voip_onsip/i18n/el.po create mode 100644 voip_onsip/i18n/es.po create mode 100644 voip_onsip/i18n/es_419.po create mode 100644 voip_onsip/i18n/es_CL.po create mode 100644 voip_onsip/i18n/et.po create mode 100644 voip_onsip/i18n/eu.po create mode 100644 voip_onsip/i18n/fa.po create mode 100644 voip_onsip/i18n/fi.po create mode 100644 voip_onsip/i18n/fo.po create mode 100644 voip_onsip/i18n/fr.po create mode 100644 voip_onsip/i18n/gl.po create mode 100644 voip_onsip/i18n/gu.po create mode 100644 voip_onsip/i18n/he.po create mode 100644 voip_onsip/i18n/hr.po create mode 100644 voip_onsip/i18n/hu.po create mode 100644 voip_onsip/i18n/hy.po create mode 100644 voip_onsip/i18n/id.po create mode 100644 voip_onsip/i18n/is.po create mode 100644 voip_onsip/i18n/it.po create mode 100644 voip_onsip/i18n/ja.po create mode 100644 voip_onsip/i18n/ka.po create mode 100644 voip_onsip/i18n/kab.po create mode 100644 voip_onsip/i18n/km.po create mode 100644 voip_onsip/i18n/ko.po create mode 100644 voip_onsip/i18n/lb.po create mode 100644 voip_onsip/i18n/lo.po create mode 100644 voip_onsip/i18n/lt.po create mode 100644 voip_onsip/i18n/lv.po create mode 100644 voip_onsip/i18n/mk.po create mode 100644 voip_onsip/i18n/mn.po create mode 100644 voip_onsip/i18n/nb.po create mode 100644 voip_onsip/i18n/ne.po create mode 100644 voip_onsip/i18n/nl.po create mode 100644 voip_onsip/i18n/nl_BE.po create mode 100644 voip_onsip/i18n/pl.po create mode 100644 voip_onsip/i18n/pt.po create mode 100644 voip_onsip/i18n/pt_BR.po create mode 100644 voip_onsip/i18n/ro.po create mode 100644 voip_onsip/i18n/ru.po create mode 100644 voip_onsip/i18n/sk.po create mode 100644 voip_onsip/i18n/sl.po create mode 100644 voip_onsip/i18n/sq.po create mode 100644 voip_onsip/i18n/sr.po create mode 100644 voip_onsip/i18n/sr@latin.po create mode 100644 voip_onsip/i18n/sv.po create mode 100644 voip_onsip/i18n/th.po create mode 100644 voip_onsip/i18n/tr.po create mode 100644 voip_onsip/i18n/uk.po create mode 100644 voip_onsip/i18n/vi.po create mode 100644 voip_onsip/i18n/voip_onsip.pot create mode 100644 voip_onsip/i18n/zh_CN.po create mode 100644 voip_onsip/i18n/zh_TW.po create mode 100644 voip_onsip/models/__init__.py create mode 100644 voip_onsip/models/res_config_settings.py create mode 100644 voip_onsip/models/res_users.py create mode 100644 voip_onsip/models/res_users_settings.py create mode 100644 voip_onsip/static/description/icon.png create mode 100644 voip_onsip/static/description/icon.svg create mode 100644 voip_onsip/static/src/user_settings_service_patch.js create mode 100644 voip_onsip/static/src/voip_service_patch.js create mode 100644 voip_onsip/views/res_config_settings_views.xml create mode 100644 voip_onsip/views/res_users_views.xml diff --git a/voip/__init__.py b/voip/__init__.py new file mode 100644 index 0000000..d6210b1 --- /dev/null +++ b/voip/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/voip/__manifest__.py b/voip/__manifest__.py new file mode 100644 index 0000000..79fcc2f --- /dev/null +++ b/voip/__manifest__.py @@ -0,0 +1,45 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + "name": "VoIP", + "summary": """Make and receive phone calls from within Odoo.""", + "description": """Adds a softphone and helpers to make phone calls directly from within your Odoo database.""", + "category": "Productivity/VOIP", + "sequence": 280, + "version": "2.0", + "depends": ["base", "mail", "phone_validation", "web", "web_mobile"], + "data": [ + "security/ir.model.access.csv", + "security/voip_security.xml", + "views/res_config_settings_views.xml", + "views/res_partner_views.xml", + "views/res_users_views.xml", + "views/res_users_settings_views.xml", + "views/voip_call_views.xml", + ], + "application": True, + "license": "OEEL-1", + "assets": { + "voip.assets_sip": [ + "voip/static/lib/sip.js" + ], + "web.assets_backend": [ + "voip/static/src/**/*", + ("remove", "voip/static/src/**/*.dark.scss"), + ], + "web.assets_web_dark": [ + "voip/static/src/**/*.dark.scss", + ], + "web.tests_assets": [ + "voip/static/tests/helpers/**/*.js", + ], + "web.qunit_suite_tests": [ + "voip/static/tests/**/*.js", + ("remove", "voip/static/tests/helpers/**/*"), + ("remove", "voip/static/tests/**/*.mobile.js"), + ], + "web.qunit_mobile_suite_tests": [ + "voip/static/tests/**/*.mobile.js", + ], + }, +} diff --git a/voip/data/neutralize.sql b/voip/data/neutralize.sql new file mode 100644 index 0000000..d26d3b3 --- /dev/null +++ b/voip/data/neutralize.sql @@ -0,0 +1,5 @@ +-- disable voip +INSERT INTO ir_config_parameter (key, value) +VALUES ('voip.mode', 'demo') + ON CONFLICT (key) DO + UPDATE SET value = 'demo'; diff --git a/voip/doc/index.rst b/voip/doc/index.rst new file mode 100644 index 0000000..e44c405 --- /dev/null +++ b/voip/doc/index.rst @@ -0,0 +1,130 @@ +================= +Odoo VOIP +================= + +Installing Asterisk server +========================== + +Before installing Asterisk you need to install the following dependencies: + +* wget +* gcc +* gcc-c++ +* ncurses-devel +* libxml2-devel +* sqlite-devel +* libsrtp-devel +* libuuid-devel +* openssl-devel + +If libsrtp is not available in the repo install it from source. + +* cd /usr/local/src/ +* wget http://srtp.sourceforge.net/srtp-1.4.2.tgz +* tar zxvf srtp-1.4.2.tgz +* cd /usr/local/src/srtp +* ./configure CFLAGS=-fPIC +* make && make install + +You also need to install PJSIP, you can download the source `here `_. +Once the source directory is extracted: + +* Change to the pjproject source directory: + * # cd pjproject +* run : + * # ./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr CFLAGS='-O2 -DNDEBUG' +* Build and install pjproject: + * # make dep + * # make + * # make install +* update shared library links: + * # ldconfig +* Verify that pjproject is installed,: + * # ldconfig -p | grep pj + * The result should be: + libpjsua.so (libc6,x86-64) => /usr/lib/libpjsua.so + libpjsip.so (libc6,x86-64) => /usr/lib/libpjsip.so + libpjsip-ua.so (libc6,x86-64) => /usr/lib/libpjsip-ua.so + libpjsip-simple.so (libc6,x86-64) => /usr/lib/libpjsip-simple.so + libpjnath.so (libc6,x86-64) => /usr/lib/libpjnath.so + libpjmedia.so (libc6,x86-64) => /usr/lib/libpjmedia.so + libpjmedia-videodev.so (libc6,x86-64) => /usr/lib/libpjmedia-videodev.so + libpjmedia-codec.so (libc6,x86-64) => /usr/lib/libpjmedia-codec.so + libpjmedia-audiodev.so (libc6,x86-64) => /usr/lib/libpjmedia-audiodev.so + libpjlib-util.so (libc6,x86-64) => /usr/lib/libpjlib-util.so + libpj.so (libc6,x86-64) => /usr/lib/libpj.so + +In order to install Asterisk 13.2.0, you can download the source directly `here `_. + +* Extract Asterisk: tar zxvf asterisk*. +* Enter the Asterisk directory: cd /usr/local/src/asterisk*. +* Run the Asterisk configure script: ./configure --libdir=/usr/lib64. +* Run the Asterisk menuselect tool: make menuselect. +* In the menuselect, go to the resources option and ensure that res_srtp is enabled. If there are 3 x’s next to res_srtp, there is a problem with the srtp library and you must reinstall it. Save the configuration (press x). You should also see stars in front of the res_pjsip lines. +* Compile and install Asterisk: make && make install. +* If you need the sample configs you can run make samples to install the sample configs. If you need to install the Asterisk startup script you can run make config. + +After you need to setup the DTLS certificates. + +* mkdir /etc/asterisk/keys +* Enter the Asterisk scripts directory: cd /usr/local/src/asterisk*/contrib/scripts. +* Create the DTLS certificates (replace pbx.mycompany.com with your ip address or dns name, replace My Super Company with your company name): ./ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys + +Configure Asterisk server +========================== + +For WebRTC, a lot of the settings that are needed MUST be in the peer settings. The global settings do not flow down into the peer settings very well. By default, Asterisk config files are located in /etc/asterisk/. Start by editing http.conf and make sure that the following lines are uncommented:: + + ;http.conf + [general] + enabled=yes + bindaddr=127.0.0.1 ; Replace this with your IP address + bindport=8088 ; Replace this with the port you want to listen on + +Next, edit sip.conf. The WebRTC peer requires encryption, avpf, and icesupport to be enabled. In most cases, directmedia should be disabled. Also under the WebRTC client, the transport needs to be listed as ‘ws’ to allow websocket connections. All of these config lines should be under the peer itself; setting these config lines globally might not work:: + + ;sip.conf + [general] + realm=127.0.0.1 ; Replace this with your IP address + udpbindaddr=127.0.0.1 ; Replace this with your IP address + transport=udp + + [1060] ; This will be WebRTC client + type=friend + username=1060 ; The Auth user for SIP.js + host=dynamic ; Allows any host to register + secret=password ; The SIP Password for SIP.js + encryption=yes ; Tell Asterisk to use encryption for this peer + avpf=yes ; Tell Asterisk to use AVPF for this peer + icesupport=yes ; Tell Asterisk to use ICE for this peer + context=default ; Tell Asterisk which context to use when this peer is dialing + directmedia=no ; Asterisk will relay media for this peer + transport=udp,ws ; Asterisk will allow this peer to register on UDP or WebSockets + force_avp=yes ; Force Asterisk to use avp. Introduced in Asterisk 11.11 + dtlsenable=yes ; Tell Asterisk to enable DTLS for this peer + dtlsverify=no ; Tell Asterisk to not verify your DTLS certs + dtlscertfile=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS cert file is + dtlsprivatekey=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS private key is + dtlssetup=actpass ; Tell Asterisk to use actpass SDP parameter when setting up DTLS + +In the sip.conf and rtp.conf files you also need to add or uncomment the lines: + +* icesupport = yes +* stunaddr = stun.l.google.com:19302 + +Lastly, set up extensions.conf:: + + ;extensions.conf + [default] + exten => 1060,1,Dial(SIP/1060) ; Dialing 1060 will call the SIP client registered to 1060 + +Configure Odoo VOIP +========================== + +In Odoo, the configuration should be done in the user's preferences. + +The VoIP username / Extension number is the number you configured previously in the sip.conf file. In our example, 1060. +The VoIP secret is the secret you chose in the sip.conf file. +The external device number is not a required field but it is used if you want to transfer your call from Odoo to an external phone also configured in the sip.conf file. + +The configuration needs also to be done in the sale settings under the title "PBX Configuration". You need to put the IP you define in the http.conf file and the WebSocket should be: ws://127.0.0.1:8088/ws. The part "127.0.0.1" needs to be the same as the IP defined previously and the "8088" is the port you defined in the http.conf file. diff --git a/voip/i18n/af.po b/voip/i18n/af.po new file mode 100644 index 0000000..3aa74bc --- /dev/null +++ b/voip/i18n/af.po @@ -0,0 +1,1139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Afrikaans (https://www.transifex.com/odoo/teams/41243/af/)\n" +"Language: af\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktiwiteit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Gekanselleer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Gekanselleer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Kontak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Geskep deur" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Geskep op" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Skeppingsdatum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klient" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Datum" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Vertoningsnaam" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "Dokument" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Duur" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Groepeer deur" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Laas Opgedateer deur" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Laas Opgedateer op" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "Stuur epos" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Volgorde" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Stand" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Gebruiker" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/am.po b/voip/i18n/am.po new file mode 100644 index 0000000..2aae96d --- /dev/null +++ b/voip/i18n/am.po @@ -0,0 +1,1135 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n" +"Language: am\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "መሰረዝ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "ተሰርዟል" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "ፈጣሪው" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "የተፈጠረበት" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "ተባባሪ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "በመደብ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "ቅደም ተከተል" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "ሁኔታው" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/ar.po b/voip/i18n/ar.po new file mode 100644 index 0000000..153c50b --- /dev/null +++ b/voip/i18n/ar.po @@ -0,0 +1,1169 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Malaz Abuidris , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s دقيقة %(seconds)s ثانية " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s دقيقة " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s مكالمات فائتة " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s ثانية " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "دقيقة واحدة 1 " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 مكالمة فائتة " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "ثانية واحدة 1 " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "دقيقتان 2 " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 مكالمة فائتة " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "ثانيتان 2 " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"حدث خطأ في الجهاز أثناء محاولة الوصول إلى جهاز تسجيل الصوت. يرجى التأكد من " +"أن أجهزتك محدثة ثم حاول مجدداً. " + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "مكالمة هاتفية يتم إجراؤها باستخدام تطبيق VoIP " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "تم إلغاؤها " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "تم إلغاء المكالمة لـ %(phone_number)s " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "النشاط" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "اسم النشاط " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "إضافة إلى قائمة انتظار الاتصالات " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"حدث خطأ أثناء تضمين جهاز تسجيل الصوت (%(errorName)s):\n" +"%(errorMessage)s " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"حدث خطأ أثناء تثبيت عميل المستخدم:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"حدث خطأ أثناء محاولة دعوة العضو التالي: %(phoneNumber)s\n" +"\n" +"الخطأ: %(error)s " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"هل أنت متأكد من أنك ترغب في حذف هذا النشاط؟ سيختفي للأبد. هذا وقت طويل جداً " +"😔 " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "اسأل " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "تراجع" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "مكالمة" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "مكالمة من %(correspondent)s " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "مكالمة من %(phone_number)s " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "مكالمة من جهاز آخر " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "تم رفض المكالمة (السبب: “%(reasonPhrase)s”) " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "مكالمة إلى %(correspondent)s " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "مكالمة إلى %(phone_number)s " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "جاري الاتصال " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "الاتصال بـ %(phone number)s " + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "المكالمات " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "إلغاء" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "إلغاء النشاط" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"تعذر الوصول إلى جهاز تسجيل الصوت. إذا كنت قد منعت الوصول إلى المايكروفون " +"الخاص بك، يرجى منح صلاحية الوصول ثم المحاولة من جديد، وإلا، تأكد من أن هذا " +"الموقع الإلكتروني يعمل على HTTPS وأن متصفحك لم يتم ضبطه لرفض الوصول إلى " +"أجهزة الوسائط. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "تغيير جهاز الإدخال " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "اختر جهازاً " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"اختر الطريقة لاستخدامها لإجراء مكالمة عند استخدام تطبيق الهاتف المحمول:\n" +" • VoIP: استخدام هاتف أودو الرقمي دائماً\n" +" • هاتف الجهاز: استخدام هاتف الجهاز دائماً\n" +" • السؤال: السؤال دائماً ما إذا كان يجب استخدام الهاتف الرقمي أم هاتف الجهاز.\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "إغلاق" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "إغلاق لوحة الأرقام " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "إغلاق الهاتف الرقمي " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "إغلاق التفاصيل " + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "تهيئة الإعدادات " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "تأكيد" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "جاري التوصيل... " + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "جهة الاتصال" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "جهات الاتصال" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "سيتم إظهار جهات الاتصال التي لها أرقام هواتف هنا. " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "العميل" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "النسخة التجريبية" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "هاتف الجهاز " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "الاتجاه" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "اسم العرض " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "المستندات" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "تحرير" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "إنهاء المكالمة " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "تاريخ الانتهاء" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "إدخال رقم أو اسم " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "قم بإدخال الرقم... " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "رقم الجهاز الخارجي " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "رقم الجهاز الخارجي " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"تعذر تحميل مكتبة SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "قم بإنهاء المكالمة ولكن أبقِ المكالمة في قائمة الانتظار " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "انتظر قليلاً! " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "كيفية الاتصال عن طريق الهاتف المحمول " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "كيفية إجراء مكالمات على الهاتف المحمول " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "المُعرف" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "إذا كان مفعلاً، سيتم رفض المكالمات الواردة تلقائياً في أودو. " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"إذا كان مفعلاً، سيؤدي إجراء مكالمة في أودو إلى تحويل المكالمة إلى \"رقم " +"الجهاز الخارجي\". استخدم هذا الخيار لإجراء المكالمة في أودو ولكن التعامل " +"معها من جهاز آخر - مثال: الهاتف الأرضي. " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"إذا كان خيار \"الاتصال من جهاز آخر\" مفعلاً، سيتم تحويل المكالمات التي قد تم" +" إجراؤها في أودو إلى رقم الهاتف هذا. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "في مكالمة لمدة: %(minutes)s:%(seconds)s " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "واردة " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "مكالمة واردة من.... " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "اختيار جهاز الإدخال " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "في قائمة انتظار المكالمات " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "آخر مكالمة هاتفية مرئية " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "التعيين كمنتهي " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "عذراً، ضغطت عن طريق الخطأ. " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "فائتة " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "مكالمة فائتة من %(phone_number)s " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "الهاتف المحمول" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "الجوال:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "كتم الصوت" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "الأنشطة التالية" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"ليس هناك جهاز تسجيل صوتي متاح. هذا التطبيق بحاجة إلى مايكروفون حتى تتمكن من " +"استخدامه. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "لم تتم جدولة أي مكالمات اليوم 😎 " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "ليست هناك أي نتائج للبحث 💔 " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "جاري" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "فتح لوحة الأرقام " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "فتح الهاتف الرقمي " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "الصادرة " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "عنوان الـIP لخادم PBX " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "عنوان PBX أو Websocket غير موجود. يرجى التحقق من الإعدادات. " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "رقم الهاتف" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "رقم الهاتف" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "الهاتف:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "يرجى قبول استخدام المايكروفون. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"يرجى المحاولة مجدداً لاحقاً. في حال استمرار المشكلة، اطلب من أحد المدراء " +"التحقق من التهيئة. " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "الإنتاج" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "حديث" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "تم رفض التسجيل: %(statusCode)s %(reasonPhrase)s. " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "رفض المكالمات الواردة " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "تم الرفض " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "تم رفض المكالمة من %(phone_number)s " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "تم رفض المكالمة لـ %(phone_number)s " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "أتذكُر ذلك؟ " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "الإزالة من قائمة انتظار المكالمات " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "المسؤول " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "يرن... " + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "قم بجدولة وإجراء المكالمات من قاعدة بياناتك " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "جدولة نشاط " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "بحث" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "اختر طريقة الاتصال " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "إرسال بريد إلكتروني " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "يجب رفض المكالمات الواردة تلقائياً " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "يجب الاتصال من جهاز آخر " + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"تعذر إضافة بعض المستندات إلى قائمة انتظار المكالمات لعدم وجود أرقام هواتف " +"مسجلة: %(record_names)s " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "تاريخ البدء " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "الولاية " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "أخبرنا كيف نقوم بإجراء المكالمة: " + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "تم إنهاؤها " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "عنوان IP لخادم PBX الخاص بك " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "رابط WebSocket الخاص بك " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "تم فقد الاتصال مع منفذ الويب وتعذر إعادة الاتصال. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"قد يأتي الخطأ من طبقة النقل. يرجى الطلب من أحد المدراء التحقق من URL خادم " +"مقبس الويب في الإعدادات العامة. في حال استمرار المشكلة، قد تكون المشكلة في " +"الخادم على الأغلب. " + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "اسم النشاط المتعلق بهذه المكالمة الهاتفية، إن وجد. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"الرقم غير صحيح. قد تكون بيانات اعتماد المستخدم خاطئة أو قد يكون قد تعذر الاتصال. يرجى التحقق من التهيئة.\n" +"(السبب: %(reasonPhrase)s) " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "كلمة المرور التي سيتم استخدامها للتسجيل بخادم PBX. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "الشخص الذي تحاول التواصل معه غير متاح حالياً. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"لم يتمكن الخادم من المصادقو معك. اطلب من أحد المدراء التحقق من أنك تصل إلى " +"الخادم الصحيح (عنوان IP لخادم PBX في الإعدادات العامة) ومن أن بيانات " +"الاعتماد المسجلة في تفضيلات المستخدم صحيحة. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"تعذر تشغيل وكيل المستخدم. قد لا يكون رابط URL الخاص بخادم مقبس الويب صحيحاً." +" يرجى طلب التحقق من URL خادم مقبس الويب بواسطة أحد المدراء في الإعدادات " +"العامة. " + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"اسم المستخدم (عادة ما يكون رقم الوصلة) الذي سيتم استخدامه للتسجيل بخادم PBX." +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "تم فقد الاتصال بين مقبس الويب والخادم. جاري إعادة محاولة الاتصال... " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "هناك مكالمة جارية حالياً، هل أنت متأكد أنك ترغب في مغادرة الصفحة؟ " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "تحويل " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "النقل إلى " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "إظهار الهاتف الرقمي " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "إلغاء الكتم " + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "المستخدم" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "إعدادات المستخدم " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "باستخدام VoIP " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "باستخدام هاتف الجهاز " + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "قائمة انتظار دعم VOIP " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "تهيئة VoIP " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "بيئة VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "سر VoIP " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "اسم مستخدم VoIP / رقم الوصلة " + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / المكالمات " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "سر Voip " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "اسم مستخدم Voip " + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "نعم، قم بذلك. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"لا يدعم متصفحك بعض الخصائص المطلوبة حتى يعمل VoIP. يرجى محاولة تحديث متصفحك " +"أو استخدام واحد مختلف. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"سجل المكالمات الخاص بك فارغ! قم بإجراء مكالمة الآن وسيتم إدراجها هنا 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"لم يتم تعيين بيانات تسجيل الدخول الخاصة بك بشكل صحيح. يرجى التواصل مع مديرك." +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "أقل من ثانية " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "الهاتف المتحرك " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/az.po b/voip/i18n/az.po new file mode 100644 index 0000000..932f80e --- /dev/null +++ b/voip/i18n/az.po @@ -0,0 +1,1140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Jumshud Sultanov , 2022 +# erpgo translator , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "Qəbul edin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Fəaliyyət" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "avatar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Ləğv edin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Ləğv olundu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "Bağlayın" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Parametrləri Konfiqurasiya edin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "Kontaktlar" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Tərəfindən yaradılıb" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Tarixdə yaradıldı" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Yaradılma Tarixi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Müştəri" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Tarix" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "İstiqamət" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Ekran Adı" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "sənəd" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Gözlənilən Tarix" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Müddət" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Redaktə edin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Aşağıdakılara görə Qrupla" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "Gələn" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Son Yeniləyən" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Son Yenilənmə tarixi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Qeyd" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "Gedən" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "Gözləmədədir" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Məhsul" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "İmtina edildi" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "Məsul" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Fəaliyyət Planı" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "Axtarın" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Ardıcıllıq" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "Xülasə" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "Görülməli iş" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "Köçürmə" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "Təyin olunmamış" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "İstifadəçi" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/bg.po b/voip/i18n/bg.po new file mode 100644 index 0000000..948fa74 --- /dev/null +++ b/voip/i18n/bg.po @@ -0,0 +1,1121 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Ивайло Малинов , 2023 +# Rosen Vladimirov , 2023 +# Martin Trigaux, 2023 +# Albena Mincheva , 2023 +# KeyVillage, 2023 +# aleksandar ivanov, 2023 +# Maria Boyadjieva , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Maria Boyadjieva , 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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Дейност" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Добавете към опашката за повиквания" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Бутон за връщане назад" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Обаждане" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Отказ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Затвори" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Настройки" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Потвърждение" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Контакт" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Контакти" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Създадено от" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Създадено на" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Клиент" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Демо" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Посока" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Име за Показване" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Документи" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Редактирай" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Крайна Дата" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Входящ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Е на опашката за разговори" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Последно актуализирано от" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Последно актуализирано на" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Маркирайте като готово" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Мобилен" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Мобилен:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Следващи дейности" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Протичащ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Изходящ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP на PBX сървър " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Телефон" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Телефонен номер" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Телефон:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Продукция" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Отхвърлен" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Отстранете от опашката за разговори" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Отговорно лице" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Планирайте дейност" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Потърсете" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Начална Дата" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Област" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL адреса на уеб гнездото Ви" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Прехвърлете" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Потребител" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "Уеб гнездо" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/bs.po b/voip/i18n/bs.po new file mode 100644 index 0000000..b3b2c48 --- /dev/null +++ b/voip/i18n/bs.po @@ -0,0 +1,1140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux, 2018 +# Boško Stojaković , 2018 +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2018-09-21 14:06+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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "# Slučajeva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivnost" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "Pozovi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Otkaži" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Otkazan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Datum kreiranja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kupac" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Datum" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Datum dospijeća" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Trajanje" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Grupiši po" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "Održan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "Ulazni" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Označi kao završeno" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "Mobitel" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "Nije održano" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Zabilješka" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "Odlazeći" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "Na čekanju" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "Tel. pozivi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Proizvodnja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "Odgovoran" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "Traži telefonske pozive" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Sekvenca" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Status" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "Sažetak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "Za uraditi" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "Sutra" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "Prenos" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "Nedodeljen" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "min" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/ca.po b/voip/i18n/ca.po new file mode 100644 index 0000000..85d0a07 --- /dev/null +++ b/voip/i18n/ca.po @@ -0,0 +1,1168 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Marc Tormo i Bochaca , 2023 +# Albert Parera, 2023 +# Pere Martínez, 2023 +# Carles Antoli , 2023 +# Quim - eccit , 2023 +# Josep Sànchez , 2023 +# Eric Antones , 2023 +# Óscar Fonseca , 2023 +# Manel Fernandez Ramirez , 2023 +# eriiikgt, 2023 +# Martin Trigaux, 2023 +# Jonatan Gk, 2023 +# Ivan Espinola, 2023 +# marcescu, 2023 +# Josep Anton Belchi, 2024 +# Harcogourmet, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Harcogourmet, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s seg" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minuts" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s trucades perdudes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s segons" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 trucada perduda" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 segon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minuts" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 trucades perdudes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 segons" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"S'ha esdevingut un error de hardware mentre s'intentava accedir al " +"dispositiu d'enregistrament d'àudio. Assegureu-vos que els vostres drivers " +"estan actualitzats i torneu-ho a provar." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Una trucada telefónica gestionada amb l'aplicació de veu IP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Cancel·lat" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Trucada a %(phone_number)s cancel·lada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Activitat" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nom de l'activitat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Afegeix a la Cua de Trucades" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"S'ha esdevingut un error relacionat amb el dispositiu d'enregistrament (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"S'ha esdevingut un error mentre s'instanciava l'agent d'usuari:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "Segur que voleu esborrar aquesta activitat? Es perdrà definitivament" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Pregunta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Retrocés" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Trucada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Trucada des de %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Trucada des de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Truca des d'un altre dispositiu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Trucada rebutjada (motiu: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Trucant" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Trucant %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Trucades" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancel·la" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Cancel·la l'activitat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"No es pot accedir al dispositiu d'enregistrament d'àudio. Si heu denegat " +"l'accés al vostre micròfon, permeteu-lo i torneu a provar. En altre cas, " +"assegureu-vos que aquest lloc web fa servir HTTPS i que el vostre navegador " +"no està configurat per a denegar accés a dispositius multimèdia." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Trieu el mètode que s'utilitzarà per a fer una trucada quan s'utilitzi l'aplicació mòbil:\n" +" the VoIP: Usa sempre el telèfon mòbil Odoo\n" +" the Telèfon del dispositiu: Utilitza sempre el telèfon del dispositiu\n" +" the Pregunta: Pregunta sempre si s'ha d'utilitzar el telèfon mòbil o el telèfon del dispositiu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Tancar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Paràmetres de configuració" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contacte" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contactes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Client/a" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "De prova" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telèfon del dispositiu" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Direcció" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nom mostrat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documents" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Modificar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Finalitza la trucada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Data de finalització" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Introduïu el número o el nom" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Número de dispositiu extern" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Penjar però mantenir la trucada en la cua" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Com fer trucades al mòbil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Si s'habilita, les trucades entrants es rebutjaran automàticament a Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Si s'habilita, la col·locació d'una trucada a Odoo transferirà la trucada al" +" \"número de dispositiu extern\". Utilitzeu aquesta opció per col·locar la " +"trucada a Odoo però gestionar-la des d'un altre dispositiu -p. ex., el " +"telèfon d'escriptori." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Si l'opció \"Call from other device\" està activada, les trucades " +"col·locades a Odoo es transferiran a aquest número de telèfon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Entrant" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "És a la cua de trucades" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Darrera trucada telefònica" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marcar com fet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "S'ha perdut" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mòbil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mòbil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Silenci" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Activitat següent" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"No hi ha cap dispositiu d'enregistrament d'àudio disponible. L'aplicació " +"requereix un micròfon per poder utilitzar-lo." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "En marxa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Sortida" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP del servidor PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Falta l'adreça PBX o Websocket. Comproveu la configuració." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telèfon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Número de telèfon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telèfon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Si us plau, accepti l'ús del micròfon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Torneu-ho a provar més tard. Si el problema persisteix, és possible que " +"vulgueu demanar a un administrador que comprovi la configuració." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Producció" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Recent" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registre rebutjat: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Rebutja les trucades entrants" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rebutjada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Elimina de la cua de trucades" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsable" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planificar activitat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Cercar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Alguns documents no es poden afegir a la cua de trucades perquè no tenen un " +"número de telèfon establert: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Data inicial" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Estat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "L'adreça IP del vostre servidor PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "L'URL del WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"L'error pot provenir de la capa de transport. Teniu un administrador que " +"verifiqui l'URL del servidor websocket a la Configuració General. Si el " +"problema persisteix, probablement és un problema amb el servidor." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "La contrasenya que s'utilitzarà per registrar-se amb el servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "La persona que intentes contactar no està disponible actualment." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"El servidor no us ha pogut autenticar. Teniu un administrador que verifiqui " +"que esteu arribant al servidor correcte (IP del servidor PBX a la " +"Configuració General) i que les credencials a les vostres preferències " +"d'usuari són correctes." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"El nom d'usuari (normalment el número d'extensió) que s'utilitzarà per " +"registrar-se amb el servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transferència" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transfereix a" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Activa el so" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Usuari" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Arranjament d' usuari" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Implementació de la cua VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Configuració del VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Entorn VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Secret VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nom d'usuari / número d'extensió VoIP" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telèfon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/cs.po b/voip/i18n/cs.po new file mode 100644 index 0000000..fbe56c7 --- /dev/null +++ b/voip/i18n/cs.po @@ -0,0 +1,1143 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# karolína schusterová , 2023 +# Ivana Bartonkova, 2023 +# Aleš Fiala , 2023 +# Jakub Smolka, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 zmeškaný hovor" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 zmeškané hovory" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivita" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Přidat do fronty hovorů" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Dotaz:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Hovor" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Volejte z jiného zařízení" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Povolání" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Zrušit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Zrušit aktivitu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Vyberte metodu, která se použije k uskutečnění hovoru při používání mobilní aplikace:\n" +" • VoIP: Vždy používejte softwarový telefon Odoo\n" +" • Telefon zařízení: Vždy používejte telefon zařízení\n" +" • Zeptat se: Vždy se zeptejte, zda je nutné použít softwarový telefon nebo telefon zařízení\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Zavřít" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurační nastavení" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Vytvořeno uživatelem" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Vytvořeno dne" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Zákazník" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telefon zařízení" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Směr" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Zobrazovací název" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Upravit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Konec hovoru" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Datum do" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Vložte číslo nebo jméno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Číslo externího zařízení" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Zavěsit, ale podržet hovor ve frontě" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Jak volat na mobil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "Je-li zapnuto, budou příchozí hovory v Odoo automaticky odmítnuty." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Je-li zapnuto, volání v Odoo převede hovor na „číslo externího zařízení“. " +"Tuto možnost použijte, chcete-li uskutečnit hovor v Odoo, ale vyřídit jej z " +"jiného zařízení – např. váš stolní telefon." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Pokud je zapnuta možnost „Volání z jiného zařízení“, hovory uskutečněné v " +"Odoo budou přesměrovány na toto telefonní číslo." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Příchozí" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Ve volací frontě" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Naposledy viděný telefonát" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Naposledy upraveno uživatelem" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Naposledy upraveno dne" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Označit jako hotovo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Zmeškané" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Ztišit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Další aktivity" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Není k dispozici žádné zařízení pro záznam zvuku. Aplikace vyžaduje k " +"použití mikrofon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Pokračující" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Odchozí" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Server IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Chybí adresa PBX nebo Websocket. Zkontrolujte prosím svá nastavení." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefonní číslo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Přijměte prosím použití mikrofonu." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Prosím zkuste to znovu později. Pokud problém přetrvává, můžete požádat " +"správce o kontrolu nastavení." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Výroba" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Nedávné" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registrace zamítnuta: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Zamítnout příchozí hovory" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Odmítnuto" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Odstranit z volací fronty" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Odpovědný" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Naplánovat aktivitu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Vyhledávání" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Některé dokumenty nelze přidat do fronty hovorů, protože nemají nastavené " +"telefonní číslo: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Počáteční datum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stát" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "IP adresa vašeho PBX serveru" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Adresa URL vašeho webu WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Chyba může pocházet z transportní vrstvy. Požádejte správce, aby ověřil " +"adresu URL serveru websocket v části Obecná nastavení. Pokud problém " +"přetrvává, pravděpodobně se jedná o problém se serverem." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Heslo, které bude použito pro registraci k serveru PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Osoba, kterou se snažíte kontaktovat, je momentálně nedostupná." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Serveru se nepodařilo ověřit vás. Požádejte správce, aby ověřil, že se " +"nacházíte na správném serveru (IP serveru PBX v Obecném nastavení) a zda " +"jsou přihlašovací údaje ve vašich uživatelských předvolbách správné." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Uživatelské jméno (obvykle číslo rozšíření), které bude použito pro " +"registraci na serveru PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Převod" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Přenést do" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Uživatel" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Uživatelské nastavení" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP podpora fronty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Nastavení VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Prostředí VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Tajný klíč VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Uživatelské jméno VoIP / Číslo rozšíření" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/da.po b/voip/i18n/da.po new file mode 100644 index 0000000..87f61d2 --- /dev/null +++ b/voip/i18n/da.po @@ -0,0 +1,1121 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# lhmflexerp , 2023 +# Mads Søndergaard, 2023 +# Mads Søndergaard, 2023 +# Ejner Sønniksen , 2023 +# Sanne Kristensen , 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Martin Trigaux, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s sek" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minutter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s sekunder" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 ubesvaret opkald" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 sekund" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minutter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 sekunder" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivitet" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Tilføj opkaldskøen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Spørg" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Ring" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Ringer op" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Annullér" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Annuller aktiviteten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Luk" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurer opsætning" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bekræft" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Adressebog" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Oprettet af" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Oprettet den" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kunde" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Retning" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Rediger" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Afslut Opkald" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Slut dato" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Angiv nummer eller navn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Læg på men behold opkaldet i kø" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Indkommende" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Er i opkaldskøen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Sidst Sete Telefonopkald" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Sidst opdateret af" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Sidst opdateret den" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Markér som udført" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Glippet" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobiltelefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Slå lyden fra" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Næste aktiviteter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Igangværende" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Udgående" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Server IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" +"PBX eller Websocket adresse mangler. Tjek venligst dine indstillinger." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefonnummer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Accepter venligst brugen af mikrofon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produktion" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Nye" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Afvist" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Fjern fra opkaldskøen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Ansvarlig" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Skemalæg aktivitet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Søg" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Start dato" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "The URL of your WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Personen du prøver at kontakte er i øjeblikket ikke tilgængelig." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Overfør" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Bruger" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Bruger indstillinger" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP Miljø" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/de.po b/voip/i18n/de.po new file mode 100644 index 0000000..73af163 --- /dev/null +++ b/voip/i18n/de.po @@ -0,0 +1,1190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Leon Grill , 2023 +# Larissa Manderfeld, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s Min. %(seconds)s Sek." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s Minuten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s verpasste Anrufe" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s Sekunden" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 Minute" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 verpasster Anruf" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 Sekunde" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 Minuten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 verpasste Anrufe" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 Sekunden" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Beim Versuch, auf das Audioaufnahmegerät zuzugreifen, ist ein Hardwarefehler" +" aufgetreten. Bitte stellen Sie sicher, dass Ihre Treiber auf dem neuesten " +"Stand sind und versuchen Sie es erneut." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Ein Telefonanruf, der über die VoIP-App abgewickelt wird" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Abgebrochen" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Abgebrochender Anruf an %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivität" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Aktivitätsbezeichnung" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Zur Anruf-Warteschlange hinzufügen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Es ist ein Fehler im Zusammenhang mit dem Audioaufnahmegerät aufgetreten (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Bei der Instanziierung des Benutzeragenten ist ein Fehler aufgetreten:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Beim Versuch, die folgende Nummer einzuladen, ist ein Fehler aufgetreten:%(phoneNumber)s\n" +"\n" +"Fehler:%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Sind Sie sicher, dass Sie diese Aktivität löschen möchten? Sie wird für " +"immer verloren sein, was eine ziemlich lange Zeit ist 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Fragen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Zurück" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Anruf" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Anruf von %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Anruf von %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Anruf von einem anderen Gerät" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Anruf abgelehnt (Begründung: „%(reasonPhrase)s“)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Anruf an %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Anruf an %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Anrufen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "%(phone number)s anrufen" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Anrufe" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Abbrechen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Aktivität abbrechen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Zugriff auf Audioaufnahmegerät nicht möglich. Wenn Sie den Zugriff auf Ihr " +"Mikrofon verweigert haben, gewähren Sie ihn bitte und versuchen Sie es " +"erneut. Andernfalls stellen Sie sicher, dass diese Website über HTTPS läuft " +"und dass Ihr Browser nicht so eingestellt ist, dass er den Zugriff auf " +"Mediengeräte verweigert." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Eingabegeräte wechseln" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Ein Gerät auswählen:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Wählen Sie die Methode, mit der Sie einen Anruf über die mobile Anwendung tätigen möchten:\n" +" • VoIP: Immer das Odoo-Softphone verwenden\n" +" • Telefon des Geräts: Immer das Telefon des Geräts verwenden\n" +" • Fragen: Immer fragen, ob das Softphone oder das Telefon des Geräts verwendet werden soll.\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Schließen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Zahlenblock schließen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Softphone schließen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Details schließen" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurationseinstellungen " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bestätigen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Verbinden ..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakte" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Kontakte mit Telefonnummern werden hier angezeigt." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kunde" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telefon des Geräts" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Leitung" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Bearbeiten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Anruf beenden" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Enddatum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Nummer oder Namen eingeben" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Geben Sie die Nummer ein ..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Externe Gerätenummer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Externe Gerätnummer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Laden der SIP.js-Bibliothek fehlgeschlagen:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Auflegen, aber Anruf in die Warteschlange verschieben" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Bleiben Sie dran!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Wie Anrufe auf Handy tätigen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Wie Anrufe auf Handy tätigen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Wenn diese Option aktiviert ist, werden eingehende Anrufe in Odoo " +"automatisch abgelehnt." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Wenn diese Option aktiviert ist, wird bei einem Anruf in Odoo der Anruf an " +"die „Externe Gerätenummer“ weitergeleitet. Verwenden Sie diese Option, um " +"den Anruf in Odoo zu tätigen, ihn aber von einem anderen Gerät auszuführen -" +" z. B. von Ihrem Tischtelefon aus." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Wenn die Option „Von einem anderen Gerät anrufen“ aktiviert ist, werden in " +"Odoo getätigte Anrufe an diese Rufnummer weitergeleitet." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Im Anruf für: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Eingehend" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Eingehender Anruf von ..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Auswahl des Eingabegeräts" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Ist in der Anruf-Warteschlange" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Zuletzt gesehener Telefonanruf" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Als erledigt markieren" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Verwählt, sorry." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Verpasst" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Verpasster Anruf von %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Stumm" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Nächste Aktivitäten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Kein Audioaufnahmegerät vorhanden. Die Anwendung benötigt ein Mikrofon, um " +"verwendet werden zu können." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Keine Anrufe für heute geplant 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Keine Suchergebnisse 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Laufend" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Zahlenblock öffnen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Softphone öffnen" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Ausgehend" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX-Server-IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" +"PBX- oder Websocket-Adresse fehlt. Bitte prüfen Sie Ihre Einstellungen." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefonnummer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Bitte lassen Sie die Nutzung des Mikrofons zu." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Bitte versuchen Sie es später noch einmal. Wenn das Problem weiterhin " +"besteht, sollten Sie einen Administrator bitten, die Konfiguration zu " +"überprüfen." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produktion" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Neueste" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registrierung abgelehnt: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Eingehende Anrufe ablehnen" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Abgelehnt" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Abgelehnter Anruf von %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Abgelehnter Anruf an %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Erinnern Sie sich?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Aus Warteschlange entfernen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Verantwortlich" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Es klingelt ..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Anrufe aus Ihrer Datenbank planen & tätigen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Aktivität planen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Suchen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Eine Anrufmethode auswählen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "E-Mail versenden" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Sollte eingehende Anrufe automatisch ablehnen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Sollte von einem anderen Gerät anrufen" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Einige Dokumente können nicht in die Warteschlange aufgenommen werden, da " +"für sie keine Telefonnummer festgelegt ist: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Startdatum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Status" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Sagen Sie uns, wie Sie den Anruf tätigen können:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Beendet" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "Die IP-Adresse Ihres PBX-Servers" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Die URL Ihres WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" +"Die WebSocket-Verbindung wurde unterbrochen und konnte nicht " +"wiederhergestellt werden." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Der Fehler kann von der Transportschicht herrühren. Bitte lassen Sie einen " +"Administrator die URL des Websocket-Servers in den Allgemeinen Einstellungen" +" überprüfen. Wenn das Problem weiterhin besteht, handelt es sich " +"wahrscheinlich um ein Problem mit dem Server." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" +"Der Name der Aktivität, die mit diesem Anruf verbunden ist, falls vorhanden." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Die Nummer ist falsch, die Benutzeranmeldeinformationen könnten falsch sein oder die Verbindung kann nicht hergestellt werden. Bitte überprüfen Sie Ihre Konfiguration.\n" +"(ermittelter Grund: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" +"Das Passwort, das für die Registrierung beim PBX-Server verwendet wird." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" +"Die Person, die Sie zu kontaktieren versuchen, ist derzeit nicht verfügbar." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Der Server konnte Sie nicht authentifizieren. Bitte lassen Sie einen " +"Administrator überprüfen, ob Sie den richtigen Server erreichen (PBX-Server-" +"IP in den Allgemeinen Einstellungen) und ob die Anmeldedaten in Ihren " +"Benutzereinstellungen korrekt sind." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Der User Agent konnte nicht gestartet werden. Die URL des Websocket-Servers " +"ist möglicherweise falsch. Bitte lassen Sie einen Administrator die " +"Websocket-Server-URL in den Allgemeinen Einstellungen überprüfen." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Der Benutzername (in der Regel die Nebenstellennummer), der für die " +"Registrierung beim PBX-Server verwendet werden soll." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"Die Websocket-Verbindung mit dem Server ist unterbrochen worden. Es wird " +"versucht, die Verbindung wiederherzustellen ..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Es läuft noch ein Anruf. Sind Sie sicher, dass Sie die Seite verlassen " +"möchten?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Weiterleiten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Weiterleiten an" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Softphone ausklappen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Stummschaltung aufheben" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Benutzer" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Benutzereinstellungen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Mit VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Mit Telefon des Geräts" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP-Warteschlangensupport" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP-Konfiguration" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VOIP-Umgebung" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP-Geheimnis" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP-Benutzername/-Nebenstellennummer" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / Anrufe" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip-Geheimnis" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip-Benutzername" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Ja, los!" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Ihr Browser unterstützt einige der für VoIP erforderlichen Funktionen nicht." +" Bitte versuchen Sie, Ihren Browser zu aktualisieren oder einen anderen " +"Browser zu verwenden." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Ihr Anrufprotokoll ist leer! Tätigen Sie jetzt einen Anruf und lassen Sie " +"ihn hier auflisten 💡." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Ihre Anmeldedaten sind nicht korrekt eingestellt. Bitte wenden Sie sich an " +"Ihren Administrator." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "weniger als einer Sekunde" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "Telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "VoIP" diff --git a/voip/i18n/el.po b/voip/i18n/el.po new file mode 100644 index 0000000..574accd --- /dev/null +++ b/voip/i18n/el.po @@ -0,0 +1,1141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Kostas Goutoudis , 2019 +# George Tarasidis , 2019 +# Martin Trigaux, 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2016-08-05 13:32+0000\n" +"Last-Translator: Martin Trigaux, 2019\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "# από Υποθέσεις" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Δραστηριότητα" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "Άβαταρ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "Τηλεφώνημα" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Ακύρωση" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Ακυρώθηκε" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "Κάντε κλικ για να κατάργηση αποκλεισμού" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "Κλείσιμο" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Επαφή" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Δημιουργήθηκε από" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Ημερομηνία Δημιουργίας" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Πελάτης" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Ημερομηνία" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Εμφάνιση Ονόματος" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "Έγγραφο" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Ημερ. Λήξης" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Διάρκεια" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "Διάρκεια σε λεπτά." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Ομαδοποίηση κατά" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "Κρατήθηκε" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "Κωδικός" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "Σε 2 Μήνες" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "Εισερχόμενα" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Τελευταία Ενημέρωση από" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Τελευταία Ενημέρωση στις" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Σήμανση ως Ολοκληρωμένη" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "Κινητό" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "Οι Συνδιαλέξεις μου" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "Δεν πραγματοποιήθηκε" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Σημείωση" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "Εξερχόμενα" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "Εκρεμμής" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "Τηλέφωνο" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "Τηλεφωνήματα" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Παραγωγή" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "Υπεύθυνοι" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Προγραμματισμός Δραστηριότητας" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "Αναζήτηση Τηλεφωνημάτων" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "Αποστολή mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Ακολουθία" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "Συγκεκριμένη Ημερομηνία" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Κατάσταση" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "Περίληψη" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "Προς υλοποίηση" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "Αύριο" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "Μεταφορά" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "Μη Ανατεθειμένη" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "τουλάχιστον" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/es.po b/voip/i18n/es.po new file mode 100644 index 0000000..b7cf5f4 --- /dev/null +++ b/voip/i18n/es.po @@ -0,0 +1,1181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Patricia Gutiérrez Capetillo , 2023 +# Larissa Manderfeld, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s seg" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minutos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s llamadas perdidas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s segundos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minuto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 llamada perdida" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 segundo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minutos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 llamadas perdidas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 segundos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Se ha producido un error de hardware al intentar acceder al dispositivo de " +"grabación de audio. Por favor, asegúrese de que sus controladores están " +"actualizados e inténtelo de nuevo." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Una llamada telefónica mediante la aplicación VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Cancelada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Llamada cancelada a %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Actividad" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nombre de la actividad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Agregar a la cola de llamadas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Ocurrió un error con el dispositivo de grabación de audio (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Ocurrió un error durante la instanciación del agente de usuario:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Ocurrió un error al intentar invitar al siguiente número: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"¿En verdad desea eliminar esta actividad? Se perderá para siempre, que es " +"bastante tiempo 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Preguntar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Retroceso" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Llamada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Llamada de %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Llamada de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Llamada desde otro dispositivo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Llamada rechazada (motivo: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Llamada a %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Llamada a %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Llamando" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Llamando %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Llamadas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Cancelar la actividad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"No se puede acceder al dispositivo de grabación de audio. Si ha denegado el " +"acceso a su micrófono, habilítelo e inténtelo de nuevo. De lo contrario, " +"asegúrese de que este sitio web se ejecuta a través de HTTPS y de que su " +"navegador no está configurado para denegar el acceso a dispositivos " +"multimedia." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Cambiar dispositivo de entrada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Elija un dispositivo:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Elija el método que se usará para realizar una llamada al usar la aplicación móvil:\n" +" • VoIP: siempre se usará el softphone de Odoo\n" +" • Teléfono del dispositivo: siempre se usará el dispositivo del teléfono\n" +" • Preguntar: siempre se preguntará si se debe usar el softphone o el teléfono del dispositivo\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Cerrar teclado numérico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Cerrar softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Cerrar información" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Conectando..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contacto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contactos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Los contactos con un número de teléfono se mostrarán aquí." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demostración" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Teléfono del dispositivo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Dirección" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documentos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Finalizar llamada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Fecha de finalización" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Ingrese el número o el nombre" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Ingrese el número..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Número de dispositivo externo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Número de dispositivo externo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Error al cargar la librería SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Colgar pero mantener la llamada en la cola" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "¡Espere!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Cómo llamar desde un dispositivo móvil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Cómo realizar llamadas desde el móvil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "Si se activa, Odoo rechazará automáticamente las llamadas entrantes." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Si se activa, realizar la llamada en Odoo transferirá la llamada al \"número" +" de dispositivo externo\". Use esta opción para realizar una llamada en Odoo" +" pero tomarla desde otro dispositivo, por ejemplo, el teléfono de su " +"escritorio." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Si la opción de \"llamada desde otro dispositivo\" está activada, las " +"llamadas realizadas en Odoo se transferirán en este número de teléfono." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Duración de la llamada: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Entrante" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Llamada entrante de..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Selección del dispositivo de entrada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Está en la cola de llamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Última llamada que se vio" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marcar como hecho" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Me equivoqué, lo siento." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Perdida" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Llamada perdida de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Móvil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Móvil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Silenciar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Siguientes actividades" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"No hay dispositivo de grabación disponible. La aplicación necesita un " +"micrófono para poder usarse." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "No tiene llamadas programadas para hoy 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "No hay resultados de búsqueda 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "En curso" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Abrir teclado numérico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Abrir Softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Saliente" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "Dirección IP del servidor PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Falta la dirección de PBX o Websocket. Revise su configuración." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Teléfono" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Número de teléfono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Teléfono:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Acepte usar el micrófono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Inténtelo de nuevo más tarde. Si el problema persiste, pídale a un " +"administrador que revise la configuración." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Producción" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Reciente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registro rechazado: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Rechazar llamadas entrantes" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rechazada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Llamada rechazada de %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Llamada rechazada de %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "¿Recuerda? " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Eliminar de la cola de llamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsable" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Llamando..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Programe y realice llamadas desde su base de datos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planificar actividad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Buscar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Seleccionar un método de llamada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Enviar correo electrónico" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Debe rechazar automáticamente las llamadas entrantes" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Debe llamar desde otro dispositivo" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Algunos documentos no se pueden agregar a la cola de llamadas ya que no " +"tienen un número de teléfono configurado: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Fecha de inicio" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Estado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Díganos cómo hacer la llamada:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Finalizada" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "La dirección IP de su servidor PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "La URL de su WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "Se perdió la conexión de websocket y no se pudo restablecer." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Es probable que el error venga de la capa de transporte. Pídale a un " +"administrador que verifique la URL del servidor del websocket en ajustes " +"generales. Si el problema persiste, probablemente sea un problema con el " +"servidor." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" +"El nombre de la actividad relacionada con esta llamada telefónica, si " +"existe." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"El número es incorrecto, las credenciales de usuario podrían ser erróneas o no se puede establecer la conexión. Verifique su configuración.\n" +"(Motivo recibido: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "La contraseña que se usará para registrar el servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "La persona que intenta contactar no está disponible en este momento." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"El servidor no pudo autenticarlo. Deje que un administrador verifique que " +"está llegando al servidor correcto (servidor IP del servidor PBX en ajustes " +"generales) y que las credenciales en sus preferencias de usuario sean " +"correctas." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"No se ha podido ejecutar el agente de usuario. La URL del servidor de " +"websocket puede ser incorrecta. Pida a un administrador que compruebe la URL" +" del servidor de websocket en los ajustes generales." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"El nombre de usuario (usualmente el número de extensión) que se usará para " +"registrar el servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"Se perdió la conexión de websocket con el servidor. Intentando restablecer " +"la conexión..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Todavía hay una llamada en curso, ¿está seguro de que desea abandonar la " +"página?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transferir" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transferir a" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Desplegar Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Desactivar silencio" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Usuario" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Ajustes de usuario" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Usando VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Usando el teléfono del dispositivo" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Soporte de cola VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Configuración del VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Entorno VOIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Secreto VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nombre de usuario/número de extensión del VoIP" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip/llamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Secreto de VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Nombre de usuario de VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Sí, hágalo." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Su navegador no es compatible con algunas de las funciones que VoIP necesita" +" para funcionar. Intente actualizar su navegador o use uno diferente. " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Su historial de llamadas está vacío. Si hace una llamada aparecerá aquí 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Sus datos de acceso no están configurados correctamente. Póngase en contacto" +" con su administrador." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "menos que un segundo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "teléfono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "VoIP" diff --git a/voip/i18n/es_419.po b/voip/i18n/es_419.po new file mode 100644 index 0000000..ae436da --- /dev/null +++ b/voip/i18n/es_419.po @@ -0,0 +1,1181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Lucia Pacheco, 2023 +# Patricia Gutiérrez Capetillo , 2024 +# Fernanda Alvarez, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s seg" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minutos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s llamadas perdidas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s segundos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minuto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 llamada perdida" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 segundo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minutos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 llamadas perdidas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 segundos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Ocurrió un error de hardware al intentar acceder al dispositivo de grabación" +" de audio. Asegúrese de que sus controladores están actualizados e inténtelo" +" de nuevo." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Una llamada telefónica mediante la aplicación VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Cancelada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Llamada cancelada a %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Actividad" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nombre de la actividad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Agregar a la cola de llamadas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Ocurrió un error con el dispositivo de grabación de audio (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Ocurrió un error durante la creación de instancias del agente de usuario:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Ocurrió un error al intentar invitar al siguiente número: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "¿En verdad desea eliminar esta actividad?" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Pregunta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Retroceso" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Llamar" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Llamada de %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Llamada de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Llamada desde otro dispositivo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Llamada rechazada (motivo: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Llamar a %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Llamar a %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Llamando" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Llamando %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Llamadas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Cancelar la actividad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"No se puede acceder al dispositivo de grabación de audio. Si ha denegado el " +"acceso a su micrófono, habilítelo e inténtelo de nuevo. De lo contrario, " +"asegúrese de que este sitio web se ejecuta a través de HTTPS y de que su " +"navegador no está configurado para denegar el acceso a dispositivos " +"multimedia." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Cambiar dispositivo de entrada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Elegir dispositivo:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Elija el método que se usará para realizar una llamada al usar la aplicación móvil:\n" +" • VoIP: siempre se usará el softphone de Odoo\n" +" • Teléfono del dispositivo: siempre se usará el dispositivo del teléfono\n" +" • Preguntar: siempre se preguntará si se debe usar el softphone o el teléfono del dispositivo\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Cerrar teclado numérico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Cerrar softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Cerrar detalles" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Conectando..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contacto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contactos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Los contactos con un número de teléfono aparecerán aquí." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demostración" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Teléfono del dispositivo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Dirección" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nombre en pantalla" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documentos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Finalizar llamada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Fecha de finalización" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Escriba el número o el nombre" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Escriba el número..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Número de dispositivo externo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Número de dispositivo externo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Ocurrió un error al cargar la biblioteca SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Colgar pero mantener la llamada en la cola" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "¡Espere!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Cómo llamar desde un dispositivo móvil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "¿Cómo realizar llamadas desde el móvil?" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Si se activa, Odoo rechazará de manera automática las llamadas entrantes." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Si se activa, realizar la llamada en Odoo transferirá la llamada al \"número" +" de dispositivo externo\". Use esta opción para realizar una llamada en Odoo" +" pero tomarla desde otro dispositivo, por ejemplo, el teléfono de su " +"escritorio." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Si la opción de \"llamada desde otro dispositivo\" está habilitada, las " +"llamadas realizadas en Odoo se transferirán a este número de teléfono." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Duración de la llamada: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Entrante" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Llamada entrante de..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Selección del dispositivo de entrada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Está en la cola de llamada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Última vez visto en llamada telefónica" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marcar como hecho" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "¡Ups!" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Perdida" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Llamada perdida de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Celular" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Celular:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Silenciar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Siguientes actividades" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"No hay ningún dispositivo de grabación de voz disponible. Necesita un " +"micrófono para poder usar la aplicación." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "No tiene llamadas programadas para hoy 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Sin resultados de búsqueda" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "En curso" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Abrir teclado numérico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Abrir softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Saliente" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "Dirección IP del servidor PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Falta la dirección de PBX o websocket. Revise sus ajustes." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Teléfono" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Número de teléfono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Teléfono:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Acepte el uso del micrófono." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Inténtelo de nuevo más tarde. Si el problema continúa, pídale a un " +"administrador que revise la configuración." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Producción" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Reciente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registro rechazado: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Rechazar llamadas entrantes" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Llamada rechazada de %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Llamada rechazada de %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Recordar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Quitar de la cola de llamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsable" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Llamando..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Programe y realice llamadas desde su base de datos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Programar actividad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Buscar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Seleccione un método de llamada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Enviar correo electrónico" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Se deben rechazar las llamadas entrantes de forma automática" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Se debe llamar desde otro dispositivo" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Algunos documentos no se pueden agregar a las llamadas en espera. No tienen " +"un número de teléfono configurado: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Fecha de inicio" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Estado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Díganos cómo hacer la llamada:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Finalizada" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "La dirección IP de su servidor PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "La dirección URL de su websocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "La conexión de websocket se perdió y no se pudo restablecer." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Es probable que el error venga de la capa de transporte. Pídale a un " +"administrador que verifique la URL del servidor del websocket en ajustes " +"generales. Si el problema continua, es probable que haya un error con el " +"servidor." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" +"El nombre de la actividad relacionada con esta llamada telefónica, si " +"existe." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"El número es incorrecto, las credenciales de usuario podrían ser erróneas o no se puede establecer la conexión. Verifique su configuración.\n" +"(Motivo recibido: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "La contraseña que se usará para registrar el servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "La persona que intenta contactar no está disponible en este momento." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"El servidor no pudo autenticarle. Solicite a un administrador que verifique " +"que se está conectando al servidor correcto (servidor IP del servidor PBX en" +" ajustes generales) y que las credenciales en sus preferencias de usuario " +"sean correctas." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"No se ha podido ejecutar el agente de usuario. La URL del servidor de " +"websocket puede ser incorrecta. Solicite a un administrador que compruebe la" +" URL del servidor de websocket en ajustes generales." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"El nombre de usuario (con frecuencia el número de extensión) que se usará " +"para registrar el servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"La conexión de websocket con el servidor se perdió. Intentando restablecer " +"la conexión..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Todavía hay una llamada en curso, ¿está seguro de que desea abandonar la " +"página?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transferir " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transferir a" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Desplegar softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Desactivar silencio" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Usuario" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Ajustes de usuario" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Con VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Con el teléfono del dispositivo" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Soporte para la cola de VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Configuración VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Entorno VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Secreto de VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nombre de usuario VoIP/número de extensión" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "VoIP/llamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Secreto de VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Nombre de usuario de VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Sí." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Su navegador no es compatible con algunas de las funciones que VoIP necesita" +" para funcionar. Intente actualizar su navegador o use otro." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Su historial de llamadas está vacío. Si hace una llamada aparecerá aquí. 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Sus datos de acceso no están configurados correctamente. Póngase en contacto" +" con su administrador." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "menos de un segundo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "teléfono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "VoIP" diff --git a/voip/i18n/es_CL.po b/voip/i18n/es_CL.po new file mode 100644 index 0000000..a235789 --- /dev/null +++ b/voip/i18n/es_CL.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Spanish (Chile) (https://www.transifex.com/odoo/teams/41243/es_CL/)\n" +"Language: es_CL\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Cancelado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Fecha creación" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Agrupar por" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Estado" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/et.po b/voip/i18n/et.po new file mode 100644 index 0000000..f2a78e6 --- /dev/null +++ b/voip/i18n/et.po @@ -0,0 +1,1170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Algo Kärp , 2023 +# Eneli Õigus , 2023 +# Martin Aavastik , 2023 +# Piia Paurson , 2023 +# Rivo Zängov , 2023 +# Martin Trigaux, 2023 +# Patrick-Jordan Kiudorv, 2023 +# JanaAvalah, 2023 +# Arma Gedonsky , 2023 +# Leaanika Randmets, 2023 +# Birgit Vijar, 2024 +# Tairi Tiimann, 2024 +# Anna, 2024 +# Triine Aavik , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Triine Aavik , 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s minutit %(seconds)s sekundit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minutit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s vastamata kõnet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s sekundit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 vastamata kõne" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 sekund" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minutit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 vastamata kõne" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 sekundit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Helisalvestusseadmetele ligipääsemisel esines riistvara viga. Palun " +"veenduge, et teie draiverid on ajakohased ja proovige uuesti." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Katkestatud" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Katkestatud kõne numbrile %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Tegevus" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Tegevuse nimetus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Lisa kõne järjekorda" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Helisalvestusseadmega esines viga (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Järgmise numbri kutsumisel ilmnes viga: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Kas olete kindel, et soovite selle tegevuse kustutada? See läheb igaveseks " +"kaotsi, mis on üsna pikk aeg 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Küsi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Tagasilükkeklahv" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Helista" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Kõne %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Kõne numbrilt %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Helista teisest seadmest" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Kõne tagasi lükatud (põhjus: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Helista %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Helista numbrile %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Helistamine" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Helistan %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Kõned" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Tühista" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Tühista tegevus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Mikrofonile puudub juurdepääs. Kui olete juurdepääsu mikrofonile keelanud, " +"lubage see ja proovige uuesti. Vastasel juhul veenduge, et see veebisait " +"töötab HTTPS-i kaudu ja et teie brauser ei keela juurdepääsu " +"meediaseadmetele." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Muuda sisendseadet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Vali seade:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Valige mobiilirakenduse kasutamisel helistamiseks kasutatav meetod:\n" +"• VoIP: kasutage alati Odoo tarkvara\n" +"• Seadme telefon: kasutage alati seadme telefoni\n" +"• Küsi: küsige alati, kas kasutada tuleb tarkvara telefoni või seadme telefoni" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Sulge" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Sulge numbriklahvistik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Sulge tarkvara telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Sulge detailid" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Seadistused" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Kinnitage" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Ühendamine..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontaktid" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Kontaktid, kellel on telefoninumber, kuvatakse siin." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Loodud (kelle poolt?)" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Loodud" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klient" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Esitlus" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Seadme telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Suund" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Kuvatav nimi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumendid" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Muuda" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Lõpeta kõne" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Lõppkuupäev" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Sisesta number või nimi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Sisesta number..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Väline seadme number" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Välise seadme number" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"SIP.js library laadimine ebaõnnestus:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Katkesta kõne, kuid hoia kõne järjekorras" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Oota!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Kuidas helistada mobiiltelefonile" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Kuidas mobiiliga helistada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Kui see on lubatud, lükatakse Odoos sissetulevad kõned automaatselt tagasi." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Kui see on lubatud, suunatakse Odoost helistamisel kõne \"Välise seadme " +"numbrile\". Kasutage seda valikut, et helistada Odoost, kuid saate käsitleda" +" seda teisest seadmest – nt. teie lauatelefon." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Kui valik \"Helista teisest seadmest\" on lubatud, suunatakse Odoosse tehtud" +" kõned sellele telefoninumbrile." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Sisenev" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Sissetulev kõne..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Sisendseadme valik" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "On kõne järjekorras" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Viimati nähtud telefonikõne" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Viimati uuendatud" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Viimati uuendatud" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Märgi lõpetatuks" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Vale klikk, vabandust." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Vastamata" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Vastamata kõne numbrilt %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobiil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobiil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Vaigista" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Järgmised tegevused" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Helisalvestusseade pole saadaval. Rakenduse kasutamiseks on vaja mikrofoni." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Täna pole ühtegi kõnet planeeritud 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Otsingutulemusi ei leitud 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Käimasolev" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Ava numbriklahvistik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Ava tarkvara telefon" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Väljuv" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX serveri IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX-i või Websocketi aadress on puudu. Palun kontrollige oma seadeid." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefoninumber" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Nõustuge mikrofoni kasutamisega." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Palun proovige hiljem uuesti. Kui probleem püsib, paluge administraatoril " +"seadistusi kontrollida." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Tootmine" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Hiljutine" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registreerimine tagasi lükatud: %(statusCode)s%(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Keeldu sissetulevatest kõnedest" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Tagasi lükatud" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Tagasi lükatud kõne numbrilt %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Tagasi lükatud kõne numbrile %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Kas mäletad?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Eemalda kõne järjekorrast" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Vastutaja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Helistan.." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Planeerige ja tehke kõnesid oma andmebaasist" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planeeri tegevus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Otsi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Valige kõne meetod" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Saada e-mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Mõnda dokumenti ei saa kõnejärjekorda lisada, kuna neile pole määratud telefoninumbrit:\n" +"%(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Alguskuupäev" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Staatus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Lõpetatud" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "PBX Serveri IP aadress" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Teie WebSocket'i URL" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "WebSocket'i ühendus katkes ja seda ei õnnestunud uuesti luua." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Viga võib olla tingitud transpordikihist. Paluge administraatoril " +"kontrollida üldseadetes WebSocket-serveri URL-i. Kui probleem püsib, on see " +"tõenäoliselt serveriga seotud." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Selle telefonikõnega seotud tegevuse nimi (kui on olemas)" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Parool, mida kasutatakse PBX serveriga registreerumiseks." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Isik, kellega proovite ühendust võtta, pole praegu saadaval." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Kasutajanimi (tavaliselt laiendusnumber), mida kasutatakse PBX serveriga " +"registreerumiseks." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"WebSocket-ühendus serveriga on katkenud. Proovin ühendust uuesti luua…" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "Kõne on pooleli, kas olete kindel, et soovite lehelt lahkuda?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Siirded" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transfer to" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Tühista vaigistamine" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Kasutaja" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Kasutaja seaded" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "VoIP-i kasutamine" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Seadme telefoni kasutamine" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP järjekorra tugi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP seadistused" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP keskkond" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP secret" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP kasutajanimi / laienduse number" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / Kõned" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip parool" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip kasutajanimi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Jah" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Teie brauser ei toeta mõningaid VoIP-i toimimiseks vajalikke funktsioone. " +"Palun proovige oma brauserit uuendada või kasutada teist brauserit." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Teie kõnede ajalugu on tühi! Tehke kõne ja see kantakse siia loendisse. 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Teie sisselogimisandmed ei ole õigesti määratud. Palun võtke ühendust oma " +"administraatoriga." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "vähem kui sekund" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/eu.po b/voip/i18n/eu.po new file mode 100644 index 0000000..5d38708 --- /dev/null +++ b/voip/i18n/eu.po @@ -0,0 +1,1140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +# Eneko , 2018 +# Mikel Lizarralde , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Mikel Lizarralde , 2018\n" +"Language-Team: Basque (https://www.transifex.com/odoo/teams/41243/eu/)\n" +"Language: eu\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Ezeztatu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Ezeztatua" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Nork sortua" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Created on" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Sortze data" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kidea" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Izena erakutsi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Group By" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "Posta bidali" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Sekuentzia" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Egoera" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/fa.po b/voip/i18n/fa.po new file mode 100644 index 0000000..10ffe73 --- /dev/null +++ b/voip/i18n/fa.po @@ -0,0 +1,1122 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# سید محمد آذربرا , 2023 +# Yousef Shadmanesh , 2023 +# Hamid Ahmadimoghaddam, 2023 +# Hamid Darabi, 2023 +# Hamed Mohammadi , 2023 +# Martin Trigaux, 2023 +# Hanna Kheradroosta, 2023 +# Mostafa Barmshory , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Mostafa Barmshory , 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "فعالیت" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "تماس" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "لغو" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "بستن" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "تنظیمات پیکربندی" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "تایید کردن" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "مخاطب" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "مخاطبان" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "ایجادشده در" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "مشتری" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "آزمایشی" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "جهت" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "نام نمایش داده شده" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "اسناد" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "ویرایش" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "تاریخ پایان" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "شناسه" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "پیش رو" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "آخرین بروز رسانی توسط" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "آخرین بروز رسانی در" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "علامت به عنوان انجام شده" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "از دست رفته" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "موبایل" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "تلفن همراه:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "فعایتهای بعدی" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "در دست اقدام" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "خروجی" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "تلفن" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "شماره تلفن" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "تلفن:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "تولید" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "اخیر" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "رد شده" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "پاسخگو" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "برنامه ریزی فعالیت" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "جستجو" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "تاریخ آغاز" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "استان" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "انتقال" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "انتقال به" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "کاربر" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "تنظیمات کاربر" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "گوشی" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/fi.po b/voip/i18n/fi.po new file mode 100644 index 0000000..8dabb72 --- /dev/null +++ b/voip/i18n/fi.po @@ -0,0 +1,1180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Veikko Väätäjä , 2023 +# Kari Lindgren , 2023 +# Tuomas Lyyra , 2023 +# Teija Hölttä , 2023 +# Svante Suominen , 2023 +# Martin Trigaux, 2023 +# Tuomo Aura , 2023 +# Jarmo Kortetjärvi , 2023 +# Miika Nissi , 2024 +# Ossi Mantylahti , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Ossi Mantylahti , 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s minuuttia %(seconds)s sekuntia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minuuttia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s vastaamattomat puhelut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s sekuntia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minuutti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 vastaamaton puhelu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 sekunti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minuuttia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 vastaamatonta puhelua" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 sekuntia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Äänitallennuslaitetta käytettäessä on tapahtunut laitteistovirhe. Varmista, " +"että ajurit ovat ajan tasalla ja yritä uudelleen." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "VoIP-sovelluksella soitettu puhelu" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Keskeytetty" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Keskeytetty kutsu osoitteeseen %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Toimenpide" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Toiminnan nimi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Lisää puhelujonoon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Äänitallennuslaitteessa (%(errorName)s) tapahtui virhe:\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Käyttäjäagentin instanssin käynnistyksessä tapahtui virhe:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Tapahtui virhe, kun yritettiin kutsua seuraavaa numeroa: %(phoneNumber)s\n" +"\n" +"Virhe: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "Haluatko varmasti poistaa tämän aktiviteetin? Se katoaa pysyvästi" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Kysy" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Askelpalautin" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Soitto" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Soita lähteestä %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Soitto lähteestä %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Puhelu toisesta laitteesta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Puhelu hylätty (syy: \"%(reasonPhrase)s\")" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Soita kohteeseen %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Soita kohteeseen %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Soitetaan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Soitetaan %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Puhelut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Peruuta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Peruuta toiminto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Äänitallennuslaitetta ei voida käyttää. Jos mikrofonin käyttöoikeus on " +"estetty, salli se ja yritä uudelleen. Muussa tapauksessa varmista, että tämä" +" verkkosivusto toimii HTTPS:n kautta ja että selaimesi ei ole asetettu " +"estämään pääsyä medialaitteisiin." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Vaihda syöttölaite" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Valitse laite:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Valitse menetelmä, jota käytetään puhelun soittamiseen mobiilisovellusta käytettäessä:\n" +" - VoIP: Käytä aina Odoo-softapuhelinta\n" +" - Laitteen puhelin: Käytä aina laitteen puhelinta\n" +" - Kysy: Kysy aina, onko käytettävä softapuhelinta vai laitteen puhelinta\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Sulje" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Sulje numeronäppäimistö" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Sulje Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Sulje tiedot" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Asetukset" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Vahvista" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Yhdistetään…" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Yhteystiedot" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Yhteystiedot, joilla on puhelinnumero, näkyvät tässä." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Luonut" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Luotu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Asiakas" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Laitteen puhelin" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Suunta" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Näyttönimi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumentit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Muokkaa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Lopeta puhelu" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Päättymispäivä" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Anna numero tai nimi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Syötä numero…" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Ulkoisen laitteen numero" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Ulkoisen laitteen numero" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"SIP.js-kirjaston lataaminen epäonnistui:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Lopeta puhelu, mutta pidä puhelu jonossa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Odotahan!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Kuinka soittaa matkapuhelimeen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Kuinka soittaa puheluita matkapuhelimella" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Jos tämä on käytössä, saapuvat puhelut hylätään Odoossa automaattisesti." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Jos tämä on käytössä, puhelun soittaminen Odoossa siirtää puhelun \"Ulkoisen" +" laitteen numeroon\". Käytä tätä vaihtoehtoa, jos haluat soittaa puhelun " +"Odoossa, mutta käsitellä sen jostain muusta laitteesta - esim. " +"pöytäpuhelimesta." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Jos \"Soita toisesta laitteesta\" -vaihtoehto on käytössä, Odoossa soitetut " +"puhelut siirretään tähän puhelinnumeroon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Puhelu käynnissä: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Saapuva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Saapuva puhelu…" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Syöttölaitteen valinta" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "On puhelujonossa" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Viimeksi nähty puhelinsoitto" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Merkitse tehdyksi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Väärä klikkaus, pahoittelut." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Ei vastattu puhelu" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Vastaamaton puhelu %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Matkapuhelin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Matkapuhelin:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Mykkä" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Seuraavat toimenpiteet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Äänitallennuslaitetta ei ole käytettävissä. Sovelluksen käyttäminen " +"edellyttää mikrofonia." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Tänään ei ole puheluita" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Ei hakutuloksia" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Jatkuva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Avaa numeronäppäimistö" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Avaa softapuhelin" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Lähtevä" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX-palvelin IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX- tai Websocket-osoite puuttuu. Tarkista asetukset." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Puhelin" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Puhelinnumero" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Phone:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Hyväksykää mikrofonin käyttö." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Yritä myöhemmin uudelleen. Jos ongelma ei poistu, pyydä järjestelmänvalvojaa" +" tarkistamaan asetukset." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Valmistus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Viimeisin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Rekisteröinti hylätty: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Hylkää saapuvat puhelut" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rechazado" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Hylätty puhelu %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Hylätty puhelu osoitteeseen %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Muista minut?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Poista puhelujonosta" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Vastuuhenkilö" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Soittaa…" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Ajoita ja soita puheluita tietokannastasi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Aikatauluta toimenpide" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Hae" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Valitse soittomenetelmä" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Lähetä sähköpostia" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Pitäisikö automaattisen hylkäämisen hylätä saapuvat puhelut" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Pitäisi soittaa toisesta laitteesta" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Joitakin asiakirjoja ei voi lisätä puhelujonoon, koska niille ei ole " +"asetettu puhelinnumeroa: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Alkupäivä" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Alue" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Kerro meille, miten soitamme puhelun:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Päättynyt" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "PBX-palvelimen IP-osoite" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "WebSocketin URL-osoite" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "WebSocket-yhteys katosi eikä sitä saatu muodostettua uudelleen." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Virhe voi tulla siirtokerroksesta. Pyydä järjestelmänvalvojaa tarkistamaan " +"websocket-palvelimen URL-osoite yleisissä asetuksissa. Jos ongelma jatkuu, " +"kyse on todennäköisesti palvelimesta." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Tähän puheluun liittyvän toiminnan nimi, jos sellainen on." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Numero on väärä, käyttäjätunnukset voivat olla väärät tai yhteyttä ei voida muodostaa. Tarkista asetukset.\n" +"(Saatu syy: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Salasana, jota käytetään rekisteröitymiseen PBX-palvelimelle." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" +"Henkilö, johon yrität ottaa yhteyttä, ei ole tällä hetkellä tavoitettavissa." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Palvelin ei onnistunut todentamaan sinua. Pyydä järjestelmänvalvojaa " +"tarkistamaan, että tavoitat oikean palvelimen (PBX-palvelimen IP-osoite " +"yleisissä asetuksissa) ja että käyttäjäasetuksissasi olevat tunnistetiedot " +"ovat oikein." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Käyttäjäagenttia ei voitu käynnistää. Websocket-palvelimen URL-osoite voi " +"olla virheellinen. Pyydä järjestelmänvalvojaa tarkistamaan websocket-" +"palvelimen URL-osoite yleisissä asetuksissa." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Käyttäjänimi (yleensä liittymänumero), jota käytetään PBX-palvelimelle " +"rekisteröitymiseen." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"Websocket-yhteys palvelimeen on katkennut. Yritetään muodostaa yhteys " +"uudelleen..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "Puhelu on edelleen käynnissä, haluatko varmasti poistua sivulta?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Siirto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Siirto kohteeseen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Sulje softapuhelimen laskostus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Poista mykistys" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Käyttäjä" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Käyttäjäasetukset" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "VoIP:n käyttö" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Laitteen puhelimen käyttäminen" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP-jonon tuki" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP-asetukset" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP-ympäristö" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP-salaisuus" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP-käyttäjätunnus / Alanumero" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / Puhelut" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip Secret" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip-käyttäjätunnus" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Kyllä, tee näin." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Selaimesi ei tue joitakin VoIP:n toimintaan tarvittavia ominaisuuksia. Yritä" +" päivittää selaimesi tai käytä toista selainta." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "Puheluhistoriasi on tyhjä! Soita nyt ja saat sen kirjattua" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Kirjautumistietojasi ei ole asetettu oikein. Ota yhteyttä " +"järjestelmänvalvojaan." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "alle sekunti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "puhelin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/fo.po b/voip/i18n/fo.po new file mode 100644 index 0000000..4372799 --- /dev/null +++ b/voip/i18n/fo.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Faroese (https://www.transifex.com/odoo/teams/41243/fo/)\n" +"Language: fo\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Strika" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Byrjað av" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Byrjað tann" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kundi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Vís navn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Bólka eftir" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Seinast dagført av" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Seinast dagført tann" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/fr.po b/voip/i18n/fr.po new file mode 100644 index 0000000..85e3ef3 --- /dev/null +++ b/voip/i18n/fr.po @@ -0,0 +1,1181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Jolien De Paepe, 2024 +# Manon Rondou, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s sec" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minutes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s appels manqués" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s secondes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minute" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 appel manqué" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 seconde" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minutes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 appels manqués" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 secondes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Une erreur matérielle est survenue lors de l'accès à votre périphérique " +"d'enregistrement audio. Vérifiez que vos pilotes sont à jour et réessayez." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Un appel téléphonique pris en charge avec VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Annulé" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Appel annulé vers %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Activité" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nom de l'activité" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Ajouter à la file d'attente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Une erreur impliquant le périphérique d'enregistrement audio est survenue (%(errorName)s) :\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Une erreur est survenue lors de l'instanciation de l'User Agent :\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Une erreur s'est produite lors de l'invitation du numéro suivant : %(phoneNumber)s\n" +"\n" +"Erreur : %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Êtes-vous sûr de vouloir supprimer cette activité ? Elle ne pourra pas être " +"restaurée par la suite 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Me demander" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Effacer" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Appeler" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Appel entrant de %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Appel entrant de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Appeler à partir d'un autre périphérique" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Appel rejeté (motif : “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Appeler %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Appeler %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "En cours d'appel" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "En train d'appeler %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Appels" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Annuler" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Annuler l'activité" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Impossible d'accéder au dispositif d'enregistrement audio. Si vous avez " +"refusé l'accès à votre microphone, veuillez l'accorde et réessayer. Sinon, " +"assurez-vous que ce site web fonctionne sur HTTPS et que votre navigateur " +"n'est pas configuré pour refuser l'accès aux périphériques multimédias." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Modifier le périphérique d'entrée" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Choisissez un périphérique :" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Choisir la méthode à utiliser pour passer un appel lors de l'utilisation de l'application mobile :\n" +"• VoIP : utilisez toujours le softphone Odoo\n" +"• Téléphone du périphérique : utilisez toujours le téléphone du périphérique\n" +"• Demander : demandez toujours si le softphone ou le téléphone du périphérique doit être utilisé" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Fermer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Fermer le pavé numérique" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Fermer le softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Fermer les détails" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de config" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Connexion..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contact" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contacts" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Les contacts avec un numéro de téléphone seront affichés ici." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Client" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Démo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Téléphone du périphérique" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Direction" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documents" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Modifier" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Raccrocher" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Date de fin" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Saisir un numéro ou un nom" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Saisissez le numéro..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Numéro de périphérique externe" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Numéro de périphérique externe" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Échec du chargement de la bibliothèque SIP.js :\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Raccrocher mais garder l'appel en file d'attente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Attends !" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Comment passer des appels sur mobile" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Comment passer des appels sur mobile" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Si activé, les appels entrants seront automatiquement refusés dans Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Si activé, passer un appel dans Odoo transférera l'appel vers le \"Numéro de" +" périphérique externe\". Utilisez cette option pour passer l'appel dans Odoo" +" mais le gérer à partir d'un autre périphérique - par ex. votre téléphone de" +" bureau." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Si l'option \"Appeler depuis un autre périphérique\" est activée, les appels" +" passés dans Odoo seront transférés vers ce numéro de téléphone." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "L'appel dure depuis %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Entrant" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Appel entrant de..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Sélection du périphérique d'entrée" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Est dans la file d'attente des appels" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Dernier appel téléphonique vu" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marquer comme fait" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "J'ai mal cliqué, désolé." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Manqué" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Appel manqué de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobile" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobile :" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Muet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Activités suivantes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Aucun dispositif d'enregistrement audio disponible. L'application nécessite " +"un microphone pour être utilisée." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Pas d'appels prévus aujourd'hui 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Pas de résultats de recherche 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "En cours" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Ouvrir le pavé numérique" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Ouvrir le softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Sortant" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP du serveur PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" +"L'adresse PBX ou Websocket est manquante. Veuillez vérifier vos paramètres." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Téléphone" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Numéro de téléphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Téléphone :" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Veuillez accepter l'utilisation du microphone." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Veuillez réessayer plus tard. Si le problème persiste, vous pouvez demander " +"à un administrateur de vérifier la configuration." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Production" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Récent" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Enregistrement impossible : %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Rejeter les appels entrants" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Refusé" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Appel rejeté de %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Appel rejeté de %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Vous vous souvenez ?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Retirer de la liste d'appel" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsable" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Ça sonne..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Planifier & passer des appels depuis votre base de données" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planifier une activité" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Rechercher" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Sélectionnez une méthode d'appel" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Envoyer un email" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Rejet automatique des appels entrants" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Appeler à partir d'un autre appareil" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Certains documents ne peuvent pas être ajoutés à la file d'attente des " +"appels car ils n'ont pas de numéro de téléphone défini : %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Date de début" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Statut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Dites-nous comment passer l'appel :" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Terminé" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "L'adresse IP de votre serveur PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "L'URL de votre WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "La connexion WebSocket a été perdue et n'a pas pu être rétablie." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"L'erreur peut provenir de la couche transport. Veuillez demander à un " +"administrateur de vérifier l'URL du serveur Websocket dans les paramètres " +"généraux. Si le problème persiste, il s'agit probablement d'un problème lié " +"au serveur." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Le nom de l'activité liée à cet appel téléphonique, le cas échéant." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Le numéro est incorrect, les identifiants de l'utilisateur peuvent être erronés ou la connexion ne peut pas être établie. Veuillez vérifier votre configuration.\n" +"(Motif reçu : %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" +"Le mot de passe qui sera utilisé pour s'enregistrer auprès du serveur PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" +"La personne que vous essayez de contacter est actuellement indisponible." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Le serveur n'a pas réussi à vous authentifier. Veuillez demander à un " +"administrateur de vérifier que vous atteignez le bon serveur (IP du serveur " +"PBX dans les paramètres généraux) et que les informations d'identification " +"dans vos préférences d'utilisateur sont correctes." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Impossible de démarrer l'agent utilisateur. L'URL du serveur websocket est " +"peut-être incorrecte. Demandez à un administrateur de vérifier l'URL du " +"serveur websocket dans les Paramètres généraux." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Le nom d'utilisateur (généralement le numéro de poste) qui sera utilisé pour" +" s'enregistrer auprès du serveur PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"La connexion websocket avec le serveur a été perdue. Tentative de " +"rétablissement de la connexion en cours..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Un appel est toujours en cours. Êtes-vous sûr de vouloir quitter la page ?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transférer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transférer vers" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Déplier le softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Réactiver le son" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Utilisateur" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Paramètres utilisateur" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Utiliser VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Utilise le téléphone du périphérique" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Prise en charge de la file d'attente VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Configuration du VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Environnement VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Secret VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nom d'utilisateur VoIP / Numéro d'extension" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "VoIP / Appels" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Secret VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Nom d'utilisateur VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Oui, faites-le." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Votre navigateur ne prend pas en charge certaines des fonctionnalités " +"requises pour que VoIP fonctionne. Veuillez essayer de mettre à jour votre " +"navigateur ou d'en essayer un autre." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Votre historique des appels est vide ! Passez un appel maintenant et faites-" +"le figurer ici 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Vos données de connexion ne sont pas correctes. Veuillez contacter votre " +"administrateur." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "moins d'une seconde" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "téléphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "Voip" diff --git a/voip/i18n/fr_BE.po b/voip/i18n/fr_BE.po new file mode 100644 index 0000000..12b6192 --- /dev/null +++ b/voip/i18n/fr_BE.po @@ -0,0 +1,1137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Odoo 9.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2015-09-15 14:03+0000\n" +"Last-Translator: Martin Trigaux\n" +"Language-Team: French (Belgium) (http://www.transifex.com/odoo/odoo-9/language/fr_BE/)\n" +"Language: fr_BE\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Derniere fois mis à jour par" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Dernière mis à jour le" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/fr_CA.po b/voip/i18n/fr_CA.po new file mode 100644 index 0000000..0106bba --- /dev/null +++ b/voip/i18n/fr_CA.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: French (Canada) (https://www.transifex.com/odoo/teams/41243/fr_CA/)\n" +"Language: fr_CA\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Grouper par" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "Identifiant" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Statut" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/gl.po b/voip/i18n/gl.po new file mode 100644 index 0000000..98f37c1 --- /dev/null +++ b/voip/i18n/gl.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Galician (https://www.transifex.com/odoo/teams/41243/gl/)\n" +"Language: gl\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Cancelado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Creado o" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Data de creación" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Agrupar por" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Estado" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/gu.po b/voip/i18n/gu.po new file mode 100644 index 0000000..f2b9ee1 --- /dev/null +++ b/voip/i18n/gu.po @@ -0,0 +1,1139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Qaidjohar Barbhaya, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "પ્રવૃત્તિ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancel" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Cancelled" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "Close" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Config Settings" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Contact" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Created by" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Created on" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "સર્જન તારીખ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Customer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Date" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Due Date" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "સમયગાળો" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Edit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Group By" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "મોબાઇલ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Note" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "અધુરુ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "ફોન" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Schedule Activity" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Sequence" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Status" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "સાર" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "કરવાનું" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transfer" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "User" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/he.po b/voip/i18n/he.po new file mode 100644 index 0000000..0e84289 --- /dev/null +++ b/voip/i18n/he.po @@ -0,0 +1,1130 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Ofir Blum , 2023 +# Lilach Gilliam , 2023 +# דודי מלכה , 2023 +# Fishfur A Banter , 2023 +# Martin Trigaux, 2023 +# ZVI BLONDER , 2023 +# MichaelHadar, 2023 +# ExcaliberX , 2023 +# Sagi Ahiel, 2023 +# Roy Sayag, 2023 +# Yihya Hugirat , 2023 +# NoaFarkash, 2023 +# yael terner, 2024 +# Netta Waizer, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Netta Waizer, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "פעילות" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "לשאול משתמש האם ליצור" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "שיחה" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "מתקשר" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "בטל" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "סגור" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "הגדר הגדרות" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "אשר" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "איש קשר" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "אנשי קשר" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "נוצר על-ידי" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "לקוח" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "הדגמה" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "כיוון" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "שם לתצוגה" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "מסמכים" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "ערוך" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "תאריך סיום" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "מספר מכשיר חיצוני" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "דרך התקשרות בטלפון" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "מזהה" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "נכנס" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על-ידי" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "עדכון אחרון ב" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "סמן כבוצע" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "נייד" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "נייד:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "השתק" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "הפעילויות הבאות" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "מתמשך" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr " יוצא" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "טלפון" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "מספר טלפון" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "טלפון:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "ייצור" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "נדחה" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "אחראי" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "תזמן פעילות" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "חיפוש" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"מסמכים מסוימים לא יכולים להצטרף לתור שיחות מכיוון שאין במסמכים מספר טלפון " +"רשום: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "תאריך תחילה" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "מדינה" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "העברה" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "הועבר ל" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "בטל השתקה" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "משתמש" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "הגדרות משתמש" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP סודי" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "טלפון" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/hr.po b/voip/i18n/hr.po new file mode 100644 index 0000000..90ba99d --- /dev/null +++ b/voip/i18n/hr.po @@ -0,0 +1,1147 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Stjepan Lovasić , 2022 +# Ivan Marijanović , 2022 +# Vladimir Olujić , 2022 +# Đurđica Žarković , 2022 +# Karolina Tonković , 2022 +# Marko Carević , 2022 +# Martin Trigaux, 2022 +# Tina Milas, 2022 +# Bole , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Bole , 2022\n" +"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "# Slučaja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "Prihvati" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivnost" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Dodaj u red čekanja poziva" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "Avatar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "Natrag" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "Poziv" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Odustani" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Otkazano" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "Kliknite za odblokiranje" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Postavke" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "Kontakti" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Datum kreiranja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kupac" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Datum" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "Smjer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "Dokument" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "Nemoj napraviti novi raspored" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Datum dospijeća" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Trajanje" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Uredi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "Unesi broj..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "Daje redoslijed kada se prikazuje lista poziva." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Grupiraj po" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "Održan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "Za 1 tjedan" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "Za 15 dana" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "Za 2 mjeseca" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "U redu čekanja poziva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "Ulazna" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Je u redu čekanja poziva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Promijenio" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Vrijeme promjene" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Označi kao izvršeno" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "Mobitel" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobitel:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "Moji pozivi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "Nije održano" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Bilješka" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "Odlazno" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Server IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "Na čekanju" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "Tel. pozivi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Proizvodnja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "Osvježi ploču" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "Odbijeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "Odbijeno" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Ukloni iz reda čekanja poziva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "Ukloni s čekanja" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "Odgovoran" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Zakaži aktivnost" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "Traži" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "Traži telefonske pozive" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "Pošalji mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Sekvenca" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "Poseban datum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "Započni vrijeve" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Status" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "Sažetak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL Vašeg WebSocketa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "Poziv nema broja." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "Za napraviti" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "Sutra" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "Prijenos" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "Nedodjeljen" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Korisnik" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "Vaš pretraživač ne podržava WebRTC. Molimo provjerite postavke." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "min" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/hu.po b/voip/i18n/hu.po new file mode 100644 index 0000000..9634ea4 --- /dev/null +++ b/voip/i18n/hu.po @@ -0,0 +1,1122 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Gergő Kertész , 2023 +# Zsolt Godó , 2023 +# Ákos Nagy , 2023 +# gezza , 2023 +# Martin Trigaux, 2023 +# Tamás Németh , 2023 +# krnkris, 2023 +# Tamás Dombos, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Tamás Dombos, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Tevékenység" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Adja hozzá a hívási sorhoz" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Visszalépés" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Hívás" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Töröl" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Bezárás" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Beállítások módosítása" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Megerősítés" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kapcsolat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kapcsolatok" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Létrehozta" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Létrehozva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Vevő" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Minta" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Irány" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Megjelenített név" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumentumok" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Szerkesztés" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Hívás vége" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Befejező dátum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "Azonosító" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Beérkező" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Benne van a Hívási sorban" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Frissítette" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Frissítve" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Késznek jelöl" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Elmulasztott" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobilszám:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Némít" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Következő tevékenységek" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Folyamatban lévő" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Kimenő" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX szerver IP cím" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefonszám" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Gyártás" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Elutasított" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Eltávolítás a hívási sorból" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Felelős" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Tevékenység ütemezése" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Keresés" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Kezdődátum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Állapot" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "A WebSoccet URL webcíme" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Átmozgatás" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Átmozgatás ide" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Felhasználó" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP környezet" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/hy.po b/voip/i18n/hy.po new file mode 100644 index 0000000..7f714c0 --- /dev/null +++ b/voip/i18n/hy.po @@ -0,0 +1,1111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/id.po b/voip/i18n/id.po new file mode 100644 index 0000000..50b3481 --- /dev/null +++ b/voip/i18n/id.po @@ -0,0 +1,1173 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# fajar regi, 2023 +# Abe Manyo, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s detik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s menit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s panggilan yang tidak dijawab" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s detik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 menit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 panggilan yang tidak dijawab" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 detik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 menit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 panggilan yang tidak dijawab" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 detik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Error hardware terjadi selagi mencoba mengakses perangkat perekam audio. " +"Mohon pastikan driver Anda sudah diupdate dan coba lagi." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Panggilan telepon yang ditangani menggunakan aplikasi VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Dibatalkan" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Panggilan ke %(phone_number)s dibatalkan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivitas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nama Kegiatan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Tambahkan ke Antrian Panggilan Telepon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Terjadi error yang melibatkan perangkat perekam audio (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Terjadi error pada instantiation Agen User:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Terjadi eror saat mencoba mengundang nomor berikut: %(phoneNumber)s\n" +"\n" +"Eror: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Apakah Anda yakin ingin menghapus kegiatan ini? Akan hilang selamanya 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Tanya" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Panggilan" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Panggilan dari %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Panggilan dari %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Panggilan dari perangkat lain" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Panggilan ditolak (alasan: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Panggilan ke %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Panggilan ke %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Menelepon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Menelepon %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Panggilan-Panggilan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Batal" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Batalkan kegiatan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Tidak dapat mengakses perangkat perekam audio. Bila Anda menolak akses ke " +"microfon Anda, mohon izinkan dan coba lagi. Jika tidak, psatikan website ini" +" menjalankan HTTPS dan bahwa browser Anda tidak disetel untuk menolak akses " +"ke perangkat media." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Ubah perangkat input" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Pilih perangkat:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Pilih metode untuk digunakan untuk memanggil nomor saat menggunakan aplikasi mobile:\n" +" • VoIP: Selalu gunakan Odoo softphone\n" +" • Telepon perangkat: Selalu gunakan telepon perangkat\n" +" • Tanya: Selalu tanya apakah softphone atau telepon perangkat yang akan digunakan\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Tutup" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Tutup Numpad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Tutup Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Tutup detail" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Pengaturan Konfigurasi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Konfirmasi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Menghubungi..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Kontak dengan nomor telepon akan ditunjukkan di sini." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Dibuat oleh" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Dibuat pada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Pelanggan" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telepon perangkat" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Arahan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Edit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Tutup Panggilan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Tanggal Berakhir" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Masukkan angka atau nama" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Masukkan angka..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Nomor Perangkat Eksterna" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Angka perangkat eksternal" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Gagal untuk memuat pustaka SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Tutup panggilan tapi tetap simpan dalam antrian" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Sabar!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Bagaimana Cara Menelepon Di Mobile" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Cara memulai panggilan telepon pada mobile" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Bila diaktifkan, panggilan masuk akan secara otomatis ditolak di Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Bila diaktifkan, memulai panggilan di Odoo akan mentransfer call ke \"Nomor " +"perangkat eksternal\". Gunakan opsi ini untuk memulai panggilan di Odoo tapi" +" menanganinya dari perangkat lain - contoh telepon meja Anda." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Bila opsi \"Panggil dari perangkat lain\" diaktifkan, panggilan yang " +"dipasang di Odoo akan ditransfer ke nomor telepon ini." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Dalam panggilan telepon selama: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Barang Masuk" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Panggilan masuk dari..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Pilihan perangkat input" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Apakah dalam Antrian Panggilan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Panggilan Telepon Terakhir Terlihat" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Terakhir Diperbarui oleh" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Terakhir Diperbarui pada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Tandai sebagai selesai" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Misklik, maaf." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Tidak dijawab" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Panggilan tidak dijawab dari %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Telepon Mobile" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Ponsel:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Mute" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Aktivitas Berikutnya" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Tidak ada perangkat perekam audio yang tersedia. Aplikasi membutuhkan " +"mikrofon agar dapat digunakan." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Tidak ada jadwal panggilan untuk hari ini 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Tidak ada hasil pencarian 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Sedang Berlangsung" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Buka Numpad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Buka Softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Keluar" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Server IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Kurang alamat PBX atau Websocket. Mohon periksa pengaturan Anda." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telepon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Nomor Telepon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telepon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Silakan terima penggunaan mikrofon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Silakan coba lagi nanti. Bila masalah berlanjut, Anda mungkin ingin meminta " +"administrator untuk memeriksa konfigurasi." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produksi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Terkini" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Pendaftaran ditolak: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Tolak panggilan masuk" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Ditolak" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Panggilan dari %(phone_number)s ditolak" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Panggilan ke %(phone_number)s ditolak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Ingat?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Hapus dari Antrian Panggilan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Penanggung Jawab" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Menelepon..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Jadwalkan & buat panggilan dari database Anda" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Jadwalkan Aktivitas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Pencarian" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Pilih metode panggilan telepon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Kirim e-mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Sebaiknya Tolak Otomatis Panggilan Masu" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Sebaiknya Panggil Dari Perangkat Lain" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Beberapa dokumen tidak dapat ditambahkan ke antrian telepon karena mereka " +"tidak memiliki nomor telepon: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Tanggal Mulai" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Status" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Beritahu kami bagaimana cara melakukan panggilan telepon:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Dihentikan" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "Alamat IP dari Server PBX Anda" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL dari WebSocket Anda" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "Hubungan WebSocket terputus dan tidak dapat dihubungkan kembali." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Error mungkin datang dari transport layer. Administrator harus memverifikasi" +" URL server websocket di Pengaturan Umum. Bila masalah berlanjut, ini " +"kemungkinan masalah dengan server." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Nama kegiatan yang terkait panggilan telepon ini, bila ada." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Nomor tidak benar, kredensial user bisa jadi salah atau hubungan tidak dapat dilakukan. Mohon periksa konfigurasi Anda.\n" +"(Alasan yang diterima: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Password yang akan digunakan untuk mendaftar dengan server PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Orang yang Anda ingin hubungi saat ini tidak tersedia." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Server gagal mengautentikasi Anda. Administrator harus memverifikasi bahwa " +"Anda sedang mencoba mencapai server yang tepat (Server IP PBX di Pengaturan " +"Umum) dan bahwa kredensial di preferensi user Anda benar." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Agen user tidak dapat dimulai. URL server websocket mungkin tidak tepat. " +"Administrator harus memeriksa URL server websocket di Pengaturan General." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Username (biasanya nomor ekstensi) akan digunakan untuk mendaftar dengan " +"server PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"Hubungan websocket dengan server hilang. Mencoba membuat kembali hubungan..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Masih ada panggilan yang berlangsung, apakah Anda yakin ingin meninggalkan " +"halaman?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transfer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transfer ke" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Buka lipatan Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Batalkan mute" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Pengguna" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Pengaturan User" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Menggunakan VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Menggunakan telepon perangkat" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Bantuan antrian QOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Konfigurasi VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Environment VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Secret VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Username VoIP / nomor ekstensi" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "VoIP / Panggilan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip Secret" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip Username" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Ya, lakukan." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Browser Anda tidak mendukung beberapa fitur yang dibutuhkan agar VoIP dapat " +"bekerja. Mohon update browser Anda atau gunakan browser lain." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Sejarah panggilan Anda kosong! Lakukan panggilan sekarang agar muncul di " +"sini 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Detail login Anda tidak ditetapkan dengan benar. Silakan hubungi " +"administrator Anda." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "kurang dari sedeti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telepon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/is.po b/voip/i18n/is.po new file mode 100644 index 0000000..b1bda64 --- /dev/null +++ b/voip/i18n/is.po @@ -0,0 +1,1116 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# jonasyngvi, 2024 +# Kristófer Arnþórsson, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Kristófer Arnþórsson, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Eyða" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Loka" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Stillingarvalkostir" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Staðfesta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Hafa samband" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Búið til af" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Búið til þann" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Viðskiptavinur" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Prufa" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Birtingarnafn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Breyta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "Auðkenni (ID)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Síðast uppfært af" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Síðast uppfært þann" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Símanúmer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Símanúmer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Hafnað" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Fylki" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Notandi" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/it.po b/voip/i18n/it.po new file mode 100644 index 0000000..0e99df5 --- /dev/null +++ b/voip/i18n/it.po @@ -0,0 +1,1183 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Sergio Zanchetta , 2023 +# Marianna Ciofani, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s sec" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minuti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s chiamate perse" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s secondi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minuto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 chiamata persa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 secondo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minuti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 chiamate perse" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 secondi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Si è verificato un errore di hardware durante il tentativo di accesso al " +"dispositivo di registrazione audio. Assicurati che i driver siano aggiornati" +" e riprova." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Una chiamata telefonica gestita con l'applicazione VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Interrotta" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Chiamata interrotta per %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Attività" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nome attività" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Aggiungi alla lista di chiamate da fare" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Si è verificato un errore che coinvolge il dispositivo di registrazione audio (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Si è verificato un errore durante la creazione di un'istanza dell'agente utente:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Si è verificato un errore durante la chiamata con il seguente numero: %(phoneNumber)s\n" +"\n" +"Errore: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Sei sicuro di voler eliminare quest'attività? Andrà persa per sempre e non " +"per pochi giorni 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Chiedi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Chiamata" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Chiamata in arrivo da %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Chiamata in arrivo da %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Chiama da un altro dispositivo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Chiamata rifiutata (motivo: \"%(reasonPhrase)s\")" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Chiama %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Chiama %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Chiamata in corso" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Chiamando %(numero di telefono)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Chiamate" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Annulla" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Annullare l'attività " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Impossibile accedere al dispositivo di registrazione audio. Se hai negato " +"l'accesso al microfono, concedi l'autorizzazione e prova di nuovo. " +"Assicurati che il sito web funzioni su HTTPS e che il tuo browser conceda " +"l'accesso ai dispositivi multimediali." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Modifica dispositivo di input" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Scegli un dispositivo:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Scegli il metodo da utilizzare per effettuare una chiamata quando usi l'app mobile:\n" +" •VoIP: utilizza sempre il softphone Odoo\n" +" •Telefono della periferica: utilizza sempre il telefono della periferica\n" +" •Chiedi: chiedi sempre se deve essere utilizzato il softphone o il telefono della periferica\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Chiudi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Chiudi tastierino numerico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Chiudi softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Chiudi dettagli" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni di configurazione" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Conferma" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Collegamento in corso..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contatto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contatti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Contatti con un numero di telefono che verrà mostrato qui." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Data creazione" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telefono della periferica" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Direzione" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documenti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Modifica" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Fine della chiamata" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Data fine" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Inserisci il numero o il nome" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Inserisci il numero..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Numero dispositivo esterno" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Numero dispositivo esterno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Caricamento dell'archivio SIP.js non riuscito:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Riagganciare ma mantenere la chiamata in coda" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Aspetta!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Come effettuare chiamate sul cellulare" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Come effettuare chiamate sul cellulare" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Se selezionato, le chiamate in arrivo verranno rifiutato automaticamente in " +"Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Se selezionato, la chiamata effettuata in Odoo verrà trasferita al \"Numero " +"del dispositivo esterno\". Utilizza questa opzione per effettura una " +"chiamata in Odoo ma gestirla da un altro dispositivo, ad es. il telefono " +"fisso." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Se l'opzione \"Chiama da un altro dispositivo\" è attiva, le chiamate in " +"Odoo verranno trasferite al numero di telefono indicato." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "In chiamata per: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "In entrata" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Chiamata in arrivo da..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Scelta dispositivo di input" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "È nella coda delle chiamate da fare" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Ultima chiamata vista" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Imposta a completata" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Ho cliccato male, scusa." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Fallito" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Chiamata persa da %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Dispositivo mobile" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Cellulare:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Silenzia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Prossime attività" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Nessun dispositivo di registrazione audio disponibile. L'applicazione " +"richiede un microfono per essere utilizzata." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Nessuna chiamata programmata per oggi 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Nessun risultato di ricerca 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "In corso" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Apri tastierino numerico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Apri softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "In uscita" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP Server PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Indirizzo PBX o websocket mancante, controllare le impostazioni." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefono" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Numero di telefono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefono:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Accettare l'utilizzo del microfono." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Per favore, riprova più tardi. Se il problema persiste, puoi chiedere ad un " +"amministratore di controllare la configurazione." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produzione" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Recente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registrazione rifiutata: %(statusCode)s %(reasonPhrase)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Rifiuta chiamate in entrata" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rifiutato" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Chiamata rifiutata da %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Chiamata rifiutata da %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Ricordi?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Rimuovi dalla coda delle chiamate da fare" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsabile" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Sta squillando..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Programma ed effettua chiamate dal tuo database" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Pianifica Attività" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Ricerca" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Seleziona un metodo per effettuare la chiamata" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Invia e-mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Dovrebbe rifiutare automaticamente chiamate in entrata" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Dovrebbe chiamare da un altro dispositivo" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Alcuni documenti non possono essere aggiunti alla coda delle chiamate perché" +" non hanno un numero di telefono configurato: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Data inizio" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stato" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Spiegaci come effetuare la chiamata:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Terminata" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "Indirizzo IP del server PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "L'URL del tuo WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" +"La connessione WebSocket è stata persa e non è stato possibile ristabilirla." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"L'errore potrebbe provenire dal livello di trasporto. Chiedi " +"all'amministratore di verificare l'URL del server websocket dalle " +"Impostazioni. Se il problema persiste si tratta probabilmente di un problema" +" del server." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" +"Il nome dell'attività collegata a questa chiamata telefonica, se presente." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Il numero non è corretto, le credenziali dell'utente potrebbero essere errate o non è possibile stabilire una connessione. Controlla la configurazione.\n" +"(Motivo ricezione: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" +"La password che verrà utilizzata per la registrazione con il server PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "La persona che cerchi di contattare non disponibile al momento." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Il server non è riuscito ad autenticarti. Chiedi ad un amministratore di " +"verificare che stai cercando di raggiungere il server giusto (IP server PBX " +"nelle Impostazioni) e che le credenziali nelle preferenze utente siano " +"corrette." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Non è stato possibile avviare l'agente utente. L'URL del server websocket è " +"sbagliato. Chiedi ad un amministratore di verificare l'URL del server " +"websocket nelle Impostazioni." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Il nome utente (tipicamente il numero di estensione) che verrà utilizzato " +"per la registrazione con il server PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"La connessione websocket al server è stata persa. Tentativo di ristabilire " +"la connessione..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Sei sicuro di voler lasciare la pagina con una chiamata ancora in corso?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Trasferisci" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Trasferire" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Espandi softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Riattiva audio" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Utente" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Impostazioni utente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Utilizzano VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Utilizzando telefono dispositivo" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Assistenza coda VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VOIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Configurazione VOIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Ambiente VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Chiave privata VOIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nome utente/numero di estensione VOIP " + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip/chiamate" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Secret Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Nome utente Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Sì, fallo." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Il tuo browser non supporta alcune delle funzionalità necessarie per il " +"VoIP. Prova ad aggiornare il browser o utilizzane uno diverso." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"La cronologia delle chiamate è vuota! Effettua una chiamata ora e conservala" +" nell'elenco qui 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Le credenziali non sono state impostate correttamente, contatta " +"l'amministratore." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "meno di un secondo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefono" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/ja.po b/voip/i18n/ja.po new file mode 100644 index 0000000..fe52b15 --- /dev/null +++ b/voip/i18n/ja.po @@ -0,0 +1,1136 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Junko Augias, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s 分 %(seconds)s 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s分" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s 不在着信" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s秒 " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1分" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "不在着信1" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2分" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "不在着信2" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "オーディオ録音デバイスへのアクセス中にハードウェアエラーが発生しました。ドライバが最新であることを確認し、再度お試し下さい。" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "VoIPアプリケーションを使用して処理される電話" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "中断済" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "%(phone_number)sへの中断された通話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "活動" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "活動名称" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "コールキューに追加" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"音声録画デバイス利用中にエラーが発生しました(%(errorName)s): \n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"ユーザエージェントのインスタンス生成中にエラーが発生しました:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"次の番号を招待しようとしてエラーが発生しました: %(phoneNumber)s\n" +"\n" +"エラー: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr " この活動を本当に削除しますか? 削除後は復元できません😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "確認" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "バックスペース" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "通話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr " %(correspondent)sからの通話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr " %(phone_number)sからの通話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "他のデバイスから電話する" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "着信拒否 (理由: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr " %(correspondent)sへの通話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr " %(phone_number)sへの通話" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "呼出中" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr " 発信中 %(電話番号)" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "通話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "取消" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "活動を取消する" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"音声録音デバイスにアクセスできません。マイクへのアクセスを拒否している場合は、許可してからもう一度お試し下さい。そうでない場合は、このウェブサイトがHTTPSで実行され、ブラウザがメディアデバイスへのアクセスを拒否するよう設定されていないことを確認して下さい。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "インプットデバイスを変える" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "デバイスを選択:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"モバイルアプリケーションを使用する際に電話をかける方法を選択して下さい:\n" +"- VoIP: 常にOdooソフトフォンを使用\n" +"- デバイス電話:常にデバイス電話を使用\n" +"- 確認:ソフトフォンかデバイス電話のどちらを使用するか常に確認" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "閉じる" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "テンキーを閉じる" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "ソフトフォンを閉じる" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "詳細を閉じる" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "コンフィグ設定" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "確認" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "接続しています..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "連絡先" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "連絡先" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "電話番号のある連絡先はここに表示されます" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "作成日" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "顧客" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "デモ" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "デバイスの電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "方向" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "書類" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "編集" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "通話終了" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "終了日" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "番号または名前を入力してください" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "番号を入力して下さい..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "外部デバイス番号" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "外部デバイス番号" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"SIP.jsライブラリのロードに失敗しました:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "電話を切りますが、通話をキューに入れます" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "お待ち下さい!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "携帯電話での通話方法" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "携帯電話での通話方法" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "有効にすると、Odooで着信が自動的に拒否されます。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"有効にすると、Odooで電話をかける場合に「外部デバイス番号」に電話が転送されます。このオプションを使用すると、Odooで電話をかけても、他のデバイス(例:デスクホンなど)から対応することができます。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "\"別のデバイスから電話をかける\" オプションが有効な場合、Odooでかけた電話はこの電話番号に転送されます。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "通話時間: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "入荷" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "以下からの着信..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "インプットデバイス選択" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "コールキューの有無" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "最後に見た電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "完了とする" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "誤ってクリックしました。申し訳ありません。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "不在" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "%(phone_number)sからの不在着信" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "モバイル" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "携帯電話:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "ミュート" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "次の活動" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "音声録音デバイスがありません。このアプリケーションを使用するにはマイクが必要です。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "今日は予定されている通話はありません 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "検索結果がありません💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "処理中" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "テンキーを開く" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "ソフトフォンを開く" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "出庫" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBXサーバIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBXまたはWebsocketアドレスがありません。設定を確認してください。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "電話番号" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "電話:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "マイクの使用を承諾してください。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "後でもう一度試してください。問題が解決しない場合は、管理者に設定を確認してもらいましょう。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "製造" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "最近の" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "登録が拒否されました: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "着信を拒否" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "拒否済" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr " %(phone_number)sを着信拒否" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr " %(phone_number)sを着信拒否" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "覚えていますか?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "コールキューから削除" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "担当者" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "呼出中..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "データベースから電話をスケジュールして発信する" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "活動をスケジュール" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "検索" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "電話方法を選択" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Eメールを送信" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "着信を自動拒否する必要があります" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "他のデバイスから電話する必要があります" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "電話番号が設定されていないため、コールキューに追加できないドキュメントがあります: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "開始日" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "都道府県・州" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "どのように電話するかをご説明下さい:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "終了済" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "PBXサーバのIPアドレス" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "ウェブソケットのURL" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "WebSocket 接続が失われ、再確立できませんでした。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"このエラーはトランスポート層から発生している可能性があります。管理者は一般設定でウェブソケットサーバのURLを確認して下さい。問題が解決しない場合は、サーバの問題である可能性があります。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "もしあれば、この通話に関連する活動の名前。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "番号が正しくないか、ユーザー認証が間違っているか、接続できない可能性があります。(設定を確認して下さい%(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "PBXサーバーでの登録に使用するパスワードです。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "連絡しようとした相手は現在不在です。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"サーバの認証に失敗しました。正しいサーバ(一般設定のPBXサーバーIP)に到達していること、およびユーザ設定の認証情報が正しいことを管理者に確認してもらって下さい。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"ユーザエージェントが起動できませんでした。ウェブソケットサーバーのURLが正しくない可能性があります。管理者に一般設定でウェブソケットサーバーのURLを確認してもらって下さい。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "PBXサーバーへの登録に使用するユーザー名(通常は内線番号)です。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "サーバへのウェブソケット接続が切断されました。接続を再確立を試みています..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "まだ通話中ですが、本当にページを離れてもよろしいですか?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "移動" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "以下へ転送:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "ソフトフォンを開く" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "ミュート解除" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "ユーザ" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "ユーザ設定" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "VoIPを使用" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "デバイス電話を使用" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIPキューサポート" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP設定" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP環境" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP secret" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP ユーザー名 / 内線番号" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / 通話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voipシークレット" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voipユーザ名" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "ウェブソケット" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "はい、行って下さい。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "お使いのブラウザは、VoIPの動作に必要な機能の一部をサポートしていません。ブラウザを更新するか、別のブラウザを使用して下さい。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr " 通話履歴がありません!今すぐ電話をかけて、ここに表示させましょう💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "資格情報が正しく設定されていません。管理者に連絡して下さい。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "1秒以下" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "電話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/ka.po b/voip/i18n/ka.po new file mode 100644 index 0000000..679b18b --- /dev/null +++ b/voip/i18n/ka.po @@ -0,0 +1,1140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +# Saba Khmaladze , 2018 +# Giorgi Melitauri , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Giorgi Melitauri , 2018\n" +"Language-Team: Georgian (https://www.transifex.com/odoo/teams/41243/ka/)\n" +"Language: ka\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "შეწყვეტა" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "გაუქმებულია" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "კონტაქტი" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "შემქმნელი" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "შექმნის თარიღი" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "შექმნის თარიღი" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "კლიენტი" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "თარიღ" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "სახელი" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "დაჯგუფება" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "იდენტიფიკატორი" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "ბოლოს განაახლა" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "ბოლოს განახლებულია" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "მიმდევრობა" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "სტატუსი" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/kab.po b/voip/i18n/kab.po new file mode 100644 index 0000000..339d791 --- /dev/null +++ b/voip/i18n/kab.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Kabyle (https://www.transifex.com/odoo/teams/41243/kab/)\n" +"Language: kab\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Sefsex" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Ifsax" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Yerna-t" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Yerna di" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Azemz n tmerna" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Amsaɣ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Sdukel s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "Asulay" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Aleqqem aneggaru sɣuṛ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Aleqqem aneggaru di" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Agzum" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Addad" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/km.po b/voip/i18n/km.po new file mode 100644 index 0000000..60d8fae --- /dev/null +++ b/voip/i18n/km.po @@ -0,0 +1,1141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Sengtha Chay , 2018 +# Chan Nath , 2018 +# Samkhann Seang , 2018 +# AN Souphorn , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2018-09-21 14:06+0000\n" +"Last-Translator: AN Souphorn , 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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "សកម្មភាព" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "លុបចោល" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "បានលុបចោល" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "បិទ" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "ទំនាក់ទំនង" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "បង្កើតដោយ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "បង្កើតនៅ" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "ថ្ងៃបង្កើត" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "អតិថិជន" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "កាលបរិច្ឆេត" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "ជា​ក្រុម​តាម" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "កំណត់សំគាល់" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "ទូរស័ព្ទ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "លំដាប់" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/ko.po b/voip/i18n/ko.po new file mode 100644 index 0000000..9850640 --- /dev/null +++ b/voip/i18n/ko.po @@ -0,0 +1,1148 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# JH CHOI , 2023 +# Sarah Park, 2023 +# Daye Jeong, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s분 %(seconds)s초" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s 분" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "부재중 전화 %(number)s통" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s초" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 분" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "부재중 전화 1" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 초" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 분" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "부재중 전화 2" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 초" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "오디오 녹음 장치에 액세스하는 동안 하드웨어 오류가 발생했습니다. 드라이버가 최신 버전인지 확인한 후 다시 시도하세요." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "VoIP 애플리케이션을 사용한 전화 통화" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "중단됨" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "%(phone_number)s로의 통화 중단됨" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "활동" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "활동명" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "통화 대기열에 추가" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"오디오 녹음 장치와 관련된 오류가 발생했습니다 (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"사용자 에이전트를 인스턴스화하는 중에 오류가 발생했습니다.:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"다음 전화번호의 사용자를 초대하는 동안 오류가 발생했습니다: %(phoneNumber)s\n" +"\n" +"오류: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "이 활동을 삭제하시겠습니까? 삭제 후에는 복구할 수 없습니다.😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "물어보기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "백스페이스" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "전화" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "%(correspondent)s으로부터의 전화" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "%(phone_number)s으로부터의 전화" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "다른 기기에서 통화" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "수신 거부됨 (사유: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "%(correspondent)s으로 전화" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "%(phone_number)s으로 전화" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "전화 중" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "%(phone number)s로 전화" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "전화" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "취소" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "활동 취소" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"오디오 녹음 장치에 액세스할 수 없습니다. 마이크에 대한 권한 설정이 거부된 경우 마이크 권한을 허용하고 다시 시도해 주세요. 그렇지 " +"않은 경우 이 웹사이트가 HTTPS를 통해 실행되고, 브라우저에서 미디어 디바이스에 대한 액세스를 거부하도록 설정되어 있지 않은지 확인해" +" 주세요." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "입력 장치 변경하기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "디바이스 선택:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"모바일 앱에서 전화를 걸 때 사용하는 방법을 선택합니다:\n" +" • VoIP: 항상 Odoo 소프트폰을 사용\n" +" • 전화: 항상 기기의 기본 전화 기능 사용\n" +" • 물어보기: 소프트폰 또는 기본 전화 중 어떤 방법을 사용할 지 항상 확인\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "닫기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "숫자패드 닫기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "소프트폰 닫기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "세부사항 닫기" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "환경 설정" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "승인" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "연결 중 ..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "연락처" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "연락처" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "전화번호가 포함된 연락처가 여기에 표시됩니다." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "작성자" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "작성일자" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "고객" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "데모" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "기본 전화" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "방향" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "표시명" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "문서" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "편집" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "통화 종료" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "종료일" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "번호 또는 이름을 입력하세요" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "번호를 입력하세요..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "외부 장치 번호" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "외부 전화번호" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"SIP.js 라이브러리를 불러오지 못했습니다:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "전화를 끊고 통화를 계속 유지" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "잠시만요!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "모바일로 전화하는 방법" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "모바일에서 전화를 거는 방법" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "활성화하면 Odoo에서 수신 전화를 자동으로 거절합니다." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"활성화 시 Odoo에서 전화를 걸 때 통화가 '외부 전화번호'로 전송됩니다. 이 옵션을 사용하면 Odoo에서 전화를 걸어도 다른 기기 " +"(예: 사무실 전화)로 연결됩니다." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "\"다른 장치에서 전화\" 옵션을 활성화하면 Odoo로 걸려온 전화가 이 전화 번호로 전송됩니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "전화 중: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "수신" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "수신 전화..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "입력 장치 선택" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "통화 대기열에 넣을 지 여부" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "마지막으로 확인한 전화" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "최근 갱신한 사람" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "최근 갱신 일자" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "완료" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "잘못 눌렀습니다, 죄송합니다." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "놓침" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "%(phone_number)s의 부재중 전화" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "휴대폰 번호" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "휴대전화 :" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "소리 끄기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "다음 활동" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "오디오 녹음 장치를 사용할 수 없습니다. 앱을 사용하려면 마이크가 필요합니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "오늘 예정된 통화가 없습니다. 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "검색 결과가 없습니다. 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "진행중" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "넘버패드 열기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "소프트폰 열기" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "출고" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBS 서버 IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX 또는 웹 소켓 주소가 없습니다. 설정을 확인하십시오." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "전화번호" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "전화번호" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "전화 :" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "마이크 사용을 수락하십시오." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "나중에 다시 시도해 주세요. 문제가 지속되면 관리자에게 설정 사항을 확인해 달라고 요청할 수 있습니다." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "생산" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "최근" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "등록 거부됨: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "수신 전화 거부" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "거부됨" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "%(phone_number)s의 전화가 거부됨" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "%(phone_number)s의 통화가 거부됨" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "기억할까요?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "통화 대기열에서 제거" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "담당자" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "전화 거는 중..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "데이터베이스에서 일정 예약 및 전화 걸기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "활동 계획표" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "검색" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "통화 수단 선택" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "이메일 전송" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "수신 전화 자동 거부" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "다른 디바이스에서 통화해야 하는 경우" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "일부 문서에는 전화 번호가 설정되어 있지 않아 통화 대기열에 추가할 수 없습니다: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "시작일" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "시/도" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "전화거는 방법을 알려주세요:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "종료됨" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "PBX 서버의 IP 주소" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "웹소켓 URL" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "WebSocket 연결이 끊어져 다시 설정할 수 없습니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"전송 계층에서 오류가 발생했을 수 있습니다. 관리자에게 일반 설정에서 웹소켓 서버 URL을 확인하도록 요청하세요. 문제가 지속되면 서버에" +" 문제가 있는 것일 수 있습니다." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "이 전화 통화와 관련된 활동의 이름이 있는 경우, 이를 입력합니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"번호 또는 사용자 자격 증명이 잘못되었거나 연결할 수 없습니다 .설정을 다시 확인해 주세요.\n" +"(사유: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "PBX 서버에 등록하는 데 사용되는 비밀번호입니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "수신자가 현재 전화를 받으실 수 없습니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"서버가 사용자를 인증하지 못했습니다. 관리자에게 올바른 서버(일반 설정의 PBX 서버 IP)에 연결되었는지, 사용자 자격 증명이 올바르게" +" 설정되었는지 확인하도록 요청하세요." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"사용자 에이전트를 시작하지 못했습니다. 웹소켓 서버의 URL이 잘못되었을 수 있습니다. 관리자 계정으로 일반 설정에서 웹소켓 서버 " +"URL을 확인하세요." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "PBX 서버에 등록하는 데 사용되는 사용자 이름 (일반적으로 내선 번호)입니다." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "서버에 대한 웹소켓 연결이 끊어졌습니다. 연결을 다시 설정하려고 시도 중입니다..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "아직 통화가 진행 중입니다. 페이지에서 나가시겠습니까?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "전송" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "다음으로 이동" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "소프트폰 펼치기" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "소리 켜기" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "사용자" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "사용자 설정" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "VoIP 사용" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "장치의 휴대폰 사용" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP 대기열 지원" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP 설정" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP 환경" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP 암호" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP 사용자 이름 / 내선 번호" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / 통화" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "VoIP 암호" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "VoIP 사용자 이름" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "웹소켓" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "네, 그렇게 하세요." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"사용 중인 브라우저가 VoIP 작동에 필요한 일부 기능을 지원하지 않습니다. 브라우저를 업데이트하거나 다른 브라우저를 이용해 주세요." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "통화 내역이 없습니다! 지금 전화를 걸어 통화 목록을 만드세요. 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "로그인 정보가 올바르게 설정되지 않았습니다. 관리자에게 문의하십시오." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "1초 미만" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "전화" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/lb.po b/voip/i18n/lb.po new file mode 100644 index 0000000..2a07196 --- /dev/null +++ b/voip/i18n/lb.po @@ -0,0 +1,1135 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2019-08-26 09:38+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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/lo.po b/voip/i18n/lo.po new file mode 100644 index 0000000..c8acb7c --- /dev/null +++ b/voip/i18n/lo.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Lao (https://www.transifex.com/odoo/teams/41243/lo/)\n" +"Language: lo\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "ຍົກເລີອກ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "ຍົກເລີກ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "ຄຸ່ຄ້າ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "ສະພາບ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/lt.po b/voip/i18n/lt.po new file mode 100644 index 0000000..3748752 --- /dev/null +++ b/voip/i18n/lt.po @@ -0,0 +1,1128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Ramunė ViaLaurea , 2023 +# Arminas Grigonis , 2023 +# grupoda2 , 2023 +# Arunas V. , 2023 +# digitouch UAB , 2023 +# UAB "Draugiški sprendimai" , 2023 +# Anatolij, 2023 +# Antanas Muliuolis , 2023 +# Audrius Palenskis , 2023 +# Martin Trigaux, 2023 +# Donatas , 2023 +# Linas Versada , 2023 +# Monika Raciunaite , 2023 +# Jonas Zinkevicius , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Jonas Zinkevicius , 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Veikla" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Grįžimo klavišas" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Skambutis" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Paskambinti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Atšaukti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Atšaukti veiklą" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Uždaryti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigūracijos nustatymai" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Patvirtinti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontaktas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontaktai" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klientas" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Kryptis" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Rodomas pavadinimas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumentai" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Redaguoti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Pabaigos data" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Atvykstanys" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Pažymėti kaip atliktą" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobilus" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobilus tel.:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Kitos veiklos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Vykstantis" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Išeinantys" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefonas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefono numeris" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefonas:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Gamyba" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Atmesta" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Atsakingas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Suplanuoti veiklą" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Paieška" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Darbo pradžios data" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Būsena" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Perkelti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Vartotojas" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "Telefono numeris" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/lv.po b/voip/i18n/lv.po new file mode 100644 index 0000000..64d27d1 --- /dev/null +++ b/voip/i18n/lv.po @@ -0,0 +1,1120 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Armīns Jeltajevs , 2023 +# Anzelika Adejanova, 2023 +# Arnis Putniņš , 2023 +# Martin Trigaux, 2023 +# JanisJanis , 2023 +# ievaputnina , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivitāte" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Zvans" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Atcelt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Aizvērt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurācijas uzstādījumi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Apstiprināt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontaktpersona" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Izveidoja" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Izveidots" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klients" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Virziens" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Attēlotais nosaukums" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Labot" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Beigu datums" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Ienākoša" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Pēdējoreiz atjaunināja" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Pēdējoreiz atjaunināts" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Atzīmēt kā pabreigtu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Nokavēts" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobilais tālr." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobilais tālr.:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Izslēgt skaņu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Nākamās darbības" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Ongoing" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Izejoša" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefons" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefons:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Ražošana" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Noraidīts" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Atbildīgais" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Ieplānot aktivitāti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Meklēt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Sākuma datums" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stadija" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transfer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Ieslēgt skaņu" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Lietotājs" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Lietotāja iestatījumi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/mk.po b/voip/i18n/mk.po new file mode 100644 index 0000000..e15cdc2 --- /dev/null +++ b/voip/i18n/mk.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Macedonian (https://www.transifex.com/odoo/teams/41243/mk/)\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Откажи" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Откажано" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Креирано од" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Креирано на" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Датум на креирање" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Купувач" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Прикажи име" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Групирај по" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Последно ажурирање од" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Последно ажурирање на" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Секвенца" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Статус" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/ml_IN.po b/voip/i18n/ml_IN.po new file mode 100644 index 0000000..d367e74 --- /dev/null +++ b/voip/i18n/ml_IN.po @@ -0,0 +1,1137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Odoo 9.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2015-09-07 15:13+0000\n" +"Last-Translator: <>\n" +"Language-Team: Malayalam (India) (http://www.transifex.com/odoo/odoo-9/language/ml_IN/)\n" +"Language: ml_IN\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "രൂപപ്പെടുത്തിയത്" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "നിർമിച്ച ദിവസം" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്തത്" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "അവസാനം അപ്ഡേറ്റ് ചെയ്ത ദിവസം" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/mn.po b/voip/i18n/mn.po new file mode 100644 index 0000000..3471fa7 --- /dev/null +++ b/voip/i18n/mn.po @@ -0,0 +1,1150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Batmunkh Ganbat , 2022 +# Khoschuluu Khuderchuluu , 2022 +# hish, 2022 +# Bayarkhuu Bataa, 2022 +# Батмөнх Ганбат , 2022 +# Minj P , 2022 +# Uuganbayar Batbaatar , 2022 +# Martin Trigaux, 2022 +# Baskhuu Lodoikhuu , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Baskhuu Lodoikhuu , 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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "Хэргийн #" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "Зөвшөөрөх" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Ажилбар" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Дуудлагын хүлээлгэ рүү нэмэх" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Дуудлагын цуваа үүсгэх" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Асуух" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "Зураг" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "Арилгах" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "Дуудлага" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "Дуудлагын огноо" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "Дуудлагын нэр" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "Дуудлага хийх %s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "Дуудлагын огноо" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Цуцлах" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Ажилбарыг цуцлах" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Цуцлагдсан" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "Түгжээг тайлахын тулд дар" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "Хаах" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Тохиргооны тохируулга" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Харилцах хаяг" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "Харилцах хаяг" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Үүсгэсэн этгээд" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Үүсгэсэн огноо" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Үүсгэсэн огноо" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Үйлчлүүлэгч" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Огноо" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Туршилтын хувилбар" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "Чиглэл" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Дэлгэрэнгүй нэр" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "Баримт" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "Дахин товлохгүй" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Эцсийн огноо" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Үргэлжлэх хугацаа" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "Үргэлжлэх хугацаа минутаар." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Засах" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "Дугаараа оруулна уу..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "Утасны дуудлагын жагсаалтанд байрлах эрэмбийг тогтооно." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Бүлэглэлт" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "Ярьсан" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "1 долоо хоногийн дотор" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "15 өдрийн дотор" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "2 сарын дотор" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "Дуудлага хүлээлгэнд байна" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "Уг дуудлагын дараа дахин үргэлжлүүлэх шаардлагатай бол шинэ дуудлага, уулзалт төлөвлөх хэрэгтэй." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "Ирж буй" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "Дуудлага ирсэн %s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "Дуудлага ирсэн %s (%s)" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Дуудлага хүлээлгэнд байна" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "Товчлуур" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Сүүлд зассан этгээд" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Сүүлд зассан огноо" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "Холбоотой ажилбар" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "Холбоотой ЧАТ-ын зурвасууд" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "Холбоотой Voip дуудлагууд" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "Дуудлагын хураангуй агуулгыг тэмдэглэх" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "Лог хөтөлж буй дуудлага" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Дууссанд тооцох" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "Аваагүй" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "Аваагүй дуудлага %s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "Гар утас" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "Гар утасны дугаар (улсын кодтой)" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Гар утас:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "Дуу хаах" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "Миний дуудлагууд" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "Яриагүй" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Тэмдэглэл" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "Odoo систем танд үйлчлүүлэгчтэй хийсэн харилцаа холбооны түүх хөтлөх, багийн өөр гишүүдэд мэдээллэх зорилгоор ирж буй дуудлагын лог үүсгэх боломжыг олгоно." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "Гарч буй" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX серверийн IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX эсвэл Websocket хаяг гэмтсэн байна.Өөрийн тохиргоог шалгана уу" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "Хүлээгдэж буй" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "Утас" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "Утасны дугаар (улсын кодтой)" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Утас:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "Дуудлагын дэлгэрэнгүй" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "Утасны дуудлага" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Микрофон ашиглахыг хүлээн авна үү " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Үйлдвэрлэл" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "Самбарыг дахин шинэчлэх" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "Татгалзах" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "Дуудлагаас татгалзах" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "Түтгэлзүүлсэн" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "Ирсэн дуудлагаас татгалзсан %s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Дуудлагын хүлээлгээс хасах" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "Хүлээлгээс хасах" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "Хариуцагч" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "Дуудаж байна..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "Шинэ ажилбар товлох" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Ажилбар товлох" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "Товлолт дараах" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "Хайх" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "Утасны дуудлага хайх" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "Шуудан илгээх" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Дугаарлалт" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "Тусгай огноо" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "Эхэлсэн цаг" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Төлөв" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "Хураангуй" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "Дуудлага авах" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Таны WebSocket - н URL " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "Энэ дуудлага ямар нэг дугааргүй байна" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" +"Утасны дуудлага шинээр үүсгэхэд Товлогдсон төлөвтэй болно.\n" +"Дуудлага хийж дуусахад төлөв нь Ярьсан болно.\n" +"Хэрэв дуудлага нь холбогдох боломжгүй байвал Цуцлагдсан төлөвтэй болно." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "Товлогдсон" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "Маргааш" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "Шилжүүлэг" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "Хуваарилаагүй" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Хэрэглэгч" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "VOIP дуудлага" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "VOIP дуудлагын лог хөтлөх цонх" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "VOIP дуудлагын тайлан хэрэглэгчээр" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP орчин" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "Та аль хэдийнээ дуудлага хийж байна" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "Таны интернет хөтөч WebRTC -г дэмжихгүй байна. Тохиргоогоо шалгана уу." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "Таны итгэмжлэх буруу тохируулагдсан байна .Та өөрийн администратортой холбогдоно уу" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "мин" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "сек" diff --git a/voip/i18n/my.po b/voip/i18n/my.po new file mode 100644 index 0000000..2290aa3 --- /dev/null +++ b/voip/i18n/my.po @@ -0,0 +1,1140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Myat Thu , 2016 +# Chester Denn , 2016 +# Hein Myat Phone , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2016-09-07 09:57+0000\n" +"Last-Translator: Hein Myat Phone , 2016\n" +"Language-Team: Burmese (https://www.transifex.com/odoo/teams/41243/my/)\n" +"Language: my\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "တည်ဆောက်သူ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "တည်ဆောက်သည့်အချိန်" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "ပြချင်သော အမည်" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "နံပါတ်" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "နောက်ဆုံးပြင်ဆင်သူ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "နောက်ဆုံးပြင်ဆင်ချိန်" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/nb.po b/voip/i18n/nb.po new file mode 100644 index 0000000..6e7d859 --- /dev/null +++ b/voip/i18n/nb.po @@ -0,0 +1,1120 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Thor Arne Hvidsten , 2024 +# Jan Pedro Tumusok , 2024 +# Jorunn D. Newth, 2024 +# Henning Fyllingsnes, 2024 +# Marius Stedjan , 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Martin Trigaux, 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivitet" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Ring" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Avbryt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Kanseller aktiviteten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Lukk" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Innstillinger" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bekreft" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Opprettet av" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Opprettet den" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kunde" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Retning" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Visningsnavn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Rediger" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Avslutningsdato" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Innkommende" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Sist oppdatert" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marker som fullført" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Neste aktiviteter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Pågående" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Utgående" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX server-IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefonnummer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produksjon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "vvist" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Ansvarlig" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planlegg aktivitet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Søk" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Startdato" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Fylke" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Overføring" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Bruker" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/ne.po b/voip/i18n/ne.po new file mode 100644 index 0000000..deb55d4 --- /dev/null +++ b/voip/i18n/ne.po @@ -0,0 +1,1140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Bishisht Bhatta , 2017 +# Amit Kumar , 2018 +# Laxman Bhatt , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Laxman Bhatt , 2018\n" +"Language-Team: Nepali (https://www.transifex.com/odoo/teams/41243/ne/)\n" +"Language: ne\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "गतिविधि" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "रद्द गर्नुहोस्" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "सम्पर्क" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "द्वारा सिर्जना गरियो" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "मा सिर्जना गरियो" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "ग्राहक" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "मिति" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "नाम प्रदर्शन " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "उत्पादन" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "अनुक्रम" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "स्थिति" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/nl.po b/voip/i18n/nl.po new file mode 100644 index 0000000..3ecdd69 --- /dev/null +++ b/voip/i18n/nl.po @@ -0,0 +1,1187 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Yenthe Van Ginneken , 2023 +# Erwin van der Ploeg , 2023 +# Jolien De Paepe, 2024 +# Manon Rondou, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s sec" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minuten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s gemiste oproepen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s seconden" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minuut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 gemiste oproep" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 seconde" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minuten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 gemiste oproepen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 seconden" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Er is een hardwarefout opgetreden bij het proberen toegang te krijgen tot " +"het audio-opnameapparaat. Zorg ervoor dat je stuurprogramma's up-to-date " +"zijn en probeer het opnieuw." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" +"Een telefoongesprek dat wordt afgehandeld met behulp van de VoIP-toepassing" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Rudimentair" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Afgebroken gesprek naar %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Activiteit" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Naam activiteit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Aan de wachtrij toevoegen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Er is een fout opgetreden met betrekking tot het audio-opnameapparaat (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Er is een fout opgetreden tijdens het starten van de User Agent:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Er is een fout opgetreden bij het uitnodigen van het volgende telefoonnummer: %(phoneNumber)s\n" +"\n" +"Fout: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Weet je zeker dat je deze activiteit wilt verwijderen? Het zal voor altijd " +"verloren gaan, wat best lang 😔 is" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Vraag" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Bellen" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Telefoontje van %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Telefoontje van %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Bellen vanaf een ander apparaat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Oproep geweigerd (reden: \"%(reasonPhrase)s\")" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Bel naar %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Bel naar %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Wordt gebeld" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "%(phone number)s opbellen" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Bellen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Annuleren" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Annuleer de activiteit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Geen toegang tot audio-opnameapparaat. Als je de toegang tot je microfoon " +"hebt geweigerd, geef dit dan toe en probeer het opnieuw. Zorg er anders voor" +" dat deze website via HTTPS draait en dat je browser niet is ingesteld om de" +" toegang tot media-apparaten te weigeren." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Invoerapparaat wijzigen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Kies een apparaat:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Kies de methode die moet worden gebruikt om te bellen bij gebruik van de mobiele applicatie:\n" +" • VoIP: gebruik altijd de Odoo-softphone\n" +" • Telefoon van apparaat: gebruik altijd de telefoon van het apparaat\n" +" • Vragen: altijd vragen of de softphone of de telefoon van het apparaat moet worden gebruikt\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Afsluiten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Numpad sluiten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Softphone sluiten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Sluit details" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie instellingen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bevestigen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Verbinden…" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contact" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contacten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Contacten met een telefoonnummer worden hier weergegeven." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klant" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telefoon van apparaat" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Richting" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documenten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Bewerken" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Einde gesprek" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Einddatum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Voer nummer of naam in" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Voer het nummer in..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Nummer extern apparaat" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Nummer extern apparaat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Het laden van de SIP-.js-bibliotheek is mislukt:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Hang op maar hou gesprek in wachtrij" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Wachten!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Hoe op mobiel bellen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Hoe te bellen op mobiel" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Indien ingeschakeld, worden inkomende oproepen automatisch geweigerd in " +"Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Indien ingeschakeld, zal het plaatsen van een oproep in Odoo de oproep " +"doorverbinden naar het \"Externe apparaatnummer\". Gebruik deze optie om de " +"oproep in Odoo te plaatsen maar af te handelen vanaf een ander apparaat - " +"b.v. je bureautelefoon." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Als de optie \"Bellen vanaf een ander apparaat\" is ingeschakeld, worden " +"oproepen die in Odoo zijn geplaatst, doorgeschakeld naar dit telefoonnummer." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "In oproep voor: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Inkomend" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Inkomende oproep van..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Selectie invoerapparaat" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Staat in de wachtrij" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Laatst geziene telefoontje" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Markeren als gereed" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Gemist, sorry." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Gemist" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Gemiste oproep van %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobiel" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobiel:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Dempen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Volgende activiteiten" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Geen audio-opnameapparaat beschikbaar. De applicatie vereist een microfoon " +"om te kunnen worden gebruikt." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Geen oproepen gepland voor vandaag 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Geen zoekresultaten 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Lopend" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Numpad openen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Softphone openen" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Uitgaand" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP-adres telefooncentrale" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX of Webstocket adres ontbreekt. Controleer je instellingen." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefoon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefoonnummer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefoon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Accepteer het gebruik van de microfoon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Probeer het later opnieuw. Als het probleem zich blijft voordoen, kun je een" +" beheerder vragen om de configuratie te controleren." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Productie" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Recent" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registratie afgewezen: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Inkomende oproepen weigeren" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Afgewezen" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Geweigerde oproep van %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Afgewezen oproep naar %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Weet je nog?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Uit de wachtij verwijderen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Verantwoordelijke" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Beltoon..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Plannen & bellen vanuit je database" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Activiteit inplannen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Zoeken" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Selecteer een oproepmethode" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Stuur e-mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Moeten inkomende oproepen automatisch weigeren" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Moet vanaf een ander apparaat bellen" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Sommige documenten kunnen niet worden toegevoegd aan de wachtrij omdat er " +"geen telefoonnummer is ingesteld: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Begindatum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Status" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Vertel ons hoe je kunt bellen:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Beeindigd" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "Het IP-adres van je PBX-server" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "De URL van je websocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" +"De WebSocket-verbinding is verbroken en kon niet opnieuw tot stand worden " +"gebracht." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"De fout kan afkomstig zijn van de transportlaag. Laat een beheerder de " +"websocket-server-URL verifiëren in de Algemene instellingen. Als het " +"probleem aanhoudt, is dit waarschijnlijk een probleem met de server." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" +"De naam van de activiteit met betrekking tot dit telefoongesprek, indien van" +" toepassing." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Het nummer is onjuist, de gebruikersgegevens kunnen onjuist zijn of de verbinding kan niet tot stand worden gebracht. Controleer je configuratie.\n" +"(Reden ontvangen: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" +"Het wachtwoord dat zal worden gebruikt om te registreren bij de PBX-server." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" +"De persoon die je probeert te bereiken, is momenteel niet beschikbaar." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"De server heeft je niet kunnen verifiëren. Laat een beheerder controleren of" +" je de juiste server bereikt (PBX-server-IP in de algemene instellingen) en " +"dat de inloggegevens in je gebruikersvoorkeuren correct zijn." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"De user-agent kan niet worden gestart. De URL van de websocket-server is " +"mogelijk onjuist. Laat een beheerder de URL van de websocket-server " +"controleren in de algemene instellingen." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"De gebruikersnaam (meestal het toestelnummer) die zal worden gebruikt om te " +"registreren bij de PBX-server." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"De WebSocket-verbinding met de server is verbroken. Poging om de verbinding " +"te herstellen ..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Er is nog een gesprek aan de gang, weet je zeker dat je de pagina wilt " +"verlaten?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Verplaatsing" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Overbrengen naar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Softphone uitvouwen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Dempen opheffen" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Gebruiker" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Gebruikersinstellingen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "VoIP gebruiken" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "De telefoon van het apparaat gebruiken" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Ondersteuning voor VoIP-wachtrij" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP-configuratie" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP omgeving" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP-geheim" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP-gebruikersnaam / Toestelnummer" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "VoIP / Oproepen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Geheim Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Gebruikersnaam Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Ja, doe het." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Je browser ondersteunt sommige van de functies die nodig zijn om VoIP te " +"laten werken niet. Probeer je browser bij te werken of een andere te " +"gebruiken." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "Je belgeschiedenis is leeg! Bel nu en laat het hier 💡 vermelden" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Je inloggegevens zijn niet correct ingesteld. Neem contact op met je " +"beheerder." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "minder dan een seconde" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefoon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/nl_BE.po b/voip/i18n/nl_BE.po new file mode 100644 index 0000000..9bbf78f --- /dev/null +++ b/voip/i18n/nl_BE.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Dutch (Belgium) (https://www.transifex.com/odoo/teams/41243/nl_BE/)\n" +"Language: nl_BE\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Annuleren" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Geannuleerd" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Aanmaakdatum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klant" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Groeperen op" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Reeks" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Status" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/pl.po b/voip/i18n/pl.po new file mode 100644 index 0000000..aae11ef --- /dev/null +++ b/voip/i18n/pl.po @@ -0,0 +1,1142 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 nieodebrane połączenie" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 nieodebrane połączenia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Czynność" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nazwa aktywności" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Dodaj do kolejki połączeń" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Zapytaj" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Rozmowa" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Połączenie z innego urządzenia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Anuluj" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Anulowanie aktywności" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Wybierz metodę nawiązywania połączeń podczas korzystania z aplikacji mobilnej:\n" +"- VoIP: Zawsze używaj telefonu programowego Odoo\n" +"- Telefon urządzenia: Zawsze używaj telefonu urządzenia\n" +"- Zapytaj: Zawsze pytaj, czy ma być używany telefon programowy czy telefon urządzenia." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Zamknij" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Ustawienia konfiguracji" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potwierdź" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Utworzył(a)" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Data utworzenia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klient" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telefon urządzenia" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Kierunek" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nazwa wyświetlana" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Edytuj" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Zakończ połączenie" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Data końcowa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Wprowadź numer lub nazwę" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Numer urządzenia zewnętrznego" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Rozłącz się, ale zachowaj połączenie w kolejce" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Jak wykonywać połączenia na telefonie komórkowym" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Jeśli opcja ta jest włączona, połączenia przychodzące będą automatycznie " +"odrzucane w Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Jeśli ta opcja jest włączona, nawiązanie połączenia w Odoo spowoduje " +"przeniesienie połączenia na \"Numer urządzenia zewnętrznego\". Użyj tej " +"opcji, aby nawiązać połączenie w Odoo, ale obsłużyć je z innego urządzenia -" +" np. telefonu stacjonarnego." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Jeśli opcja \"Zadzwoń z innego urządzenia\" jest włączona, połączenia " +"wykonywane w Odoo będą przekazywane na ten numer telefonu." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Przychodzące" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Jest w kolejce połączeń" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Ostatnio widziane połączenie telefoniczne" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Ostatnio aktualizowane przez" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Data ostatniej aktualizacji" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Oznacz jako wykonane" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Pominięte" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Tel. komórkowy" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Tel. komórkowy:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Wyłącz mikrofon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Następne czynności" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Brak dostępnego urządzenia do nagrywania dźwięku. Do korzystania z aplikacji" +" wymagany jest mikrofon." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Na bieżąco" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Wychodząca" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP serwera PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Brak adresu PBX lub Websocket. Sprawdź ustawienia." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Numer Telefonu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Prosimy o zgodę na korzystanie z mikrofonu." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Spróbuj ponownie później. Jeśli problem nadal występuje, warto poprosić " +"administratora o sprawdzenie konfiguracji." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produkcja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Najnowsze" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Rejestracja odrzucona: %(statusCode)s%(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Odrzucaj połączenia przychodzące" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Odrzucone" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Usuń z kolejki połączeń" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Odpowiedzialny" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planowane akywności" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Szukaj" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Niektóre dokumenty nie mogą zostać dodane do kolejki połączeń, ponieważ nie " +"mają ustawionego numeru telefonu: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Data początkowa" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stan" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "Adres IP serwera PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Błąd może pochodzić z warstwy transportowej. Administrator powinien " +"zweryfikować adres URL serwera websocket w ustawieniach ogólnych. Jeśli " +"problem nadal występuje, prawdopodobnie jest to problem z serwerem." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Hasło, które będzie używane do rejestracji na serwerze PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Osoba, z którą próbujesz się skontaktować, jest obecnie niedostępna." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Uwierzytelnienie na serwerze nie powiodło się. Poproś administratora o " +"sprawdzenie, czy łączysz się z właściwym serwerem (adres IP serwera PBX w " +"Ustawieniach ogólnych) i czy dane uwierzytelniające w preferencjach " +"użytkownika są prawidłowe." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Nazwa użytkownika (zazwyczaj numer wewnętrzny), która będzie używana do " +"rejestracji na serwerze PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Przekaz" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transfer do" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Włącz mikrofon" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Użytkownik" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Ustawienia użytkownika" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Obsługa kolejek VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Konfiguracja VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Środowisko VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Tajemnica VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nazwa użytkownika VoIP / numer wewnętrzny" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/pt.po b/voip/i18n/pt.po new file mode 100644 index 0000000..3fe2443 --- /dev/null +++ b/voip/i18n/pt.po @@ -0,0 +1,1117 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Wil Odoo, 2023 +# Rita Bastos, 2024 +# Marta Marouço, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Marta Marouço, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Atividade" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Ligar" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Fechar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contacto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contactos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demonstraçãol" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Direção" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nome" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documentos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Data Final" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "A Chegar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marcar como feito" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Telemóvel" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Telemóvel:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Próximas Atividades" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Em curso" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Entrega" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefone" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Número de Telefone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefone:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produção" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rejeitado" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsável" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Agendar Atividade" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Procurar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Data Inicial" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Estado" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transferência" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Utilizador" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Configurações do Utilizador" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/pt_BR.po b/voip/i18n/pt_BR.po new file mode 100644 index 0000000..618851f --- /dev/null +++ b/voip/i18n/pt_BR.po @@ -0,0 +1,1179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Éder Brito , 2023 +# a75f12d3d37ea5bf159c4b3e85eb30e7_0fa6927, 2023 +# Maitê Dietze, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s min %(seconds)s s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s minutos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s chamadas perdidas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s segundos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 minuto" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 ligação não atendida" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 segundo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 minutos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 ligações não atendidas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 segundos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Ocorreu um erro de hardware ao tentar acessar seu dispositivo de gravação de" +" áudio. Certifique-se de que os drivers estão atualizados e tente novamente." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Uma ligação realizada pelo aplicativo VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Cancelado" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Chamada para %(phone_number)s cancelada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Atividade" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Nome da atividade" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Adicionar à fila de chamadas" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Ocorreu um erro com o dispositivo de gravação de áudio (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Ocorreu um erro na instanciação do Agente do usuário:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Ocorreu um erro ao tentar enviar o convite para o seguinte número: %(phoneNumber)s\n" +"\n" +"Erro: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Tem certeza de que quer excluir essa atividade? Ela será excluída para " +"sempre 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Perguntar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Ligação" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Ligação de %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Ligação de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Ligar de outro dispositivo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Ligação recusada (motivo \"%(reasonPhrase)s\")" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Ligar para %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Ligar para %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Chamando" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Ligando para %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Ligações" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Cancelar a atividade" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Não foi possível acessar o dispositivo de gravação de áudio. Se você houver " +"negado o acesso ao microfone, permita-o e tente novamente. Se não, " +"certifique-se de que este site é executado em HTTPS e de que não há " +"configuração de negação de acesso a dispositivos de mídia em seu navegador." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Alterar dispositivo de entrada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Escolha um dispositivo:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Selecione o método utilizado para realizar ligações pelo aplicativo móvel:\n" +" • VoIP: Sempre usar o Softphone do Odoo\n" +" • Telefone do dispositivo: Sempre usar o telefone do dispositivo\n" +" • Perguntar: Sempre perguntar se deve usar o Softphone ou o telefone do dispositivo\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Fechar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Fechar teclado numérico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Fechar Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Fechar detalhes" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Conectando…" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contato" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contatos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Contatos com um número de telefone serão exibidos aqui." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demonstração" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Telefone do dispositivo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Direção" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nome exibido" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documentos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Editar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Encerrar ligação" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Data de término" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Digitar número ou nome" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Digite o número…" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Número do dispositivo externo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Número do dispositivo externo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Falha ao carregar a biblioteca SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Desligar mas manter chamada na fila" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Espere!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Como fazer chamadas no celular" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Como fazer ligações pelo celular" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Se habilitado, ligações recebidas serão automaticamente rejeitadas no Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Se habilitado, realizar uma ligação no Odoo fará com que ela seja " +"transferida para o \"Número do dispositivo externo\". Use essa opção para " +"realizar a ligação pelo Odoo mas tratá-la em outro dispositivo (ex: seu " +"telefone de mesa)." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Se a opção \"Ligar de outro dispositivo\" estiver habilitada, as ligações " +"feitas pelo Odoo serão transferidas para esse número de telefone." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Em ligação por: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Recebida" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Ligação recebida de…" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Seleção de dispositivo de entrada" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Está na fila de chamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Último telefonema visto" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marcar como concluída" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Clique errado." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Não atendida" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Ligação perdida de %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Celular" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Celular:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Mutar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Próximas atividades" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Nnehum dispositivo de gravação de áudio disponível. Para usar o aplicativo, " +"um microfone é necessário." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Nenhuma ligação agendada para hoje 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Sem resultados de busca 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Em andamento" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Abrir teclado numérico" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Abrir Softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Saída" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP do servidor PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" +"Endereço de PBX ou WebSocket não encontrado. Verifique suas definições." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefone" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Número de telefone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefone:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Aceite o uso do microfone." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Tente novamente mais tarde. Se o problema persistir, você pode solicitar que" +" um administrador verifique as configurações." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produção" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Recentes" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registro rejeitado: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Rejeitar ligações recebidas" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Rejeitado" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Ligação de %(phone_number)s recusada" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Ligação para %(phone_number)s recusada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Você se lembra?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Remover da fila de chamadas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsável" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Chamando…" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Agendar e fazer ligações da sua base de dados" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Agendar atividade" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Pesquisar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Selecione um método de chamada" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Enviar e-mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Rejeitar automaticamente as chamadas recebidas" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Ligar de outro dispositivo" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Alguns documentos não podem ser adicionados a fila de chamadas pois não têm " +"um número de telefone definido:%(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Data de início" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Status" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Como fazer a ligação:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Encerrado" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "O endereço de IP do seu servidor PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "O URL do seu WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "A conexão do WebSocket foi perdida e não pôde ser restabelecida." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"O erro pode ser proveniente da camada de transporte. Peça que um " +"administrador verifique o URL do servidor WebSocket nas Configurações " +"gerais. Se o problema persistir, provavelmente se trata de um problema do " +"servidor." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Nome da atividade relacionada a este telefonema, se houver." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"O número está incorreto, as credenciais do usuário estão erradas ou a conexão não pode ser realizada. Verifique suas configurações.\n" +"(Motivo recebido: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "A senha que será usada para registrar o servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "A pessoa que você tentou contatar está indisponível no momento." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"O servidor falhou ao autenticá-lo. Peça que um administrador verifique se " +"você está chamando o servidor correto (IP do servidor PBX nas Configurações " +"gerais) e se as credenciais nas suas preferências de usuário estão corretas." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"O agente do usuário não pode ser iniciado. O URL do servidor Websocket pode " +"estar incorreto. Solicite que um administrador verifique esse URL nas " +"Configurações gerais." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"O nome de usuário (normalmente o número de extensão) que será usado para " +"registrar o servidor PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"A conexão do websocket com o servidor foi perdida. Tentando restabelecer a " +"conexão…" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Ainda há chamadas em andamento. Tem certeza de que quer sair desta página?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transferência" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transferir para" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Desdobrar Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Desmutar" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Usuário" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Configurações do usuário" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "PeloVoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Pelo telefone do dispositivo" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Suporte da fila do VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Configuração" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Ambiente" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Segredo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Nome de usuário/número de extensão" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip/Ligações" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Segredo do Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Nome de usuário do Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Sim." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Seu navegador não suporta alguns dos recursos necessários para o " +"funcionamento do VoIP. Tente atualizá-lo ou usar outro navegador." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Seu histórico de ligações está vazio. Faça uma ligação agora e ela será " +"listada aqui 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Suas informações de login não estão definidas corretamente. Entre em contato" +" com o administrador." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "menos de um segundo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "VoIP" diff --git a/voip/i18n/ro.po b/voip/i18n/ro.po new file mode 100644 index 0000000..a297f6b --- /dev/null +++ b/voip/i18n/ro.po @@ -0,0 +1,1126 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Hongu Cosmin , 2024 +# Cozmin Candea , 2024 +# Martin Trigaux, 2024 +# Dorin Hongu , 2024 +# Foldi Robert , 2024 +# Betty Keresztesi, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Activitate" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Adăugare la Coada de Apeluri" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Întreabă" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Apeluri" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Anulează" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Anulare activitate" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Închide" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Setări de configurare" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmă" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Contact" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Contacte" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Creat de" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Creat în" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Client" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Direcție" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Nume afișat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Documente" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Editare" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Închidere Apel" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Dată sfârșit" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Introduceți un număr sau un nume" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Închideți, dar țineți apelul la coadă" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Dacă este activată, plasarea unui apel în Odoo va transfera apelul către " +"\"Numărul dispozitivului extern\". Utilizați această opțiune pentru a plasa " +"apelul în Odoo, dar pentru a-l gestiona de pe un alt dispozitiv - de " +"exemplu, telefonul de pe biroul dumneavoastră." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Intrări" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Se află în coada de apeluri" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Apel telefonic ultima oară văzut" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Ultima actualizare făcută de" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Ultima actualizare pe" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Marchează ca efectuat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Apel Ratat" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Mut" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Următoarele activități" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "În curs de desfășurare" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Ieșiri" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP Server PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Adresa PBX sau Websocket lipsește. Verificați setările." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Număr telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Vă rugăm să acceptați utilizarea microfonului." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Producție" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Recent" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Respins" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Eliminare din coada apelurilor" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Responsabil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planifică activitate" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Căutare" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Dată început" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stare" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL-ul WebSocket-ului dvs." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" +"Persoana pe care încercați să o contactați este momentan indisponibilă." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Transfer" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transferă la" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Dezactivați" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Utilizator" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Setări utilizator" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Mediul VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/ru.po b/voip/i18n/ru.po new file mode 100644 index 0000000..9bb96a7 --- /dev/null +++ b/voip/i18n/ru.po @@ -0,0 +1,1184 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# alenafairy, 2023 +# ILMIR , 2023 +# Alena Vlasova, 2023 +# Sergey Vilizhanin, 2023 +# Сергей Шебанин , 2023 +# Gennady Marchenko , 2023 +# Collex100, 2023 +# Martin Trigaux, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s мин %(seconds)s сек" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s минут" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s пропущенные звонки" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s секунд" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 минута" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 пропущенный звонок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 секунда" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 минуты" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 пропущенных звонка" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 секунды" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"При попытке получить доступ к устройству записи звука произошла аппаратная " +"ошибка. Пожалуйста, убедитесь, что ваши драйверы обновлены, и повторите " +"попытку." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Телефонный звонок, обработанный с помощью приложения VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Отменено" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Прерванный вызов на %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Активность" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Название мероприятия" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Добавить в очередь вызовов" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Произошла ошибка, связанная с устройством записи звука (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Во время создания агента пользователя произошла ошибка:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"При попытке пригласить следующий номер произошла ошибка: %(phoneNumber)s\n" +"\n" +"Ошибка: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Вы уверены, что хотите удалить эту активность? Она будет потеряна навсегда, " +"а это довольно долгий срок 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Спросить" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Возврат" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Позвонить" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Звонок с %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Звонок с %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Вызов с другого устройства" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Вызов отклонен (причина: \"%(reasonPhrase)s\")" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Звонок на %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Звонок на %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Вызов" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Звоню %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Звонки" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Отменить" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Отменить мероприятие" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Невозможно получить доступ к устройству записи звука. Если вам запрещен " +"доступ к микрофону, разрешите его и повторите попытку. В противном случае " +"убедитесь, что этот сайт работает по протоколу HTTPS и что в вашем браузере " +"не установлен запрет на доступ к медиаустройствам." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Изменение устройства ввода" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Выберите устройство:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Выберите метод, который будет использоваться для совершения звонка при использовании мобильного приложения:\n" +" - VoIP: Всегда используйте софтфон Odoo\n" +" - Телефон устройства: Всегда использовать телефон устройства\n" +" - Спрашивать: Всегда спрашивать, следует ли использовать софтфон или телефон устройства\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Закрыть" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Закрыть Numpad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Закрыть софтфон" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Закрыть детали" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Параметры конфигурации" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Подтвердить" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Соединение…" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Контакты" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Контакты" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Контакты с номером телефона будут показаны здесь." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Создано" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Клиент" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Демо" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Телефон устройства" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Направление" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Документы" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Редактировать" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Конец разговора" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Дата окончания" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Введите номер или имя" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Введите номер.." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Номер внешнего устройства" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Не удалось загрузить библиотеку SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Положите трубку, но сохраните звонок в очереди" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Стойте!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Как совершать звонки на мобильный" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" +"Если эта функция включена, входящие звонки будут автоматически отклоняться в" +" Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Если эта опция включена, при размещении звонка в Odoo он будет переведен на " +"\"Номер внешнего устройства\". Используйте эту опцию, чтобы разместить " +"звонок в Odoo, но обработать его с другого устройства - например, с вашего " +"настольного телефона." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Если опция \"Звонить с другого устройства\" включена, звонки, сделанные в " +"Odoo, будут переводиться на этот номер телефона." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Призыв: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Входящий" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Входящий звонок от.." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Выбор устройства ввода" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Находится в очереди вызовов" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Последний телефонный звонок" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Последнее обновление" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Последнее обновление" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Отмечено как завершенное" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Промахнулся, извините." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Пропущенный" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Пропущенный звонок от %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Мобильный" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Мобильный:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Без звука" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Следующие мероприятия" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Отсутствует устройство для записи звука. Для использования приложения " +"требуется микрофон." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "На сегодня звонков не запланировано 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Нет результатов поиска 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Текущие" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Открыть Numpad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Открытый софтфон" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Исходящие" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX сервер IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Отсутствует адрес АТС или Websocket. Пожалуйста, проверьте настройки." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Телефон" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Номер телефона" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Телефон:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Пожалуйста, разрешите воспользоваться микрофоном." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Пожалуйста, повторите попытку позже. Если проблема сохраняется, попросите " +"администратора проверить конфигурацию." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Производство" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Последние" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Регистрация отклонена: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Отклонять входящие вызовы" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Отклонено" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Отклоненный вызов с %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Отклоненный вызов на %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Помните?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Удалить из очереди вызовов" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Ответственный" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Звонок.." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Планируйте и совершайте звонки из своей базы данных" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Деятельность по расписанию" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Поиск" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Выберите метод вызова" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Отправить электронное письмо" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Некоторые документы нельзя добавить в очередь вызовов, поскольку для них не " +"задан номер телефона: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Дата начала" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Область" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Расскажите нам, как сделать звонок:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Остановлено" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "IP-адрес вашего сервера АТС" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL вашего WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Ошибка может возникнуть на транспортном уровне. Попросите администратора " +"проверить URL-адрес сервера websocket в общих настройках. Если проблема не " +"исчезла, вероятно, дело в сервере." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" +"Название мероприятия, связанного с этим телефонным звонком, если таковое " +"имеется." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Номер неверен, возможно, неверно указаны учетные данные пользователя или не удается установить соединение. Пожалуйста, проверьте конфигурацию.\n" +"(Причина получена: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Пароль, который будет использоваться для регистрации на сервере АТС." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Человек, с которым вы пытаетесь связаться, сейчас недоступен." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Серверу не удалось подтвердить вашу подлинность. Пожалуйста, попросите " +"администратора проверить, что вы обращаетесь к нужному серверу (IP-адрес " +"сервера АТС в общих настройках) и что учетные данные в настройках " +"пользователя верны." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Не удалось запустить агент пользователя. URL-адрес сервера сокетов может " +"быть неверным. Попросите администратора проверить URL-адрес сервера сокетов " +"в общих настройках." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Имя пользователя (обычно внутренний номер), которое будет использоваться для" +" регистрации на сервере АТС." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "Вызов все еще продолжается, вы уверены, что хотите покинуть страницу?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Перевод" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Перевести в" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Развернутый софтфон" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Вкл. звук" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Пользователь" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Настройки пользователя" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Использование VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Использование телефона устройства" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Поддержка очередей VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Конфигурация VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Среда VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Секрет VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Имя пользователя VoIP / Добавочный номер" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / Звонки" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Да, сделайте это." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Ваш браузер не поддерживает некоторые функции, необходимые для работы VoIP. " +"Пожалуйста, попробуйте обновить браузер или использовать другой." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Ваша история звонков пуста! Сделайте звонок прямо сейчас, чтобы он был " +"указан здесь 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Ваши данные для входа в систему заданы неверно. Пожалуйста, свяжитесь с " +"вашим администратором." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "менее секунды" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "телефон" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/sk.po b/voip/i18n/sk.po new file mode 100644 index 0000000..024722e --- /dev/null +++ b/voip/i18n/sk.po @@ -0,0 +1,1116 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# karolína schusterová , 2023 +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivita" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Pridať do poradia telefonátu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Telefonát" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Telefonovanie" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Zrušené" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvoriť" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Nastavenia konfigurácie" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdiť" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Vytvoril" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Vytvorené" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Zákazník" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Smer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Zobrazovaný názov" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenty" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Upraviť" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Dátum ukončenia" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Prichádzajúci" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Je v poradí telefonátu" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Naposledy upravoval" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Naposledy upravované" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Označiť ako hotovo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobilný telefón" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Ďalšie aktivity" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Prebiehajúci" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Odchádzajúce" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Server IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefón" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefónne číslo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefón:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Výroba" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Nedávny" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Zamietnuté" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Odstrániť z poradia telefonátov" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Zodpovedný" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Naplánuj aktivity" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Vyhľadávanie" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Dátum začiatku" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Štát" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL vášho WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Prevod" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Užívateľ" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/sl.po b/voip/i18n/sl.po new file mode 100644 index 0000000..38e8d6e --- /dev/null +++ b/voip/i18n/sl.po @@ -0,0 +1,1125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Vida Potočnik , 2023 +# Grega Vavtar , 2023 +# matjaz k , 2023 +# laznikd , 2023 +# Jasmina Macur , 2023 +# Martin Trigaux, 2023 +# Matjaz Mozetic , 2023 +# Tomaž Jug , 2023 +# Tadej Lupšina , 2023 +# Katja Deržič, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivnost" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Klic" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Prekliči" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Zaključi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Uredi nastavitve" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potrdi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Stik" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Stiki" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Ustvaril" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Stranka" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Smer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Uredi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Končni datum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Naročeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Označi kot opravljeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobilni telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mob:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Izklop zvoka" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Naslednje aktivnosti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "V teku" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Odhajajoča količina" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefonska številka" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Proizvodnja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Zavrnjeno" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Odgovoren" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Načrt aktivnosti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Iskanje" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Začetni datum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Stanje" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Prenos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Uporabnik" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "Voip" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP okolje" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "phone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/sq.po b/voip/i18n/sq.po new file mode 100644 index 0000000..d848e09 --- /dev/null +++ b/voip/i18n/sq.po @@ -0,0 +1,1138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Albanian (https://www.transifex.com/odoo/teams/41243/sq/)\n" +"Language: sq\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Anullo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "E Anulluar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Krijuar nga" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Krijuar me" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Partner" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Emri i paraqitur" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Grupo Nga" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Modifikuar per here te fundit nga" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Modifikuar per here te fundit me" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Sekuencë" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Statusi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/sr.po b/voip/i18n/sr.po new file mode 100644 index 0000000..9e19b05 --- /dev/null +++ b/voip/i18n/sr.po @@ -0,0 +1,1143 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Martin Trigaux, 2023 +# Dragan Vukosavljevic , 2023 +# Milan Bojovic , 2023 +# Jelena Stamatović, 2024 +# コフスタジオ, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 propušten poziv" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 propuštena poziva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivnost" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Naziv aktivnosti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Add to Call Queue" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Pitaj" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Poziv" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Poziv sa drugog uređaja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Otkaži" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Cancel the activity" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Podešavanje konfiguracije" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Klijent" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Device's phone" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Smer" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokumenti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Uredi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Zavši poziv" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Završni Datum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Enter number or name" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Broj spoljnog uređaja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Hang up but keep call in queue" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "How to place calls on mobile" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "If enabled, incoming calls will be automatically declined in Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Ako je omogućena opcija \"Poziv sa drugog uređaja\", pozivi koji se obave u " +"Odoo-u će biti preusmereni na ovaj broj telefona." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Dolazni" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Is in the Call Queue" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Last Seen Phone Call" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Poslednji put ažurirao" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Poslednji put ažurirano" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Označi kao završeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Propustio" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobilni" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobilni:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Isključi zvuk" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Naredne aktivnosti" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"No audio recording device available. The application requires a microphone " +"in order to be used." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "U toku" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Izlazno" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Server IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX or Websocket address is missing. Please check your settings." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Phone Number" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Please accept the use of the microphone." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Molimo pokušajte ponovo kasnije. Ako problem i dalje postoji, možda biste " +"želeli da zatražite od administratora da proveri konfiguraciju." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Proizvodnja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Nedavno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Registracija odbijena: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Reject incoming calls" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Odbijeno" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Remove from Call Queue" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Odgovorno lice" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Rasporedi aktivnost" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Pronađi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Neki dokumenti ne mogu biti dodati u red čekanja poziva jer nemaju " +"postavljen broj telefona: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Početni datum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Država" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "IP adresa vašeg PBX servera" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "The URL of your WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Lozinka koja će se koristiti prilikom registracije na PBX serveru." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "The person you try to contact is currently unavailable." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Prenos" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transfer to" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Unmute" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Korisnik" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Podešavanja korisnika" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP Queue support" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP Configuration" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP Environment" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP secret" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP username / Extension number" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "phone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/sr@latin.po b/voip/i18n/sr@latin.po new file mode 100644 index 0000000..2ccaf28 --- /dev/null +++ b/voip/i18n/sr@latin.po @@ -0,0 +1,1141 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Nemanja Dragovic , 2017 +# Djordje Marjanovic , 2017 +# Martin Trigaux , 2017 +# Ljubisa Jovev , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-11-21 17:08+0000\n" +"Last-Translator: Ljubisa Jovev , 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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "# Slucajeva" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivnost" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Odustani" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "Poništeno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "Datum kreiranja" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "Kreiran dana" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kupac" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "Datum" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "Datum dospijeća" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "Trajanje" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "Grupiši po" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "Odrzan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "Dolazni" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "Promenio" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "Vreme promene" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "Mobilni" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "Ne Odrzivo" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "Zabilješka" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "Izlazno" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "Telefon:" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "TelPozivi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Proizvodnja" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "Odgovoran" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "Pretrazi Telefonske pozive" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "Prioritet" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "Status" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "Sumarno" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "Za Uraditi" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "Sutra" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "min" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/sv.po b/voip/i18n/sv.po new file mode 100644 index 0000000..40deb30 --- /dev/null +++ b/voip/i18n/sv.po @@ -0,0 +1,1127 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Haojun Zou , 2023 +# Chrille Hedberg , 2023 +# Jakob Krabbe , 2023 +# Mikael Åkerberg , 2023 +# Stephen Schmidt , 2023 +# Leif Persson , 2023 +# Martin Trigaux, 2023 +# Robin Calvin, 2023 +# Mikael Carlsson , 2023 +# Kim Asplund , 2023 +# Lasse L, 2023 +# Anders Wallenquist , 2024 +# Simon S, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Simon S, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivitet" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Fråga" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Samtal" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Avbryt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Stäng" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Inställningar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bekräfta" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontakt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontakter" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Kund" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Riktning" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Dokument" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Redigera" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Slutdatum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Inkommande" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Är i ring-kö" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Markera som färdig" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Missat" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Stäng av mikrofon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Nästa aktivitet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Pågående" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Utgående" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Produktion" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Senaste" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Avvisad" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Ansvarig" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Planera aktivitet" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Sök" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Startdatum" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Etapp" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Flytt" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Överföra till" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Aktivera mikrofon" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Användare" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Användarinställningar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/ta.po b/voip/i18n/ta.po new file mode 100644 index 0000000..2f79784 --- /dev/null +++ b/voip/i18n/ta.po @@ -0,0 +1,1139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Odoo 9.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2016-02-05 10:10+0000\n" +"Last-Translator: Martin Trigaux\n" +"Language-Team: Tamil (http://www.transifex.com/odoo/odoo-9/language/ta/)\n" +"Language: ta\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: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__nbr +msgid "# of Cases" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "%(number of missed calls)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "A hardware error occured while trying to access audio recording device. Please make sure your drivers are up to date and try again." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Accept" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#: model:ir.actions.server,name:voip.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "An error occured involving the audio recording device (%(errorName)s):
%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "An error occurred during the instantiation of the User Agent:

%(error message)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Are you sure that you want to close this website? There's a call ongoing." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Avatar" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__call_date +msgid "Call Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__name +msgid "Call Name" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call duration: %(min)smin %(sec)ssec" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Call rejected (reason: \"%(reasonPhrase)s\")" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Call to %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/voip_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Calls Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__cancel +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__cancel +msgid "Cancelled" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Cannot access audio recording device. If you have denied access to your microphone, please grant it and try again. Otherwise, make sure this website runs over HTTPS and that your browser is not set to deny access to media devices." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Click to unblock" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__partner_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_uid +msgid "Created by" +msgstr "உருவாக்கியவர்" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__create_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__create_date +msgid "Created on" +msgstr "" +"உருவாக்கப்பட்ட \n" +"தேதி" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Creation Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__call_date +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__display_name +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__display_name +msgid "Display Name" +msgstr "காட்சி பெயர்" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Document" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__no_reschedule +msgid "Don't Reschedule" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__date_deadline +msgid "Due Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__duration +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__duration +msgid "Duration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__duration +msgid "Duration in minutes." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Enter the number..." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Failed to start the user agent. The URL of the websocket server may be wrong. Please have an administrator verify the websocket server URL in the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__sequence +msgid "Gives the sequence order when displaying a list of Phonecalls." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Group By" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Headphones" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__done +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__done +msgid "Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__should_call_from_another_device +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "If enabled, placing a call in Odoo will transfer the call to the \"External device number\". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__external_device_number +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "If the \"Call from another device\" option is enabled, calls placed in Odoo will be transfered to this phone number." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__7d +msgid "In 1 Week" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__15d +msgid "In 15 Day" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__2m +msgid "In 2 Months" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__in_queue +msgid "In Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "In call for:" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"In order to follow up on the call, you can trigger a request for\n" +" another call, a meeting." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-python +#. odoo-javascript +#: code:addons/voip/models/voip_phonecall.py:0 +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Incoming call from %s (%s)" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Incoming call from..." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/audio_input_device.js:0 +#, python-format +msgid "Input/output audio settings" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Keypad" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_uid +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_uid +msgid "Last Updated by" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__write_date +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__write_date +msgid "Last Updated on" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__activity_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__activity_id +msgid "Linked Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mail_message_id +msgid "Linked Chatter Message" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__voip_phonecall_id +msgid "Linked Voip Phonecall" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "Log the summary of a phonecall" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__phonecall_id +msgid "Logged Phonecall" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Make a call using:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Missed Call from %s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_mobile +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_mobile +msgid "Mobile number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "My Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Next activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "No audio recording device available. The application requires a microphone in order to be used." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__pending +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__pending +msgid "Not Held" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__note +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__note +msgid "Note" +msgstr "" + +#. module: voip +#: model_terms:ir.actions.act_window,help:voip.voip_phonecall_view +msgid "" +"Odoo allows you to log inbound calls on the fly to track the\n" +" history of the communication with a customer or to inform another\n" +" team member." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Pending" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__phone +#, python-format +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__sanitized_phone +#: model:ir.model.fields,field_description:voip.field_res_users__sanitized_phone +msgid "Phone number sanitized" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Phonecall details" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_phonecall_view +#: model:ir.ui.menu,name:voip.menu_voip_phonecall_view +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +#: model_terms:ir.ui.view,arch_db:voip.voip_phonecall_tree_view +msgid "Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Refresh the Panel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Reject call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_phonecall.py:0 +#, python-format +msgid "Rejected Incoming Call from %s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/components/call_queue_switch/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#, python-format +msgid "Remove from the queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__user_id +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__user_id +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Ringing..." +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_option +msgid "Schedule A New Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Schedule Next" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/dialing_panel.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Search Phonecalls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Send mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__sequence +msgid "Sequence" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__reschedule_date +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__custom +msgid "Specific Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__start_time +msgid "Start time" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall__state +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_report__state +msgid "Status" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_phonecall_log_wizard__summary +msgid "Summary" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Take call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The connection cannot be made.
Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.
(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_secret +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/user_agent.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "The phonecall has no number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/js/registerer.js:0 +#, python-format +msgid "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_phonecall__state +msgid "" +"The status is set to To Do, when a call is created.\n" +"When the call is over, the status is set to Held.\n" +"If the call is not applicable anymore, the status can be set to Cancelled." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users__voip_username +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "The username (typically the extension number) that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "The websocket connection with the server has been lost. Please try to refresh the page." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall__state__open +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_report__state__open +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "To Do" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_phonecall_log_wizard__reschedule_option__1d +msgid "Tomorrow" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.view_voip_case_phonecalls_filter +msgid "Unassigned" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall +msgid "VOIP Phonecall" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_log_wizard +msgid "VOIP Phonecall log Wizard" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_phonecall_report +msgid "VOIP Phonecalls by user report" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Voip" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "You are already in a call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/legacy/dialing_panel.js:0 +#, python-format +msgid "Your browser could not support WebRTC. Please check your configuration." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your browser does not support some of the features needed for VoIP to work. Please try to update your browser or use a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/user_agent_service.js:0 +#, python-format +msgid "Your credentials are not correctly set. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "min" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/xml/phone_call.xml:0 +#: code:addons/voip/static/src/xml/phone_call_details.xml:0 +#, python-format +msgid "sec" +msgstr "" diff --git a/voip/i18n/th.po b/voip/i18n/th.po new file mode 100644 index 0000000..4ea6d5e --- /dev/null +++ b/voip/i18n/th.po @@ -0,0 +1,1165 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Rasareeyar Lappiam, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s นาที %(seconds)s วินาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s นาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s สายที่ไม่ได้รับ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s วินาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 นาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 สายที่ไม่ได้รับ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 วินาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 นาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 สายที่ไม่ได้รับ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 วินาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"เกิดข้อผิดพลาดด้านฮาร์ดแวร์ขณะพยายามเข้าถึงอุปกรณ์บันทึกเสียง " +"โปรดตรวจสอบให้แน่ใจว่าไดรเวอร์ของคุณเป็นเวอร์ชันล่าสุดแล้วลองอีกครั้ง" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "การโทรที่จัดการโดยใช้แอปพลิเคชัน VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "ถูกยกเลิก" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "ยกเลิกการโทรที่ %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "กิจกรรม" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "ชื่อกิจกรรม" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "เพิ่มในคิวการโทร" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"เกิดข้อผิดพลาดเกี่ยวกับอุปกรณ์บันทึกเสียง (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"เกิดข้อผิดพลาดระหว่างการสร้างอินสแตนซ์ของ ตัวแทนผู้ใช้:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"เกิดข้อผิดพลาดขณะพยายามเชิญหมายเลขต่อไปนี้:%(phoneNumber)s\n" +"\n" +"ข้อผิดพลาด: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "คุณแน่ใจหรือไม่ว่าต้องการลบกิจกรรมนี้ มันคงจะหายไปตลอดกาล 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "ถาม" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "ย้อนถอยหลัง" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "โทร" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "โทรจาก %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "โทรจาก %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "โทรจากอุปกรณ์อื่น" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "การโทรถูกปฏิเสธ (เหตุผล: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "โทรถึง %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "โทรถึง %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "กำลังโทร" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "กำลังโทร %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "โทร" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "ยกเลิกกิจกรรม" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"ไม่สามารถเข้าถึงอุปกรณ์บันทึกเสียงได้ หากคุณปฏิเสธการเข้าถึงไมโครโฟนของคุณ " +"โปรดอนุญาตและลองอีกครั้ง ไม่เช่นนั้น ตรวจสอบให้แน่ใจว่าเว็บไซต์นี้ทำงานบน " +"HTTPS และเบราว์เซอร์ของคุณไม่ได้ตั้งค่าให้ปฏิเสธการเข้าถึงอุปกรณ์สื่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "เปลี่ยนอุปกรณ์การป้อนข้อมูล" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "เลือกอุปกรณ์:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"เลือกวิธีที่จะใช้โทรออกเมื่อใช้แอปพลิเคชันมือถือ:\n" +" • VoIP: ใช้ซอฟต์โฟน Odoo เสมอ\n" +" • โทรศัพท์ของอุปกรณ์: ใช้โทรศัพท์ของอุปกรณ์เสมอ\n" +" • ถาม: ถามเสมอว่าต้องใช้ซอฟต์โฟนหรือโทรศัพท์ของอุปกรณ์\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "ปิด" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "ปิดแป้นตัวเลข" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "ปิดซอฟต์โฟน" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "ปิดรายละเอียด" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "ตั้งค่าการกำหนดค่า" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "ยืนยัน" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "กำลังเชื่อมต่อ..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "ติดต่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "การติดต่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "ผู้ติดต่อพร้อมหมายเลขโทรศัพท์จะแสดงที่นี่" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "สร้างโดย" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "สร้างเมื่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "ลูกค้า" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "สาธิต" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "อุปกรณ์โทรศัพท์" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "ทิศทาง" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "แสดงชื่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "เอกสาร" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "แก้ไข" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "วางสาย" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "วันที่สิ้นสุด" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "ใส่หมายเลขหรือชื่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "ใส่หมายเลข..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "หมายเลขอุปกรณ์ภายนอก" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "หมายเลขอุปกรณ์ภายนอก" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"ไม่สามารถโหลดไลบรารี SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "วางสายแต่ให้การโทรอยู่ในคิว" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "รอก่อน!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "วิธีโทรผ่านมือถือ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "วิธีโทรออกบน" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ไอดี" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "หากเปิดใช้งาน สายเรียกเข้าจะถูกปฏิเสธโดยอัตโนมัติใน Odoo" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"หากเปิดใช้งาน การโทรออกใน Odoo จะถูกโอนสายไปยัง \"หมายเลขอุปกรณ์ภายนอก\" " +"ใช้ตัวเลือกนี้เพื่อโทรออกใน Odoo แต่จัดการจากอุปกรณ์อื่น - เช่น " +"โทรศัพท์ตั้งโต๊ะของคุณ" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"หากเปิดใช้งานตัวเลือก \"โทรจากอุปกรณ์อื่น\" สายที่โทรออกใน Odoo " +"จะถูกโอนไปยังหมายเลขโทรศัพท์นี้" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "อยู่ระหว่างการโทร: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "ขาเข้า" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "สายเรียกเข้าจาก..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "การเลือกอุปกรณ์การป้อนข้อมูล" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "อยู่ในคิวการโทร" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "การโทรที่เห็นล่าสุด" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "อัปเดตครั้งล่าสุดโดย" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "อัปเดตครั้งล่าสุดเมื่อ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "ทำเครื่องหมายว่าเสร็จสิ้น" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "คลิกผิด ขออภัย" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "หายไป" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "สายที่ไม่ได้รับจาก %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "มือถือ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "มือถือ:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "ปิดเสียง" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "กิจกรรมถัดไป" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"ไม่มีอุปกรณ์บันทึกเสียงที่พร้อมใช้งาน " +"แอปพลิเคชันจำเป็นต้องใช้ไมโครโฟนจึงจะใช้งานได้" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "ไม่มีกำหนดการโทรสำหรับวันนี้ 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "ไม่มีผลการค้นหา 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "กำลังดำเนินการ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "เปิดแป้นตัวเลข" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "เปิดซอฟต์โฟน" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "ขาออก" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP เซิร์ฟเวอร์ PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "ไม่มีที่อยู่ PBX หรือ Websocket โปรดตรวจสอบการตั้งค่าของคุณ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "โทรศัพท์" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "หมายเลขโทรศัพท์" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "โทรศัพท์:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "โปรดยอมรับการใช้ไมโครโฟน" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"กรุณาลองใหม่อีกครั้งในภายหลัง หากปัญหายังคงอยู่ " +"คุณอาจต้องขอให้ผู้ดูแลระบบตรวจสอบการกำหนดค่า" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "การผลิต" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "ล่าสุด" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "การลงทะเบียนถูกปฏิเสธ: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "ปฏิเสธสายเรียกเข้า" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "ปฏิเสธแล้ว" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "สายที่ถูกปฏิเสธจาก %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "สายที่ถูกปฏิเสธ %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "จำได้ไหม?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "นำออกจากคิวการโทร" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "รับผิดชอบ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "กำลังดัง…" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "กำหนดเวลาและโทรจากฐานข้อมูลของคุณ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "กำหนดการกิจกรรม" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "ค้นหา" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "เลือกวิธีการโทร" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "ส่งอีเมล" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "ควรปฏิเสธสายเรียกเข้าอัตโนมัติ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "ควรโทรจากอุปกรณ์อื่น" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"ไม่สามารถเพิ่มเอกสารบางฉบับลงในคิวการโทรได้เนื่องจากไม่ได้ตั้งค่าหมายเลขโทรศัพท์ไว้:" +" %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "วันที่เริ่ม" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "สถานะ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "บอกเราถึงวิธีการโทร:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "ยุติแล้ว" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "ที่อยู่ IP ของเซิร์ฟเวอร์ PBX ของคุณ" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL ของ WebSocket ของคุณ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "การเชื่อมต่อ WebSocket ขาดหายไปและไม่สามารถสร้างใหม่ได้" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"ข้อผิดพลาดอาจมาจากขั้นตอนการขนส่ง โปรดให้ผู้ดูแลระบบตรวจสอบ URL เซิร์ฟเวอร์ " +"websocket ในการตั้งค่าทั่วไป หากปัญหายังคงอยู่ อาจเป็นปัญหากับเซิร์ฟเวอร์" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "ชื่อของกิจกรรมที่เกี่ยวข้องกับการโทรนี้ ถ้ามี" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"หมายเลขไม่ถูกต้อง ข้อมูลรับรองผู้ใช้อาจผิดหรือไม่สามารถทำการเชื่อมต่อได้ กรุณาตรวจสอบการกำหนดค่าของคุณ\n" +"(เหตุผลที่ได้รับ: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "รหัสผ่านที่จะใช้ในการลงทะเบียนกับเซิร์ฟเวอร์ PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "คนที่คุณพยายามติดต่อไม่ว่างในขณะนี้" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"เซิร์ฟเวอร์ล้มเหลวในการรับรองความถูกต้องของคุณ " +"โปรดให้ผู้ดูแลระบบตรวจสอบว่าคุณเข้าถึงเซิร์ฟเวอร์ที่ถูกต้อง (IP เซิร์ฟเวอร์ " +"PBX ในการตั้งค่าทั่วไป) และข้อมูลรับรองในการตั้งค่าผู้ใช้ของคุณนั้นถูกต้อง" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"ไม่สามารถเริ่มตัวแทนผู้ใช้ได้ URL เซิร์ฟเวอร์ websocket อาจไม่ถูกต้อง " +"โปรดให้ผู้ดูแลระบบตรวจสอบ URL เซิร์ฟเวอร์ websocket ในการตั้งค่าทั่วไป" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"ชื่อผู้ใช้ (โดยทั่วไปคือหมายเลขต่อภายใน) " +"ที่จะใช้ในการลงทะเบียนกับเซิร์ฟเวอร์ PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"การเชื่อมต่อ websocket ไปยังเซิร์ฟเวอร์สูญหาย " +"กำลังพยายามสร้างการเชื่อมต่ออีกครั้ง..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "ยังคงมีการโทรอยู่ คุณแน่ใจหรือไม่ว่าต้องการออกจากเพจ?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "โอน" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "โอนย้ายไปยัง" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "เปิดเผยซอฟต์โฟน" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "ยกเลิกการปิดเสียง" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "ผู้ใช้" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "การตั้งค่าผู้ใช้" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "กำลังใช้ VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "การใช้โทรศัพท์ของอุปกรณ์" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "รองรับคิว VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "การกำหนดค่า VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP สภาพแวดล้อม" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP ลับ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "ชื่อผู้ใช้ VoIP / หมายเลขส่วนขยาย" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / การโทร" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "รหัสลับ Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "ชื่อผู้ใช้ Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "ใช่ ทำเลย" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"เบราว์เซอร์ของคุณไม่รองรับฟีเจอร์บางอย่างที่จำเป็นในการทำงานสำหรับ VoIP " +"โปรดลองอัปเดตเบราว์เซอร์ของคุณหรือใช้เบราว์เซอร์อื่น" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "ประวัติการโทรของคุณว่างเปล่า! โทรตอนนี้และแสดงรายการไว้ที่นี่💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"รายละเอียดการเข้าสู่ระบบของคุณไม่ได้ตั้งค่าอย่างถูกต้อง " +"โปรดติดต่อผู้ดูแลระบบของคุณ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "น้อยกว่าหนึ่งวินาที" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "โทรศัพท์" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/tr.po b/voip/i18n/tr.po new file mode 100644 index 0000000..d1077f8 --- /dev/null +++ b/voip/i18n/tr.po @@ -0,0 +1,1129 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Tugay Hatıl , 2023 +# Gökhan Erdoğdu , 2023 +# Umur Akın , 2023 +# abc Def , 2023 +# Emre Akayoğlu , 2023 +# Levent Karakaş , 2023 +# Martin Trigaux, 2023 +# Murat Durmuş , 2023 +# Ediz Duman , 2023 +# Ozlem Cikrikci , 2023 +# Murat Kaplan , 2023 +# Ertuğrul Güreş , 2023 +# Fırat Kaya , 2023 +# Ömer ABA , 2024 +# Halil, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Halil, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Aktivite" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Aktivite Adı" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Arama Kuyruğuna Ekle" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Sor" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Geri" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Ara" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Çağrı" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "İptal" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Etkinliği iptal et" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Kapat" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Onayla" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Kontak" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Kontaklar" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Oluşturulma" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Müşteri" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Yön" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Belgeler" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Düzenle" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Bitiş Tarihi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Gelen" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Arama Sırasında mı" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Son Güncelleyen" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Son Güncelleme" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Yapıldı olarak işaretle" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Eksik" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Mobil" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Mobil:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Sessiz" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Sonraki Aktiviteler" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Devam eden" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Giden" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX Sunucu IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Telefon" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Telefon Numarası" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Telefon:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Üretim" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Son" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Reddedildi" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Arama Kuyruğundan kaldır" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Sorumlu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Aktivite Planla" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Arama" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Başlama Tarihi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Durum" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "WebSocket URL Adresiniz" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Aktarım" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Transfer et" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Sesi aç" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Kullanıcı" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Kullanıcı ayarları" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "telefon" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/uk.po b/voip/i18n/uk.po new file mode 100644 index 0000000..b22a363 --- /dev/null +++ b/voip/i18n/uk.po @@ -0,0 +1,1172 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Alina Lisnenko , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s хв. %(seconds)s сек." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s хвилин" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s пропущений дзвінок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s секунд" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 хвилина" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 пропущений дзвінок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 секунда" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 хвилини" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 пропущених дзвінки" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 секунди" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Сталася апаратна помилка під час спроби отримати доступ до пристрою для " +"запису звуку. Переконайтеся, що ваші драйвери оновлені, і повторіть спробу." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Телефонний дзвінок, оброблений за допомогою модуля VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Перервано" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Скинуто дзвінок до %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Дія" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Назва діїі" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Додати до черги дзінків" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Сталася помилка з пристроєм для запису звуку (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Під час створення агента користувача сталася помилка:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Під час спроби запросити цей номер сталася помилка: %(phoneNumber)s\n" +"\n" +"Помилка: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Ви впевнені, що бажаєте видалити цю дію? Це буде втрачено назавжди, а це " +"досить довго 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Запитати" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Дзвінок" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Дзвінок від %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Дзвінок від %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Дзвінок з іншого пристрою" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Дзвінок відхилено (причина: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Дзвінок до %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Дзвінок до %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Дзвінок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Дзвінок до %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Дзвінок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Скасувати" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Завершити дію" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Неможливо отримати доступ до пристрою для запису звуку. Якщо ви заборонили " +"доступ до мікрофона, дозвольте його та повторіть спробу. В іншому випадку " +"переконайтеся, що цей веб-сайт працює через HTTPS і що ваш браузер не " +"налаштовано на заборону доступу до мультимедійних пристроїв." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Змінити пристрій введення" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Оберіть пристрій:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Виберіть спосіб здійснення виклику під час використання мобільного додатку:\n" +" • VoIP: Завжди використовуйте програмний телефон Odoo\n" +" • Телефон пристрою: завжди використовуйте телефон пристрою\n" +" • Запитати: Завжди запитуйте, чи потрібно використовувати програмний телефон чи телефон пристрою\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Закрити" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Закрити цифровий блок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Закрити Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Закрити деталі" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Налаштування" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Підтвердити" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Зʼєднання…" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Контакт" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Контакти" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Тут будуть показані контакти з номером телефону." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Створив" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Створено" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Клієнт" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Демо" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Телефон пристрою" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Напрямок" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Документи" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Редагувати" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Завершити дзвінок" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Кінцева дата" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Введіть номер або ім'я" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Введіть номер…" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Номер зовнішнього пристрою" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Номер зовнішнього пристрою" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Помилка при завантаженні бібліотеки SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Покладіть трубку, але тримайте виклик у черзі" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Зачекайте на лінії!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Як дзвонити на мобільний" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Як телефонувати на мобільний" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "Якщо ввімкнено, вхідні виклики автоматично відхилятимуться в Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Якщо ввімкнено, здійснення виклику в Odoo призведе до переадресації виклику " +"на «Номер зовнішнього пристрою». Використовуйте цю опцію, щоб здійснити " +"дзвінок в Odoo, але обробляти його з іншого пристрою, напр. ваш настільний " +"телефон." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Якщо ввімкнуто опцію «Дзвінок з іншого пристрою», дзвінки, здійснені в Odoo," +" будуть переведені на цей номер телефону." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "На дзвінку: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Вхідні" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Вхідний дзвінок від…" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Вибір вхідного пристрою" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "У черзі дзвінка" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Останній переглянутий виклик" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Востаннє оновив" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Останнє оновлення" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Позначте як готово" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Випадково натиснув, вибачте." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Пропущено" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Пропущений дзвінок від %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Мобільний" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Мобільний:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Вимкнути звук" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Наступні дії" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" +"Немає доступного пристрою для запису звуку. Для використання програми " +"потрібен мікрофон." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "На сьогодні немає запланованих дзвінків 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Немає пошукових результатів 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "У процесі" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Відкрити цифровий блок" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Відкрити Softphone" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "На відправку" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX сервер IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "Відсутня адреса PBX або Websocket. Перевірте ваші налаштування." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Телефон" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Номер телефону" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Телефон:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Підтвердіть використання мікрофона." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Будь-ласка спробуйте пізніше. Якщо проблема не зникає, ви можете попросити " +"адміністратора перевірити конфігурацію." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Виробництво" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Останній" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Реєстрацію відхилено: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Відхилити вхідні дзвінки" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Відхилено" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Відхилений дзвінок від %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Відхилений дзвінок до %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Памʼятаєте?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Видалити з черги дзвінків" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Відповідальний" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Дзвонить…" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Плануйте та здійснюйте дзвінки зі своєї бази даних" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Запланувати дію" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Пошук" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Оберіть спосіб набору" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Надіслати e-mail" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Має автоматично відхиляти вхідні виклики" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Слід дзвонити з іншого пристрою" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Деякі документи не можна додати до черги викликів, оскільки для них не " +"встановлено номер телефону: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Початкова дата" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Статус" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Скажіть нам, як зробити виклик:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Припинено" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "IP-адреси вашого серверу PBX" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL вашого WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "З’єднання WebSocket було втрачено, і його не вдалося відновити." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Помилка може походити від транспортного рівня. Попросіть адміністратора " +"перевірити URL-адресу сервера websocket у загальних налаштуваннях. Якщо " +"проблема не зникає, ймовірно, проблема із сервером." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Назва дії, пов’язаної з цим телефонним дзвінком, якщо така є." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Номер неправильний, облікові дані користувача можуть бути неправильними або неможливо встановити з’єднання. Перевірте налаштування.\n" +"(Отримана причина: %(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Пароль, який буде використовуватися для реєстрації на сервері АТС." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Особа, з якою ви намагаєтеся зв'язатися, наразі недоступна." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Серверу не вдалося автентифікувати вас. Будь ласка, попросіть адміністратора" +" перевірити, чи ви підключаєтеся до потрібного сервера (IP-адреса сервера " +"PBX у загальних налаштуваннях) і чи правильні облікові дані у ваших " +"налаштуваннях користувача." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Не вдалося запустити агент користувача. URL-адреса сервера websocket може " +"бути неправильною. Попросіть адміністратора перевірити URL-адресу сервера " +"websocket у загальних налаштуваннях." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Ім’я користувача (зазвичай це внутрішній номер), яке використовуватиметься " +"для реєстрації на сервері PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" +"Веб-сокет-з’єднання з сервером було втрачено. Спроба відновити з’єднання…" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "Дзвінок ще триває, ви впевнені, що бажаєте залишити сторінку?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Переміщення" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Перемістити на" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Розгорніть Softphone" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Увімкнути звук" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Користувач" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Налаштування користувача" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Виокристовуючи VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Використовуючи телефон пристрою" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Підтримка VOIP Queue" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "IP-телефонія" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Налаштування VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Середовище ІР-телефонії" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Секретний ключ VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP ім'я користувача / додатковий номер" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / Дзвінки" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip Ключ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip Імʼя користувача" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Так, зробити це." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Ваш браузер не підтримує деякі функції, необхідні для роботи VoIP. Будь " +"ласка, спробуйте оновити свій браузер або використати інший." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Ваша історія викликів порожня! Зробіть дзвінок зараз і отримайте його тут 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Ваші дані для входу введено неправильно. Будь ласка, зверніться до свого " +"адміністратора." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "менше секунди" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "телефон" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/vi.po b/voip/i18n/vi.po new file mode 100644 index 0000000..d8d2f70 --- /dev/null +++ b/voip/i18n/vi.po @@ -0,0 +1,1170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Trần Hà , 2023 +# Thi Huong Nguyen, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s phút %(seconds)s giây" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s phút" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s cuộc gọi nhỡ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s giây" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 phút" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 cuộc gọi nhỡ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 giây" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 phút" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 cuộc gọi nhỡ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 giây" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" +"Đã xảy ra lỗi phần cứng khi cố gắng truy cập thiết bị ghi âm. Hãy đảm bảo " +"cập nhật trình điều khiển của bạn và thử lại." + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "Một cuộc gọi điện thoại được xử lý bằng ứng dụng VoIP" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "Đã huỷ" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "Đã huỷ cuộc gọi tới %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "Hoạt động" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "Tên hoạt động" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "Thêm vào dòng đợi gọi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"Đã xảy ra lỗi liên quan đến thiết bị ghi âm (%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"Đã xảy ra lỗi trong quá trình khởi tạo user agent:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"Đã xảy ra lỗi khi cố gắng mời số sau: %(phoneNumber)s\n" +"\n" +"Lỗi: %(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" +"Bạn có chắc chắn muốn xóa hoạt động này không? Nó sẽ biến mất mãi mãi. 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "Hỏi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "Khoảng trắng" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "Gọi" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "Cuộc gọi từ %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "Cuộc gọi từ %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "Cuộc gọi từ một thiết bị khác" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "Cuộc gọi bị từ chối (lý do: “%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "Cuộc gọi tới %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "Cuộc gọi tới %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "Calling" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "Đang gọi %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "Cuộc gọi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "Hủy" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "Hủy hoạt động" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"Không thể truy cập thiết bị ghi âm. Nếu bạn đã từ chối quyền truy cập vào " +"micrô của mình, vui lòng cho phép truy cập và thử lại. Nếu không, hãy đảm " +"bảo rằng trang web này đang chạy trên HTTPS và bạn không cài đặt cho trình " +"duyệt từ chối quyền truy cập vào các thiết bị đa phương tiện." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "Thay đổi thiết bị đầu vào" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "Chọn một thiết bị:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"Chọn phương thức sẽ sử dụng để thực hiện cuộc gọi khi sử dụng ứng dụng di động:\n" +" • VoIP: Luôn sử dụng ứng dụng điện thoại Odoo\n" +" • Tính năng điện thoại của thiết bị: Luôn sử dụng tính năng điện thoại của thiết bị\n" +" • Hỏi: Luôn hỏi xem có phải sử dụng ứng dụng điện thoại hay tính năng điện thoại của thiết bị không" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "Đóng" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "Đóng bàn phím số" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "Đóng ứng dụng điện thoại" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "Thông tin đóng" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "Cài đặt cấu hình" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Xác nhận" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "Đang kết nối…" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "Liên hệ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "Liên hệ" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "Liên hệ có số điện thoại sẽ được hiển thị ở đây." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "Được tạo bởi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "Được tạo vào" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "Khách hàng" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "Demo" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "Tính năng điện thoại của thiết bị" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "Hướng" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "Tài liệu" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "Chỉnh sửa" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "Kết thúc cuộc gọi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "Ngày kết thúc" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "Nhập số hoặc tên" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "Nhập số..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "Số thiết bị bên ngoài" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "Số thiết bị bên ngoài" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"Không tải được thư viện SIP.js:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "Cúp máy nhưng vẫn tiếp tục cuộc gọi trong hàng đợi" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "Chờ chút nhé!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "Cách thực hiện cuộc gọi trên thiết bị di động" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "Cách thực hiện cuộc gọi trên thiết bị di động" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "Nếu bật, các cuộc gọi đến sẽ tự động bị từ chối trong Odoo." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"Nếu bật, việc thực hiện cuộc gọi trong Odoo sẽ chuyển cuộc gọi đến \"Số " +"thiết bị bên ngoài\". Sử dụng tùy chọn này để thực hiện cuộc gọi trong Odoo " +"và xử lý cuộc gọi đó từ một thiết bị khác - ví dụ: điện thoại bàn của bạn." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" +"Nếu tùy chọn \"Gọi từ thiết bị khác\" được bật, các cuộc gọi thực hiện trong" +" Odoo sẽ được chuyển đến số điện thoại này." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "Đang gọi điện trong: %(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "Nhập về" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "Cuộc gọi đến từ..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "Lựa chọn thiết bị đầu vào" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Có trong danh sách cuộc gọi chờ" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "Cuộc gọi nhìn thấy lần cuối" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "Cập nhật lần cuối bởi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "Đánh dấu xong" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "Bấm nhầm, rất xin lỗi." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "Bỏ lỡ" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "Cuộc gọi nhỡ từ %(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "Di động" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "Di động:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "Tắt tiếng" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "Hoạt động tiếp theo" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "Không có thiết bị ghi âm nào. Cần có micrô để sử dụng ứng dụng này." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "Không có cuộc gọi nào được lên lịch cho hôm nay 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "Không tìm thấy kết quả nào 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "Đang diễn ra" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "Mở bàn phím số" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "Mở ứng dụng điện thoại" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "Xuất đi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "IP máy chủ PBX" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" +"Địa chỉ PBX hoặc Websocket bị thiếu. Vui lòng kiểm tra cài đặt của bạn." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "Điện thoại" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "Số điện thoại" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "Điện thoại:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "Vui lòng chấp nhận việc sử dụng micrô." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" +"Vui lòng thử lại sau. Nếu sự cố vẫn tiếp diễn, bạn có thể yêu cầu quản trị " +"viên kiểm tra cấu hình." + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "Sản xuất" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "Gần đây" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "Đăng ký bị từ chối: %(statusCode)s %(reasonPhrase)s." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "Từ chối cuộc gọi đến" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "Bị từ chối" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "Đã từ chối cuộc gọi từ %(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "Đã từ chối cuộc gọi tới %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "Bạn có nhớ không?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "Bỏ khỏi danh sách cuộc gọi đợi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "Người phụ trách" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "Đang đổ chuông..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "Lên lịch & thực hiện cuộc gọi từ cơ sở dữ liệu của bạn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "Lịch làm việc" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "Tìm kiếm" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "Chọn phương thức gọi điện" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "Gửi email" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "Nên tự động từ chối cuộc gọi đến" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "Nên gọi từ một thiết bị khác" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" +"Không thể thêm một số tập dữ liệu vào danh sách cuộc gọi chờ vì chúng chưa " +"có số điện thoại: %(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "Ngày bắt đầu" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "Trạng thái" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "Hãy cho chúng tôi biết cách thực hiện cuộc gọi:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "Đã chấm dứt" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "Địa chỉ IP của Máy chủ PBX của bạn" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL của WebSocket của bạn" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "Đã mất kết nối WebSocket và không thể thiết lập lại." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" +"Lỗi có thể xuất phát từ tầng giao vận. Vui lòng yêu cầu quản trị viên xác " +"minh URL máy chủ websocket trong Cài đặt chung. Nếu sự cố vẫn tiếp diễn, thì" +" có thể máy chủ đã gặp vấn đề." + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "Tên của hoạt động liên quan đến cuộc gọi điện thoại này, nếu có." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"Số không chính xác, thông tin đăng nhập của người dùng có thể bị sai hoặc không thể thực hiện kết nối. Vui lòng kiểm tra cấu hình của bạn.\n" +"(Lý do nhận được:%(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "Mật khẩu sẽ được sử dụng để đăng ký với máy chủ PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "Người bạn cố gắng liên hệ hiện không có mặt." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"Máy chủ không thể xác minh bạn. Vui lòng yêu cầu quản trị viên xác thực rằng" +" bạn đang truy cập đúng máy chủ (IP máy chủ PBX trong Cài đặt chung) và " +"thông tin đăng nhập trong tùy chọn người dùng của bạn là chính xác." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" +"Không thể khởi động user agent. URL máy chủ websocket có thể không chính " +"xác. Vui lòng yêu cầu quản trị viên kiểm tra URL máy chủ websocket trong Cài" +" đặt chung." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" +"Tên người dùng (thường là số máy lẻ) sẽ được sử dụng để đăng ký với máy chủ " +"PBX." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "Đã mất kết nối websocket với máy chủ. Hãy thử kết nối lại..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" +"Vẫn còn một cuộc gọi đang diễn ra, bạn có chắc chắn muốn rời khỏi trang này " +"không?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "Điều chuyển" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "Điều chuyển tới" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "Mở ứng dụng điện thoại" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "Bỏ tắt tiếng" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "Người dùng" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "Cài đặt người dùng" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "Sử dụng VoIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "Sử dụng tính năng điện thoại của thiết bị" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "Hỗ trợ danh sách chờ VOIP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "Cấu hình VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "Môi trưởng VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "Mã bí mật VoIP" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "Tên người dùng/số máy lẻ VoIP" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip/Cuộc gọi" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Mã bí mật Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Tên người dùng Voip" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "Tôi đồng ý." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" +"Trình duyệt của bạn không hỗ trợ một số tính năng cần thiết để VoIP có thể " +"hoạt động. Vui lòng thử cập nhật trình duyệt hoặc sử dụng một trình duyệt " +"khác." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" +"Không có lịch sử cuộc gọi! Hãy gọi ngay để lịch sử hiển thị tại đây. 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" +"Thông tin đăng nhập của bạn được cài đặt chưa chính xác. Vui lòng liên hệ " +"với quản trị viên." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "dưới một giây" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "điện thoại" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip" diff --git a/voip/i18n/voip.pot b/voip/i18n/voip.pot new file mode 100644 index 0000000..4ebe53e --- /dev/null +++ b/voip/i18n/voip.pot @@ -0,0 +1,1111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2024-08-13 10:41+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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "" diff --git a/voip/i18n/zh_CN.po b/voip/i18n/zh_CN.po new file mode 100644 index 0000000..07077c8 --- /dev/null +++ b/voip/i18n/zh_CN.po @@ -0,0 +1,1137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023 +# 湘子 南 <1360857908@qq.com>, 2024 +# Chloe Wang, 2024 +# Wil Odoo, 2024 +# Jeffery CHEN , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Jeffery CHEN , 2024\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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s 分 %(seconds)s 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s 分钟" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s 未接来电" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1分钟" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1个未接电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2分钟" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2个未接电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "在尝试访问录音设备时发生了硬件错误。请确保您的驱动程序是最新的,然后再试一次。" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "使用网络电话应用程序处理的电话呼叫" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "中止" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "呼叫 %(phone_number)s 中止" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "活动" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "活动名称" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "添加到呼叫队列" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"录音设备(%(errorName)s)发生错误:\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"用户代理实例化过程中发生错误:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"尝试邀请以下号码时发生错误:%(phoneNumber)s\n" +"\n" +"错误:%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "您确定要删除此活动吗?它将永远丢失,而丢失的时间是相当长的😔。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "提问" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "退格键" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "电话" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "来自 %(correspondent)s 的呼叫" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "来自 %(phone_number)s 的呼叫" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "来自其他设备的呼叫" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "呼叫被拒绝 (原因:“%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "呼叫 %(correspondent)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "呼叫 %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "连接中" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "拨打 %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "取消" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "取消活动" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "无法访问录音设备。如果您拒绝访问麦克风,请允许后再试一次。否则,请确保本网站通过 HTTPS 运行,且您的浏览器未设置为拒绝访问媒体设备。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "更改输入设备" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "选择设备:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"在使用移动端应用程序时,选择用于拨打电话的方法。\n" +" • VoIP:始终使用 ERP 软电话\n" +" • 设备的电话:总是使用设备的电话\n" +" • 询问:总是询问是否必须使用软电话或设备的电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "关闭" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "关闭 Numpad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "关闭软电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "关闭细节" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "配置设置" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "确认" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "正在连接..." + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "联系人" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "联系人" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "带有电话号码的联系人将显示在此处。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "创建日期" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "客户" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "演示" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "设备的电话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "方向" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "文档" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "编辑" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "结束通话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "结束日期" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "输入号码或名称" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "输入数字..." + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "外部设备号码" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "外部设备号码" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"加载 SIP.js 库失败:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "挂断电话,但将电话留在队列中" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "稍等!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "如何在移动端拨打电话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "如何在移动端拨打电话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "ID" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "如果启用,来电将在Odoo中被自动拒绝。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"如果启用,在 ERP 中调拨打电话将把电话转到 \"外部设备号码\"。使用该选项在 ERP 中拨打电话,但从另一个设备--例如你的桌面电话--处理它." + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "如果 “从另一设备拨打电话 ”选项被启用,在 ERP 中拨打的电话将被转接到这个电话号码." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "正在呼叫:%(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "进货" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "来自..." + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "输入设备选择" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "在呼叫队列" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "最后出现的电话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "最后更新人" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "上次更新日期" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "完成" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "没打中,抱歉。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "错过了" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "来自 %(phone_number)s 的未接来电" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "手机" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "手机:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "静音" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "下一活动" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "没有可用的录音设备。该应用程序需要一个麦克风才能使用。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "今天没有安排通话 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "没有搜索结果 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "持续" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "打开 Numpad" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "开放式软电话" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "发信" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX服务器IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX或Websocket地址丢失。请检查您的设置。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "电话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "电话号码" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "电话:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "请同意使用麦克风。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "请稍后再试。如果问题仍然存在,您可能要请管理员检查一下配置。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "生产" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "最近" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "注册被拒绝:%(statusCode)s%(reasonPhrase)s。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "拒绝来电" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "已拒绝" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "拒接来自 %(phone_number)s 的呼叫" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "拒绝调用 %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "记得吗?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "从呼叫队列中移除" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "负责人" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "铃声..." + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "计划并从数据库中拨打电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "安排活动" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "搜索" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "选择呼叫方法" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "发送电子邮件" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "应自动拒绝来电" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "应从其他设备拨打电话" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "某些文档无法添加到呼叫队列,因为它们没有设置电话号码:%(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "开始日期" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "状态" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "告诉我们如何拨打电话:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "终止" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "您的PBX服务器的IP地址" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "你的WebSocket的网址" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "WebSocket 连接丢失,无法重新建立。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "该错误可能来自传输层。请让管理员验证 \"常规设置 \"中的websocket服务器URL。如果问题持续存在,这可能是服务器的问题。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "与此电话有关的活动名称(如果有)。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"号码不正确、用户凭证可能有误或无法连接。请检查您的配置。\n" +"(收到的原因:%(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "用于向 PBX 服务器注册的密码。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "你试图联系的人目前不在。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "服务器无法对您进行身份验证。 请让管理员验证您正在访问正确的服务器(常规设置中的PBX服务器IP)以及您的用户偏好中的凭据是否正确。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "用户代理无法启动。websocket 服务器 URL 可能不正确。请让管理员检查常规设置中的 websocket 服务器 URL。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "将用于向PBX服务器注册的用户名 (通常是分机号)。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "与服务器的 websocket 连接已丢失。尝试重新建立连接⋯" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "仍在通话中,您确定要离开页面吗?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "转账" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "转移至" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "展开软电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "频道" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "用户" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "用户设置" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "使用网络电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "使用设备的电话" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VOIP队列支持" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP配置" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP 环境" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP密钥" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP用户名 / 分机号" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "网络电话/通话" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip 密钥" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip 用户名" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "是的,就这么做。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "您的浏览器不支持网络电话运行所需的某些功能。请尝试更新浏览器或使用其他浏览器。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "您的通话记录是空的!现在拨打电话,并在此列出 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "您的登录信息设置不正确。请联系您的管理员。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "不到一秒钟" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "电话" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "语音电话" diff --git a/voip/i18n/zh_TW.po b/voip/i18n/zh_TW.po new file mode 100644 index 0000000..2b97003 --- /dev/null +++ b/voip/i18n/zh_TW.po @@ -0,0 +1,1137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip +# +# Translators: +# Tony Ng, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s min %(seconds)s sec" +msgstr "%(minutes)s 分 %(seconds)s 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(minutes)s minutes" +msgstr "%(minutes)s 分鐘" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "%(number)s missed calls" +msgstr "%(number)s 個未接來電" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "%(seconds)s seconds" +msgstr "%(seconds)s 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 minute" +msgstr "1 分鐘" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "1 missed call" +msgstr "1 個未接來電" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "1 second" +msgstr "1 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 minutes" +msgstr "2 分鐘" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "2 missed calls" +msgstr "2 個未接來電" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "2 seconds" +msgstr "2 秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"A hardware error has occurred while trying to access the audio recording " +"device. Please ensure that your drivers are up to date and try again." +msgstr "嘗試存取錄音裝置時,發生硬件錯誤。請確保驅動程式是最新的,然後再試。" + +#. module: voip +#: model:ir.model,name:voip.model_voip_call +msgid "A phone call handled using the VoIP application" +msgstr "使用 VoIP 網絡通話應用程式處理的電話通話" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__aborted +msgid "Aborted" +msgstr "已中止" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Aborted call to %(phone_number)s" +msgstr "已中止撥號至 %(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: model:ir.model,name:voip.model_mail_activity +#, python-format +msgid "Activity" +msgstr "活動" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__activity_name +msgid "Activity Name" +msgstr "活動名稱" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Add to Call Queue" +msgstr "加入至通話列隊" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occured involving the audio recording device (%(errorName)s):\n" +"%(errorMessage)s" +msgstr "" +"發生涉及錄音設備的錯誤(%(errorName)s):\n" +"%(errorMessage)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred during the instantiation of the User Agent:\n" +"\n" +"%(error)s" +msgstr "" +"使用者代理實例化期間,發生錯誤:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"An error occurred trying to invite the following number: %(phoneNumber)s\n" +"\n" +"Error: %(error)s" +msgstr "" +"嘗試邀請以下號碼時出錯:%(phoneNumber)s\n" +"\n" +"錯誤:%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "" +"Are you sure you want to delete this activity? It will be lost forever, " +"which is quite a long time 😔" +msgstr "確定要刪除此活動?它將會永遠消失⋯ 😔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__ask +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__ask +msgid "Ask" +msgstr "詢問" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Backspace" +msgstr "倒退鍵 Backspace" + +#. module: voip +#. odoo-javascript +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Call" +msgstr "語音通話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(correspondent)s" +msgstr "%(correspondent)s 撥入通話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call from %(phone_number)s" +msgstr "通話要求,來電者:%(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_call_from_another_device +msgid "Call from another device" +msgstr "來自另一裝置的通話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Call rejected (reason: “%(reasonPhrase)s”)" +msgstr "通話被拒(原因:“%(reasonPhrase)s”)" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(correspondent)s" +msgstr "撥打至 %(correspondent)s 的通話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Call to %(phone_number)s" +msgstr "撥號至 %(phone_number)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__calling +msgid "Calling" +msgstr "正在撥打" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Calling %(phone number)s" +msgstr "正在撥號至 %(phone number)s" + +#. module: voip +#: model:ir.actions.act_window,name:voip.voip_call_view +#: model_terms:ir.ui.view,arch_db:voip.voip_call_tree_view +msgid "Calls" +msgstr "通話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Cancel" +msgstr "取消" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "Cancel the activity" +msgstr "取消活動" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Cannot access audio recording device. If you have denied access to your " +"microphone, please allow it and try again. Otherwise, make sure that this " +"website is running over HTTPS and that your browser is not set to deny " +"access to media devices." +msgstr "" +"未能存取錄音設備。如果你拒絕存取麥克風,請允許存取然後再試。否則,請確保網站透過 HTTPS 運作,以及你的瀏覽器並非設為拒絕存取媒體裝置。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Change input device" +msgstr "更改輸入裝置" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Choose a device:" +msgstr "選擇裝置:" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__how_to_call_on_mobile +msgid "" +"Choose the method to be used to place a call when using the mobile application:\n" +" • VoIP: Always use the Odoo softphone\n" +" • Device's phone: Always use the device's phone\n" +" • Ask: Always ask whether the softphone or the device's phone must be used\n" +" " +msgstr "" +"選擇流動應用程式撥打電話的方法:\n" +" • VoIP:每次都使用 Odoo 的電話軟件(VoIP 網絡通話)\n" +" • 裝置的電話:每次都使用裝置的電話\n" +" • 詢問:每次詢問是使用電話軟件還是裝置電話\n" +" " + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Close" +msgstr "關閉" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Close Numpad" +msgstr "關閉撥號鍵盤" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Close Softphone" +msgstr "關閉軟件電話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Close details" +msgstr "關閉詳情" + +#. module: voip +#: model:ir.model,name:voip.model_res_config_settings +msgid "Config Settings" +msgstr "配置設定" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#: code:addons/voip/static/src/mobile/devise_selection_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "確認" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Connecting…" +msgstr "連接中⋯" + +#. module: voip +#: model:ir.model,name:voip.model_res_partner +#: model:ir.model.fields,field_description:voip.field_voip_call__partner_id +msgid "Contact" +msgstr "聯絡人" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Contacts" +msgstr "聯絡人" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#, python-format +msgid "Contacts with a phone number will be shown here." +msgstr "此處將顯示有電話號碼的聯絡人。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_uid +msgid "Created by" +msgstr "建立人員" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__create_date +msgid "Created on" +msgstr "建立於" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Customer" +msgstr "客戶" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__demo +msgid "Demo" +msgstr "範例" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__phone +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__phone +msgid "Device's phone" +msgstr "裝置的電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__direction +msgid "Direction" +msgstr "方向" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Documents" +msgstr "文件" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Edit" +msgstr "編輯" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "End Call" +msgstr "結束通話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__end_date +msgid "End Date" +msgstr "結束日期" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Enter number or name" +msgstr "輸入號碼或姓名" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/numpad.xml:0 +#, python-format +msgid "Enter the number…" +msgstr "輸入號碼⋯" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__external_device_number +msgid "External Device Number" +msgstr "外部裝置號碼" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__external_device_number +msgid "External device number" +msgstr "外部裝置號碼" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Failed to load the SIP.js library:\n" +"\n" +"%(error)s" +msgstr "" +"載入 SIP.js 程式庫失敗:\n" +"\n" +"%(error)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Hang up but keep call in queue" +msgstr "掛線但保留通話在列隊中" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Hold on!" +msgstr "請稍等,不要掛線!" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__how_to_call_on_mobile +msgid "How To Call On Mobile" +msgstr "如何在流動裝置撥打電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__how_to_call_on_mobile +msgid "How to place calls on mobile" +msgstr "如何在流動裝置撥打電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__id +msgid "ID" +msgstr "識別號" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "If enabled, incoming calls will be automatically declined in Odoo." +msgstr "如果啟用,Odoo 會自動拒絕來電。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__should_call_from_another_device +msgid "" +"If enabled, placing a call in Odoo will transfer the call to the \"External " +"device number\". Use this option to place the call in Odoo but handle it " +"from another device - e.g. your desk phone." +msgstr "" +"如果啟用,在 Odoo 中撥打電話會將通話轉駁至「外部裝置號碼」。使用此選項可在 Odoo 中撥打電話,但從其他裝置處理該次通話,例如你的桌上電話。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__external_device_number +msgid "" +"If the \"Call from another device\" option is enabled, calls placed in Odoo " +"will be transfered to this phone number." +msgstr "若已啟用「從其他裝置撥打」選項,在 Odoo 中撥打的電話將會轉駁至此電話號碼。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "In call for: %(minutes)s:%(seconds)s" +msgstr "通話持續時間:%(minutes)s:%(seconds)s" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__incoming +msgid "Incoming" +msgstr "入庫" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/call_invitation.xml:0 +#, python-format +msgid "Incoming call from…" +msgstr "撥入通話來自⋯" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/device_selection_dialog.js:0 +#, python-format +msgid "Input device selection" +msgstr "輸入裝置選擇" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_partner__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_res_users__has_call_in_queue +#: model:ir.model.fields,field_description:voip.field_voip_queue_mixin__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "是在通話列隊內" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__last_seen_phone_call +msgid "Last Seen Phone Call" +msgstr "上次電話通話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_uid +msgid "Last Updated by" +msgstr "最後更新者" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__write_date +msgid "Last Updated on" +msgstr "最後更新於" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Mark as done" +msgstr "標記為完成" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Missclicked, sorry." +msgstr "按錯了,抱歉。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__missed +msgid "Missed" +msgstr "缺席" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Missed call from %(phone_number)s" +msgstr "未接來電,來電者:%(phone_number)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__mobile +msgid "Mobile" +msgstr "行動電話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Mobile:" +msgstr "手提:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Mute" +msgstr "靜音" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Next Activities" +msgstr "下一步活動" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"No audio recording device available. The application requires a microphone " +"in order to be used." +msgstr "沒有可用的錄音設備。應用程式需要有麥克風才可使用。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#, python-format +msgid "No calls scheduled for today 😎" +msgstr "今天沒有安排通話 😎" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.xml:0 +#: code:addons/voip/static/src/softphone/contacts_tab.xml:0 +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "No search results 💔" +msgstr "沒有搜尋結果 💔" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__ongoing +msgid "Ongoing" +msgstr "進行中" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Open Numpad" +msgstr "開啟撥號鍵盤" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Open Softphone" +msgstr "開啟軟件電話" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__direction__outgoing +msgid "Outgoing" +msgstr "出向" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__pbx_ip +msgid "PBX Server IP" +msgstr "PBX 伺服器 IP" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "PBX or Websocket address is missing. Please check your settings." +msgstr "PBX 或 Websocket 位址缺漏。請檢查設定。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_mail_activity__phone +msgid "Phone" +msgstr "電話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__phone_number +msgid "Phone Number" +msgstr "電話號碼" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/activity/activity_patch.xml:0 +#, python-format +msgid "Phone:" +msgstr "電話:" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "Please accept the use of the microphone." +msgstr "請同意使用麥克風。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"Please try again later. If the problem persists, you may want to ask an " +"administrator to check the configuration." +msgstr "請稍後再試。如果問題持續,你可能需要請管理員檢查配置。" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__res_config_settings__mode__prod +msgid "Production" +msgstr "生產" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#, python-format +msgid "Recent" +msgstr "最近" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "Registration rejected: %(statusCode)s %(reasonPhrase)s." +msgstr "登記被拒:%(statusCode)s %(reasonPhrase)s。" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__should_auto_reject_incoming_calls +msgid "Reject incoming calls" +msgstr "拒絕來電" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__rejected +msgid "Rejected" +msgstr "已拒絕" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call from %(phone_number)s" +msgstr "已拒絕通話請求,來電者:%(phone_number)s" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_call.py:0 +#, python-format +msgid "Rejected call to %(phone_number)s" +msgstr "已拒絕撥號至%(phone_number)s" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Remember?" +msgstr "記得嗎?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/call_queue_switch.js:0 +#, python-format +msgid "Remove from Call Queue" +msgstr "從通話列隊中移除" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__user_id +msgid "Responsible" +msgstr "負責人" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Ringing…" +msgstr "響鈴中⋯" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.res_config_settings_view_form +msgid "Schedule & make calls from your database" +msgstr "在資料庫中安排及撥打電話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Schedule Activity" +msgstr "安排活動" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.xml:0 +#, python-format +msgid "Search" +msgstr "搜尋" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.js:0 +#, python-format +msgid "Select a call method" +msgstr "選擇通話方法" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#, python-format +msgid "Send e-mail" +msgstr "傳送電郵" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_auto_reject_incoming_calls +msgid "Should Auto Reject Incoming Calls" +msgstr "應自動拒絕來電" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__should_call_from_another_device +msgid "Should Call From Another Device" +msgstr "應從其他裝置撥出電話" + +#. module: voip +#. odoo-python +#: code:addons/voip/models/voip_queue_mixin.py:0 +#, python-format +msgid "" +"Some documents cannot be added to the call queue as they do not have a phone" +" number set: %(record_names)s" +msgstr "部份文件未能加入至通話列隊,因為它們未有設定電話號碼:%(record_names)s" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__start_date +msgid "Start Date" +msgstr "開始日期" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_voip_call__state +msgid "State" +msgstr "狀態" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Tell us how to make the call:" +msgstr "告訴我們如何撥打電話:" + +#. module: voip +#: model:ir.model.fields.selection,name:voip.selection__voip_call__state__terminated +msgid "Terminated" +msgstr "已被終止" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__pbx_ip +msgid "The IP address of your PBX Server" +msgstr "你的 PBX 伺服器的 IP 位址" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "你的 WebSocket 的網址" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The WebSocket connection was lost and couldn't be reestablished." +msgstr "WebSocket 連線已斷線,而且無法重新建立。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The error may come from the transport layer. Please have an administrator " +"verify the websocket server URL in the General Settings. If the problem " +"persists, this is probably an issue with the server." +msgstr "此錯誤可能來自傳輸層。請要求管理員在一般設定中,驗證 websocket 伺服器網址。如果問題持續,可能是伺服器有問題。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_voip_call__activity_name +msgid "The name of the activity related to this phone call, if any." +msgstr "關聯至此電話通話的活動名稱(如果有)。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n" +"(Reason received: %(reasonPhrase)s)" +msgstr "" +"號碼不正確、使用者登入憑證可能有錯誤,或無法建立連線。請檢查配置。\n" +"(收到的原因:%(reasonPhrase)s)" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_secret +msgid "The password that will be used to register with the PBX server." +msgstr "將用於在 PBX 伺服器註冊的密碼。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "The person you try to contact is currently unavailable." +msgstr "你嘗試聯絡的人目前未可聯絡上。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/registerer.js:0 +#, python-format +msgid "" +"The server failed to authenticate you. Please have an administrator verify " +"that you are reaching the right server (PBX server IP in the General " +"Settings) and that the credentials in your user preferences are correct." +msgstr "" +"伺服器未能驗證你的身份。請要求管理員驗證你正嘗試存取的伺服器正確(一般設定中的 PBX 伺服器 IP 位址),以及你的使用者偏好設定中的登入資訊正確。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The user agent could not be started. The websocket server URL may be " +"incorrect. Please have an administrator check the websocket server URL in " +"the General Settings." +msgstr "未能啟動使用者代理。可能是 websocket 伺服器網址不正確。請要求管理員在一般設定中,檢查 websocket 伺服器網址。" + +#. module: voip +#: model:ir.model.fields,help:voip.field_res_users_settings__voip_username +msgid "" +"The username (typically the extension number) that will be used to register " +"with the PBX server." +msgstr "將用作向 PBX 伺服器註冊的使用者名稱(通常是分機號碼)。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"The websocket connection to the server has been lost. Attempting to " +"reestablish the connection…" +msgstr "與伺服器的 websocket 連線已斷線。正在嘗試重新建立連線⋯" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/voip_service.js:0 +#, python-format +msgid "" +"There is still a call in progress, are you sure you want to leave the page?" +msgstr "仍有通話正在進行,確定要離開頁面?" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.xml:0 +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer" +msgstr "轉移" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/transfer_popover.xml:0 +#, python-format +msgid "Transfer to" +msgstr "調撥至" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/web/voip_systray_item.js:0 +#, python-format +msgid "Unfold Softphone" +msgstr "展開軟件電話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/correspondence_details.js:0 +#, python-format +msgid "Unmute" +msgstr "解除靜音" + +#. module: voip +#: model:ir.model,name:voip.model_res_users +msgid "User" +msgstr "使用者" + +#. module: voip +#: model:ir.model,name:voip.model_res_users_settings +msgid "User Settings" +msgstr "使用者設定" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using VoIP" +msgstr "使用 VoIP 網絡通話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "Using device's phone" +msgstr "使用裝置的電話" + +#. module: voip +#: model:ir.model,name:voip.model_voip_queue_mixin +msgid "VOIP Queue support" +msgstr "VoIP 列隊支援" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/softphone.js:0 +#: model:ir.model.fields.selection,name:voip.selection__res_users__how_to_call_on_mobile__voip +#: model:ir.model.fields.selection,name:voip.selection__res_users_settings__how_to_call_on_mobile__voip +#: model_terms:ir.ui.view,arch_db:voip.res_user_form +#: model_terms:ir.ui.view,arch_db:voip.res_users_view_form_preferences +#, python-format +msgid "VoIP" +msgstr "VoIP 網絡電話" + +#. module: voip +#: model_terms:ir.ui.view,arch_db:voip.voip_res_users_settings_view_form +msgid "VoIP Configuration" +msgstr "VoIP 配置" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__mode +msgid "VoIP Environment" +msgstr "VoIP 環境" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_secret +msgid "VoIP secret" +msgstr "VoIP 秘密" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users_settings__voip_username +msgid "VoIP username / Extension number" +msgstr "VoIP 使用者名稱 / 分機號碼" + +#. module: voip +#: model:ir.ui.menu,name:voip.menu_voip_call_view +msgid "Voip / Calls" +msgstr "Voip / 通話" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_secret +msgid "Voip Secret" +msgstr "Voip 秘密" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_users__voip_username +msgid "Voip Username" +msgstr "Voip 使用者名稱" + +#. module: voip +#: model:ir.model.fields,field_description:voip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/activities_tab.js:0 +#, python-format +msgid "Yes, do it." +msgstr "好,就這樣做。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your browser does not support some of the features required for VoIP to " +"work. Please try updating your browser or using a different one." +msgstr "你的瀏覽器不支援 VoIP 網絡通話運作所需的部份功能。請嘗試更新你的瀏覽器,或使用其他瀏覽器。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/softphone/recent_tab.xml:0 +#, python-format +msgid "Your call history is empty! Make a call now and have it listed here 💡" +msgstr "通話記錄仍是空白。立即撥打電話吧,資料將在此處列出 💡" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/user_agent_service.js:0 +#, python-format +msgid "" +"Your login details are not set correctly. Please contact your administrator." +msgstr "你的登入詳情未正確設定。請聯絡你的管理員。" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/core/call_model.js:0 +#, python-format +msgid "less than a second" +msgstr "少於一秒" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "phone" +msgstr "行動電話" + +#. module: voip +#. odoo-javascript +#: code:addons/voip/static/src/mobile/call_method_selection_dialog.xml:0 +#, python-format +msgid "voip" +msgstr "voip 網絡通話" diff --git a/voip/models/__init__.py b/voip/models/__init__.py new file mode 100644 index 0000000..3101033 --- /dev/null +++ b/voip/models/__init__.py @@ -0,0 +1,9 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import voip_queue_mixin # keep this before res_partner import +from . import mail_activity +from . import res_config_settings +from . import res_partner +from . import res_users +from . import res_users_settings +from . import voip_call diff --git a/voip/models/mail_activity.py b/voip/models/mail_activity.py new file mode 100644 index 0000000..0b907a2 --- /dev/null +++ b/voip/models/mail_activity.py @@ -0,0 +1,134 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from collections import defaultdict +from odoo import api, fields, models, tools + + +class MailActivity(models.Model): + _inherit = "mail.activity" + + phone = fields.Char("Phone", compute="_compute_phone_numbers", readonly=False, store=True) + mobile = fields.Char("Mobile", compute="_compute_phone_numbers", readonly=False, store=True) + + @api.depends("res_model", "res_id", "activity_type_id") + def _compute_phone_numbers(self): + call_activities = self.filtered( + lambda activity: activity.id + and activity.res_model + and activity.res_id + and activity.activity_category == "phonecall" + ) + (self - call_activities).phone = False + (self - call_activities).mobile = False + phone_numbers_by_activity = call_activities._get_phone_numbers_by_activity() + for activity in call_activities: + activity.mobile = phone_numbers_by_activity[activity]["mobile"] + activity.phone = phone_numbers_by_activity[activity]["phone"] + + @api.model_create_multi + def create(self, vals_list): + activities = super().create(vals_list) + call_activities = activities.filtered( + lambda activity: (activity.phone or activity.mobile) and activity.activity_category == "phonecall" + ) + notifications = [[user.partner_id, "refresh_call_activities", {}] for user in call_activities.user_id] + self.env["bus.bus"]._sendmany(notifications) + return activities + + def write(self, values): + if "date_deadline" in values and self.user_id: + self.env["bus.bus"]._sendmany( + [[partner, "refresh_call_activities", {}] for partner in self.user_id.partner_id] + ) + return super().write(values) + + @api.model + def get_today_call_activities(self): + """Retrieve the list of activities that: + * have the type “phonecall” + * have a phone number + * are overdue + * are assigned to the current user + * are in the current company + + The resulting list is intended for display in the “Next Activities” tab. + """ + overdue_call_activities_of_current_user = self.search( + [ + ("activity_type_id.category", "=", "phonecall"), + ("user_id", "=", self.env.uid), + ("date_deadline", "<=", fields.Date.today()), + "|", + ("mobile", "!=", False), + ("phone", "!=", False), + ] + ) + # ----- Tackling multi-company shenanigans 👺 ----- + record_ids_by_model_name = defaultdict(set) + for activity in overdue_call_activities_of_current_user: + record_ids_by_model_name[activity.res_model].add(activity.res_id) + allowed_record_ids_by_model_name = defaultdict(list) + for model_name, ids in record_ids_by_model_name.items(): + # calling search will filter out records that are irrelevant to the current company + allowed_record_ids_by_model_name[model_name] = self.env[model_name].search([("id", "in", list(ids))]).ids + return overdue_call_activities_of_current_user.filtered( + lambda activity: activity.res_id in allowed_record_ids_by_model_name[activity.res_model] + )._format_call_activities() + + def _action_done(self, feedback=False, attachment_ids=None): + """Extends _action_done to notify the user assigned to a phonecall + activity that it has been marked as done. This is useful to trigger the + refresh of the “Next Activities” tab. + """ + to_notify = self.filtered( + lambda activity: activity.activity_type_id.category == "phonecall" + ).user_id.partner_id + self.env["bus.bus"]._sendmany([[partner, "refresh_call_activities", {}] for partner in to_notify]) + return super()._action_done(feedback=feedback, attachment_ids=attachment_ids) + + def _format_call_activities(self): + """Serializes call activities for transmission to/use by the client side.""" + formatted_activities = [] + call_activities = self.filtered(lambda activity: activity.activity_type_id.category == "phonecall") + for model_name, activities in call_activities.grouped("res_model").items(): + model = self.env[model_name] + records = model.browse(activities.mapped("res_id")) + partners_by_records = records._mail_get_partners(introspect_fields=True) + partners = self.env["res.partner"].browse([p[:1].id for p in partners_by_records.values() if p]) + formatted_partners_by_record = partners.mail_partner_format() + for activity in activities: + activity_data = { + **activity.read(["id", "res_name", "phone", "mobile", "res_id", "res_model", "state", "date_deadline", "mail_template_ids"])[0], + "activity_category": activity.activity_type_id.category, + "modelName": activity.sudo().res_model_id.display_name, + "user_id": activity._read_format(["user_id"])[0]["user_id"], + } + partner = partners_by_records.get(activity.res_id)[:1] + if partner: + activity_data["partner"] = formatted_partners_by_record[partner] + formatted_activities.append(activity_data) + return formatted_activities + + def _get_phone_numbers_by_activity(self): + """Batch compute the phone numbers associated with the activities. + + :return dict: for each activity, a sub-dict containing: + * phone: phone number (obtained from the activity itself or from the related partner); + * mobile: mobile number (obtained from the activity itself or from the related partner). + """ + phone_numbers_by_activity = {} + data_by_model = self._classify_by_model() + for model, data in data_by_model.items(): + records = self.env[model].browse(data["record_ids"]) + for record, activity in zip(records, data["activities"]): + mobile = record.mobile if "mobile" in record else False + phone = record.phone if "phone" in record else False + if not mobile and not phone: + recipient = next( + iter(record._mail_get_partners(introspect_fields=True)[record.id]), + self.env["res.partner"], + ) + mobile = recipient.mobile + phone = recipient.phone + phone_numbers_by_activity[activity] = {"mobile": mobile, "phone": phone} + return phone_numbers_by_activity diff --git a/voip/models/res_config_settings.py b/voip/models/res_config_settings.py new file mode 100644 index 0000000..4716b21 --- /dev/null +++ b/voip/models/res_config_settings.py @@ -0,0 +1,23 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + wsServer = fields.Char( + "WebSocket", help="The URL of your WebSocket", default="ws://localhost", config_parameter="voip.wsServer" + ) + pbx_ip = fields.Char( + "PBX Server IP", help="The IP address of your PBX Server", default="localhost", config_parameter="voip.pbx_ip" + ) + mode = fields.Selection( + [ + ("demo", "Demo"), + ("prod", "Production"), + ], + string="VoIP Environment", + default="demo", + config_parameter="voip.mode", + required=True, + ) diff --git a/voip/models/res_partner.py b/voip/models/res_partner.py new file mode 100644 index 0000000..5a62448 --- /dev/null +++ b/voip/models/res_partner.py @@ -0,0 +1,31 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models +from odoo.osv import expression + + +class Contact(models.Model): + _name = "res.partner" + _inherit = ["res.partner", "voip.queue.mixin"] + + @api.model + def get_contacts(self, offset, limit, search_terms): + domain = ["|", ("phone", "!=", False), ("mobile", "!=", False)] + if search_terms: + search_fields = ["complete_name", "phone", "mobile", "email"] + search_domain = expression.OR([[(field, "ilike", search_terms)] for field in search_fields]) + domain = expression.AND([domain, search_domain]) + return self.search(domain, offset=offset, limit=limit)._format_contacts() + + def _format_contacts(self): + return [ + { + "id": contact.id, + "displayName": contact.display_name, + "email": contact.email, + "landlineNumber": contact.phone, + "mobileNumber": contact.mobile, + "name": contact.name, + } + for contact in self + ] diff --git a/voip/models/res_users.py b/voip/models/res_users.py new file mode 100644 index 0000000..b935205 --- /dev/null +++ b/voip/models/res_users.py @@ -0,0 +1,134 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, models, fields + + +# List of the VoIP-related fields that are configurable by the user using the +# `res.users` form view. Useful to override SELF_READABLE/WRITABLE_FIELDS. +VOIP_USER_CONFIGURATION_FIELDS = [ + "external_device_number", + "how_to_call_on_mobile", + "should_auto_reject_incoming_calls", + "should_call_from_another_device", + "voip_secret", + "voip_username", +] + + +class ResUsers(models.Model): + _inherit = "res.users" + + last_seen_phone_call = fields.Many2one("voip.call") + # -------------------------------------------------------------------------- + # VoIP User Configuration Fields + # -------------------------------------------------------------------------- + # These fields mirror those defined in `res.users.settings`. The reason they + # are not directly defined in here is that we want these fields to have + # different access rights than the rest of the fields of `res.users`. See + # their definition in `res.users.settings` for comprehensive documentation. + # -------------------------------------------------------------------------- + external_device_number = fields.Char( + compute="_compute_external_device_number", + inverse="_reflect_change_in_res_users_settings", + ) + how_to_call_on_mobile = fields.Selection( + [("ask", "Ask"), ("voip", "VoIP"), ("phone", "Device's phone")], + compute="_compute_how_to_call_on_mobile", + inverse="_reflect_change_in_res_users_settings", + ) + should_auto_reject_incoming_calls = fields.Boolean( + compute="_compute_should_auto_reject_incoming_calls", + inverse="_reflect_change_in_res_users_settings", + ) + should_call_from_another_device = fields.Boolean( + compute="_compute_should_call_from_another_device", + inverse="_reflect_change_in_res_users_settings", + ) + voip_secret = fields.Char( + compute="_compute_voip_secret", + inverse="_reflect_change_in_res_users_settings", + ) + voip_username = fields.Char( + compute="_compute_voip_username", + inverse="_reflect_change_in_res_users_settings", + ) + + @property + def SELF_READABLE_FIELDS(self): + return super().SELF_READABLE_FIELDS + VOIP_USER_CONFIGURATION_FIELDS + + @property + def SELF_WRITEABLE_FIELDS(self): + return super().SELF_WRITEABLE_FIELDS + VOIP_USER_CONFIGURATION_FIELDS + + @api.depends("res_users_settings_id.external_device_number") + def _compute_external_device_number(self): + for user in self: + user.external_device_number = user.res_users_settings_id.external_device_number + + @api.depends("res_users_settings_id.how_to_call_on_mobile") + def _compute_how_to_call_on_mobile(self): + for user in self: + user.how_to_call_on_mobile = user.res_users_settings_id.how_to_call_on_mobile + + @api.depends("res_users_settings_id.should_auto_reject_incoming_calls") + def _compute_should_auto_reject_incoming_calls(self): + for user in self: + user.should_auto_reject_incoming_calls = user.res_users_settings_id.should_auto_reject_incoming_calls + + @api.depends("res_users_settings_id.should_call_from_another_device") + def _compute_should_call_from_another_device(self): + for user in self: + user.should_call_from_another_device = user.res_users_settings_id.should_call_from_another_device + + @api.depends("res_users_settings_id.voip_secret") + def _compute_voip_secret(self): + for user in self: + user.voip_secret = user.res_users_settings_id.voip_secret + + @api.depends("res_users_settings_id.voip_username") + def _compute_voip_username(self): + for user in self: + user.voip_username = user.res_users_settings_id.voip_username + + @api.model + def reset_last_seen_phone_call(self): + domain = [("user_id", "=", self.env.user.id)] + last_call = self.env["voip.call"].search(domain, order="id desc", limit=1) + self.env.user.last_seen_phone_call = last_call.id + + def _init_messaging(self): + res = super()._init_messaging() + if not self.env.user._is_internal(): + return res + get_param = self.env["ir.config_parameter"].sudo().get_param + return { + **res, + "voipConfig": { + "mode": get_param("voip.mode", default="demo"), + "missedCalls": self.env["voip.call"]._get_number_of_missed_calls(), + "pbxAddress": get_param("voip.pbx_ip", default="localhost"), + "webSocketUrl": get_param("voip.wsServer", default="ws://localhost"), + }, + } + + def _reflect_change_in_res_users_settings(self): + """ + Updates the values of the VoIP User Configuration Fields in `res_users_settings_ids` to have the same values as + their related fields in `res.users`. If there is no `res.users.settings` record for the user, then the record is + created. + + This method is intended to be used as an inverse for VoIP Configuration Fields. + """ + for user in self: + settings = self.env["res.users.settings"]._find_or_create_for_user(user) + settings.update( + { + "external_device_number": user.external_device_number, + "how_to_call_on_mobile": user.how_to_call_on_mobile or settings.how_to_call_on_mobile, + "should_auto_reject_incoming_calls": user.should_auto_reject_incoming_calls, + "should_call_from_another_device": user.should_call_from_another_device, + "voip_secret": user.voip_secret, + "voip_username": user.voip_username, + } + ) diff --git a/voip/models/res_users_settings.py b/voip/models/res_users_settings.py new file mode 100644 index 0000000..5c4fad6 --- /dev/null +++ b/voip/models/res_users_settings.py @@ -0,0 +1,41 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ResUsersSettings(models.Model): + _inherit = "res.users.settings" + + # Credentials for authentication to the PBX server + voip_username = fields.Char( + "VoIP username / Extension number", + help="The username (typically the extension number) that will be used to register with the PBX server.", + ) + voip_secret = fields.Char("VoIP secret", help="The password that will be used to register with the PBX server.") + + should_call_from_another_device = fields.Boolean( + "Call from another device", + help="""If enabled, placing a call in Odoo will transfer the call to the "External device number". Use this option to place the call in Odoo but handle it from another device - e.g. your desk phone.""", + ) + external_device_number = fields.Char( + "External device number", + help="""If the "Call from another device" option is enabled, calls placed in Odoo will be transfered to this phone number.""", + ) + + should_auto_reject_incoming_calls = fields.Boolean( + "Reject incoming calls", + help="If enabled, incoming calls will be automatically declined in Odoo.", + ) + + # Mobile stuff + how_to_call_on_mobile = fields.Selection( + [("ask", "Ask"), ("voip", "VoIP"), ("phone", "Device's phone")], + default="ask", + string="How to place calls on mobile", + help="""Choose the method to be used to place a call when using the mobile application: + • VoIP: Always use the Odoo softphone + • Device's phone: Always use the device's phone + • Ask: Always ask whether the softphone or the device's phone must be used + """, + required=True, + ) diff --git a/voip/models/voip_call.py b/voip/models/voip_call.py new file mode 100644 index 0000000..e61dd8e --- /dev/null +++ b/voip/models/voip_call.py @@ -0,0 +1,168 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models, _ +from odoo.osv import expression + + +class VoipCall(models.Model): + _name = "voip.call" + _description = """A phone call handled using the VoIP application""" + + phone_number = fields.Char(required=True, readonly=True) + direction = fields.Selection( + [ + ("incoming", "Incoming"), + ("outgoing", "Outgoing"), + ], + default="outgoing", + readonly=True, + ) + state = fields.Selection( + [ + ("aborted", "Aborted"), + ("calling", "Calling"), + ("missed", "Missed"), + ("ongoing", "Ongoing"), + ("rejected", "Rejected"), + ("terminated", "Terminated"), + ], + default="calling", + index=True, + ) + end_date = fields.Datetime() + start_date = fields.Datetime() + # Since activities are deleted from the database once marked as done, the + # activity name is saved here in order to be preserved. + activity_name = fields.Char(help="The name of the activity related to this phone call, if any.") + partner_id = fields.Many2one("res.partner", "Contact", index=True) + user_id = fields.Many2one("res.users", "Responsible", default=lambda self: self.env.uid, index=True) + + @api.depends("state", "partner_id.name") + def _compute_display_name(self): + def get_name(call): + if call.activity_name: + return call.activity_name + if call.state == "aborted": + return _("Aborted call to %(phone_number)s", phone_number=call.phone_number) + if call.state == "missed": + return _("Missed call from %(phone_number)s", phone_number=call.phone_number) + if call.state == "rejected": + if call.direction == "incoming": + return _("Rejected call from %(phone_number)s", phone_number=call.phone_number) + return _("Rejected call to %(phone_number)s", phone_number=call.phone_number) + if call.partner_id: + if call.direction == "incoming": + return _("Call from %(correspondent)s", correspondent=call.partner_id.name) + return _("Call to %(correspondent)s", correspondent=call.partner_id.name) + if call.direction == "incoming": + return _("Call from %(phone_number)s", phone_number=call.phone_number) + return _("Call to %(phone_number)s", phone_number=call.phone_number) + + for call in self: + call.display_name = get_name(call) + + @api.model + def create_and_format(self, res_id: int = None, res_model: str = None, **kwargs) -> list: + """Creates a call from the provided values and returns it formatted for + use in JavaScript. If a record is provided via its id and model, + introspects it for a recipient. + """ + if res_id and res_model: + related_record = self.env[res_model].browse(res_id) + kwargs["partner_id"] = next( + iter(related_record._mail_get_partners(introspect_fields=True)[related_record.id]), + self.env["res.partner"], + ).id + return self.create(kwargs)._format_calls() + + @api.model + def get_recent_phone_calls(self, search_terms: str = None, offset: int = 0, limit: int = None) -> list: + domain = [("user_id", "=", self.env.uid)] + if search_terms: + search_fields = ["phone_number", "partner_id.name", "activity_name"] + search_domain = expression.OR([[(field, "ilike", search_terms)] for field in search_fields]) + domain += search_domain + return self.search(domain, offset=offset, limit=limit, order="create_date DESC")._format_calls() + + @api.model + def _get_number_of_missed_calls(self) -> int: + domain = [("user_id", "=", self.env.uid), ("state", "=", "missed")] + last_seen_phone_call = self.env.user.last_seen_phone_call + if last_seen_phone_call: + domain += [("id", ">", last_seen_phone_call.id)] + return self.search_count(domain) + + def abort_call(self) -> list: + self.state = "aborted" + return self._format_calls() + + def start_call(self) -> list: + self.start_date = fields.Datetime.now() + self.state = "ongoing" + return self._format_calls() + + def end_call(self, activity_name: str = None) -> list: + self.end_date = fields.Datetime.now() + self.state = "terminated" + if activity_name: + self.activity_name = activity_name + return self._format_calls() + + def reject_call(self) -> list: + self.state = "rejected" + return self._format_calls() + + def miss_call(self) -> list: + self.state = "missed" + return self._format_calls() + + def get_contact_info(self): + self.ensure_one() + number = self.phone_number + # Internal extensions could theoretically be one or two digits long. + # phone_mobile_search doesn't handle numbers that short: do a regular + # search for the exact match: + if len(number) < 3: + domain = ["|", ("phone", "=", number), ("mobile", "=", number)] + # 00 and + both denote an international prefix. phone_mobile_search will + # match both indifferently. + elif number.startswith(("+", "00")): + domain = [("phone_mobile_search", "=", number)] + # USA: Calls between different area codes are usually prefixed with 1. + # Conveniently, the country code for the USA also happens to be 1, so we + # just need to add the + symbol to format it like an international call + # and match what's supposed to be stored in the database. + elif number.startswith("1"): + domain = [("phone_mobile_search", "=", f"+{number}")] + # 0 is the national prefix recommended by the ITU-T. This means that a + # number starting with 0 will identify a national call in most + # countries. We don't know the country code, so we can't convert the + # number to the international format: Replace the prefix with a + # wildcard. + elif number.startswith("0"): + domain = [("phone_mobile_search", "=like", f"%{number[1:]}")] + # The phone number doesn't match any expected format. Could it be some + # kind of internal extension? Try looking for an exact match: + else: + domain = [("phone_mobile_search", "=", number)] + partner = self.env["res.partner"].search(domain, limit=1) + if not partner: + return False + self.partner_id = partner + return self.partner_id._format_contacts()[0] + + def _format_calls(self) -> list: + return [ + { + "id": call.id, + "creationDate": call.create_date, + "direction": call.direction, + "displayName": call.display_name, + "endDate": call.end_date, + "partner": call.partner_id._format_contacts()[0] if call.partner_id else False, + "phoneNumber": call.phone_number, + "startDate": call.start_date, + "state": call.state, + } + for call in self + ] diff --git a/voip/models/voip_queue_mixin.py b/voip/models/voip_queue_mixin.py new file mode 100644 index 0000000..ff9e43b --- /dev/null +++ b/voip/models/voip_queue_mixin.py @@ -0,0 +1,121 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import logging + +from odoo import api, fields, models +from odoo.exceptions import UserError +from odoo.tools.translate import _ + +_logger = logging.getLogger(__name__) + + +class VoipQueueMixin(models.AbstractModel): + _name = "voip.queue.mixin" + _description = "VOIP Queue support" + + has_call_in_queue = fields.Boolean("Is in the Call Queue", compute="_compute_has_call_in_queue") + + def _compute_has_call_in_queue(self): + activity_count_by_res_id = dict( + self.env["mail.activity"]._read_group( + [ + ("res_id", "in", self.ids), + ("res_model", "=", self._name), + ("user_id", "=", self.env.uid), + ("activity_type_id.category", "=", "phonecall"), + ("date_deadline", "<=", fields.Date.today()), + "|", + ("phone", "!=", False), + ("mobile", "!=", False), + ], + ["res_id"], + ["__count"], + ) + ) + for record in self: + record.has_call_in_queue = activity_count_by_res_id.get(record.id, 0) > 0 + + def create_call_activity(self): + if not self: + return self.env["mail.activity"] + # Ensure that a phonecall activity type exists beforehand, otherwise + # create one. This is important because we rely on this type to retrieve + # the activities to be displayed in the Next Activities tab. + phonecall_activity_type_id = self.env["ir.model.data"]._xmlid_to_res_id( + "mail.mail_activity_data_call", raise_if_not_found=False + ) + if not phonecall_activity_type_id: + phonecall_activity_type_id = ( + self.env["mail.activity.type"] + .search( + [ + "|", + ("res_model", "=", False), + ("res_model", "=", self._name), + ("category", "=", "phonecall"), + ], + limit=1, + ) + .id + ) + if not phonecall_activity_type_id: + phonecall_activity_type_id = ( + self.env["mail.activity.type"] + .sudo() + .create( + { + "category": "phonecall", + "delay_count": 2, + "icon": "fa-phone", + "name": _("Call"), + "sequence": 999, + } + ) + .id + ) + date_deadline = fields.Date.today(self) + res_model_id = self.env["ir.model"]._get_id(self._name) + activities = self.env["mail.activity"].create( + [ + { + "activity_type_id": phonecall_activity_type_id, + "date_deadline": date_deadline, + "res_id": record.id, + "res_model_id": res_model_id, + "user_id": self.env.uid, + } + for record in self + ] + ) + failed_activities = activities.filtered(lambda activity: not activity.mobile and not activity.phone) + if failed_activities: + failed_records = self.browse(failed_activities.mapped("res_id")) + raise UserError( + _( + "Some documents cannot be added to the call queue as they do not have a phone number set: %(record_names)s", + record_names=_(", ").join(failed_records.mapped("display_name")), + ) + ) + return activities + + @api.model + def delete_call_activity(self, res_id): + related_activities = self.env["mail.activity"].search( + [ + ("res_id", "=", res_id), + ("res_model", "=", self._name), + ("user_id", "=", self.env.uid), + ("activity_type_id.category", "=", "phonecall"), + ("date_deadline", "<=", fields.Date.today()), + "|", + ("phone", "!=", False), + ("mobile", "!=", False), + ] + ) + self.env["bus.bus"]._sendmany( + [ + [self.env.user.partner_id, "delete_call_activity", {"id": activity.id}] + for activity in related_activities + ] + ) + related_activities.unlink() diff --git a/voip/security/ir.model.access.csv b/voip/security/ir.model.access.csv new file mode 100644 index 0000000..97de973 --- /dev/null +++ b/voip/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_voip_call_admin,voip_call_manager,model_voip_call,base.group_system,1,1,1,1 +access_voip_call_user,voip_call_user,model_voip_call,base.group_user,1,1,1,0 diff --git a/voip/security/voip_security.xml b/voip/security/voip_security.xml new file mode 100644 index 0000000..4cd83b7 --- /dev/null +++ b/voip/security/voip_security.xml @@ -0,0 +1,15 @@ + + + + + voip.call: users can access their own entries + + + [("user_id", "=", user.id)] + + + + + + + diff --git a/voip/static/description/icon.png b/voip/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..39185ab7681d8f67c60303f3632eccb66cdefd38 GIT binary patch literal 1288 zcmV+j1^4=iP)h7Rdi=0jg;CjB&$y($1sp8qJMy`xJqZsMS?Vult!s+rArz~Ngq&ZgCJD? zfG8xr#U=p$7~T2mC(4V;uKk_7A013Y5O@6D7RS8Z z?Vb>C$K@|~C}Y$IJ8i2UTU~C8`mvLTAMcX8AcbFcH^{kzel|?;TC@E131#PlojzAT z_WPKL`f)Q$Kf2*4ZyetnWFkoylBo}@$K3%|tbTk$Ia8$E;nl%5vP7AZbPTJ5?Xvdc zGWoZVq2LmELH>StD#+{tK|EsuW5{?Y)vBfWV)KFMSirBw1Ew=3-uwI7t%=Mb#zBxR zZHX@7j?*E4r7{Li5jvowf>pr5u2(Qc1abj3g9%}OE7btr@1A=(QNb?XYExFh{ z;MdO*NMqO>~>nz`1d>FuW0;_Mu|Ul3o$WVF{-utX=#_2yzYw4TBvh? zVR*bd>m03*w3|p1g77ElSpEXo}I;S&zp(;=f|8hEg&@m&NNn@6hm- zP?#jk_nE|>)u0~S40+6?jvrN)XCz(L)rVg!utW!~rj|UEIf~hBHuip~6BsL+YdbA! zzV|!wUD13$vV1!e!--W(_GtC>6S8$Dan0@#7#l4ybm3F1I(sYMWzF|#qJ_SA(&JHO ziAAQmTFM*EH9L{VJ@S1;^Sy6lNS|sU|A+iDK;L{18q{aKTFRResw~fdAf5q1JOhGw z1_bd82;vzK#4}V7c}^fFga+l?3AtMD_wx~fv7x!PXq+jmTzZEzA+bW=#@(QJr_b!wQE>@A1{sXf3ysrxASeiPiMYYEZ@oVkaptl z5XhWF6r#EwYTRZs$H{tG{tCqb~R10#J@61{3HFgxBbC0S)H{-sZ)Y>TR&4^1Sd#+dF{DG(ap9f(#1q?$y2rYgaRbULEXyj zf3DyDFc#6J>}16tSph-XYd5cXi% zo;~s7G7}Ia9%iz3LYWeK;>Trj7lcU$?}h8K9jH0^t-(M)Bx^sqk-H$a4=z(|$>=(V z;Fxxz&$8WBT79t7Fn;7dv7Fde9_XVJU1>bw6+@GP#^B; y@$sbm000000000000000000000002MU|s@L|H5BrVYmAL0000|C_ literal 0 HcmV?d00001 diff --git a/voip/static/description/icon.svg b/voip/static/description/icon.svg new file mode 100644 index 0000000..980eeed --- /dev/null +++ b/voip/static/description/icon.svg @@ -0,0 +1 @@ + diff --git a/voip/static/lib/sip.js b/voip/static/lib/sip.js new file mode 100644 index 0000000..5ea05b6 --- /dev/null +++ b/voip/static/lib/sip.js @@ -0,0 +1,20562 @@ +/*! + * + * SIP version 0.20.0 + * Copyright (c) 2014-2021 Junction Networks, Inc + * Homepage: https://sipjs.com + * License: https://sipjs.com/license/ + * + * + * ~~~SIP.js contains substantial portions of JsSIP under the following license~~~ + * Homepage: http://jssip.net + * Copyright (c) 2012-2013 José Luis Millán - Versatica + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * ~~~ end JsSIP license ~~~ + * + * + * + * + */ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["SIP"] = factory(); + else + root["SIP"] = factory(); +})(this, function() { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LIBRARY_VERSION": () => (/* binding */ LIBRARY_VERSION) +/* harmony export */ }); +const LIBRARY_VERSION = "0.20.0"; + + +/***/ }), +/* 2 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ContentTypeUnsupportedError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_0__.ContentTypeUnsupportedError), +/* harmony export */ "RequestPendingError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_0__.RequestPendingError), +/* harmony export */ "SessionDescriptionHandlerError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_0__.SessionDescriptionHandlerError), +/* harmony export */ "SessionTerminatedError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_0__.SessionTerminatedError), +/* harmony export */ "StateTransitionError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_0__.StateTransitionError), +/* harmony export */ "Ack": () => (/* reexport safe */ _ack__WEBPACK_IMPORTED_MODULE_1__.Ack), +/* harmony export */ "Bye": () => (/* reexport safe */ _bye__WEBPACK_IMPORTED_MODULE_2__.Bye), +/* harmony export */ "EmitterImpl": () => (/* reexport safe */ _emitter__WEBPACK_IMPORTED_MODULE_3__.EmitterImpl), +/* harmony export */ "Info": () => (/* reexport safe */ _info__WEBPACK_IMPORTED_MODULE_4__.Info), +/* harmony export */ "Invitation": () => (/* reexport safe */ _invitation__WEBPACK_IMPORTED_MODULE_5__.Invitation), +/* harmony export */ "Inviter": () => (/* reexport safe */ _inviter__WEBPACK_IMPORTED_MODULE_6__.Inviter), +/* harmony export */ "Message": () => (/* reexport safe */ _message__WEBPACK_IMPORTED_MODULE_7__.Message), +/* harmony export */ "Messager": () => (/* reexport safe */ _messager__WEBPACK_IMPORTED_MODULE_8__.Messager), +/* harmony export */ "Notification": () => (/* reexport safe */ _notification__WEBPACK_IMPORTED_MODULE_9__.Notification), +/* harmony export */ "PublisherState": () => (/* reexport safe */ _publisher_state__WEBPACK_IMPORTED_MODULE_10__.PublisherState), +/* harmony export */ "Publisher": () => (/* reexport safe */ _publisher__WEBPACK_IMPORTED_MODULE_11__.Publisher), +/* harmony export */ "Referral": () => (/* reexport safe */ _referral__WEBPACK_IMPORTED_MODULE_12__.Referral), +/* harmony export */ "RegistererState": () => (/* reexport safe */ _registerer_state__WEBPACK_IMPORTED_MODULE_13__.RegistererState), +/* harmony export */ "Registerer": () => (/* reexport safe */ _registerer__WEBPACK_IMPORTED_MODULE_14__.Registerer), +/* harmony export */ "SessionState": () => (/* reexport safe */ _session_state__WEBPACK_IMPORTED_MODULE_15__.SessionState), +/* harmony export */ "Session": () => (/* reexport safe */ _session__WEBPACK_IMPORTED_MODULE_16__.Session), +/* harmony export */ "Subscriber": () => (/* reexport safe */ _subscriber__WEBPACK_IMPORTED_MODULE_17__.Subscriber), +/* harmony export */ "SubscriptionState": () => (/* reexport safe */ _subscription_state__WEBPACK_IMPORTED_MODULE_18__.SubscriptionState), +/* harmony export */ "Subscription": () => (/* reexport safe */ _subscription__WEBPACK_IMPORTED_MODULE_19__.Subscription), +/* harmony export */ "TransportState": () => (/* reexport safe */ _transport_state__WEBPACK_IMPORTED_MODULE_20__.TransportState), +/* harmony export */ "SIPExtension": () => (/* reexport safe */ _user_agent_options__WEBPACK_IMPORTED_MODULE_21__.SIPExtension), +/* harmony export */ "UserAgentRegisteredOptionTags": () => (/* reexport safe */ _user_agent_options__WEBPACK_IMPORTED_MODULE_21__.UserAgentRegisteredOptionTags), +/* harmony export */ "UserAgentState": () => (/* reexport safe */ _user_agent_state__WEBPACK_IMPORTED_MODULE_22__.UserAgentState), +/* harmony export */ "UserAgent": () => (/* reexport safe */ _user_agent__WEBPACK_IMPORTED_MODULE_23__.UserAgent) +/* harmony export */ }); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); +/* harmony import */ var _ack__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10); +/* harmony import */ var _bye__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(11); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12); +/* harmony import */ var _info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(13); +/* harmony import */ var _invitation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(14); +/* harmony import */ var _inviter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(37); +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(31); +/* harmony import */ var _messager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(38); +/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(32); +/* harmony import */ var _publisher_state__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(39); +/* harmony import */ var _publisher__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(40); +/* harmony import */ var _referral__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(33); +/* harmony import */ var _registerer_state__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(41); +/* harmony import */ var _registerer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(42); +/* harmony import */ var _session_state__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(16); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(15); +/* harmony import */ var _subscriber__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(43); +/* harmony import */ var _subscription_state__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(45); +/* harmony import */ var _subscription__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(44); +/* harmony import */ var _transport_state__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(47); +/* harmony import */ var _user_agent_options__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(34); +/* harmony import */ var _user_agent_state__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(48); +/* harmony import */ var _user_agent__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(49); +/** + * A simple yet powerful API which takes care of SIP signaling and WebRTC media sessions for you. + * @packageDocumentation + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), +/* 3 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ContentTypeUnsupportedError": () => (/* reexport safe */ _content_type_unsupported__WEBPACK_IMPORTED_MODULE_0__.ContentTypeUnsupportedError), +/* harmony export */ "RequestPendingError": () => (/* reexport safe */ _request_pending__WEBPACK_IMPORTED_MODULE_1__.RequestPendingError), +/* harmony export */ "SessionDescriptionHandlerError": () => (/* reexport safe */ _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandlerError), +/* harmony export */ "SessionTerminatedError": () => (/* reexport safe */ _session_terminated__WEBPACK_IMPORTED_MODULE_3__.SessionTerminatedError), +/* harmony export */ "StateTransitionError": () => (/* reexport safe */ _state_transition__WEBPACK_IMPORTED_MODULE_4__.StateTransitionError) +/* harmony export */ }); +/* harmony import */ var _content_type_unsupported__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); +/* harmony import */ var _request_pending__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6); +/* harmony import */ var _session_description_handler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7); +/* harmony import */ var _session_terminated__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8); +/* harmony import */ var _state_transition__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9); + + + + + + + +/***/ }), +/* 4 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ContentTypeUnsupportedError": () => (/* binding */ ContentTypeUnsupportedError) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * An exception indicating an unsupported content type prevented execution. + * @public + */ +class ContentTypeUnsupportedError extends _core__WEBPACK_IMPORTED_MODULE_0__.Exception { + constructor(message) { + super(message ? message : "Unsupported content type."); + } +} + + +/***/ }), +/* 5 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Exception": () => (/* binding */ Exception) +/* harmony export */ }); +/** + * An Exception is considered a condition that a reasonable application may wish to catch. + * An Error indicates serious problems that a reasonable application should not try to catch. + * @public + */ +class Exception extends Error { + constructor(message) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + } +} + + +/***/ }), +/* 6 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RequestPendingError": () => (/* binding */ RequestPendingError) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * An exception indicating an outstanding prior request prevented execution. + * @public + */ +class RequestPendingError extends _core__WEBPACK_IMPORTED_MODULE_0__.Exception { + /** @internal */ + constructor(message) { + super(message ? message : "Request pending."); + } +} + + +/***/ }), +/* 7 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionDescriptionHandlerError": () => (/* binding */ SessionDescriptionHandlerError) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * An exception indicating a session description handler error occured. + * @public + */ +class SessionDescriptionHandlerError extends _core__WEBPACK_IMPORTED_MODULE_0__.Exception { + constructor(message) { + super(message ? message : "Unspecified session description handler error."); + } +} + + +/***/ }), +/* 8 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionTerminatedError": () => (/* binding */ SessionTerminatedError) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * An exception indicating the session terminated before the action completed. + * @public + */ +class SessionTerminatedError extends _core__WEBPACK_IMPORTED_MODULE_0__.Exception { + constructor() { + super("The session has terminated."); + } +} + + +/***/ }), +/* 9 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "StateTransitionError": () => (/* binding */ StateTransitionError) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * An exception indicating an invalid state transition error occured. + * @public + */ +class StateTransitionError extends _core__WEBPACK_IMPORTED_MODULE_0__.Exception { + constructor(message) { + super(message ? message : "An error occurred during state transition."); + } +} + + +/***/ }), +/* 10 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Ack": () => (/* binding */ Ack) +/* harmony export */ }); +/** + * A request to confirm a {@link Session} (incoming ACK). + * @public + */ +class Ack { + /** @internal */ + constructor(incomingAckRequest) { + this.incomingAckRequest = incomingAckRequest; + } + /** Incoming ACK request message. */ + get request() { + return this.incomingAckRequest.message; + } +} + + +/***/ }), +/* 11 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Bye": () => (/* binding */ Bye) +/* harmony export */ }); +/** + * A request to end a {@link Session} (incoming BYE). + * @public + */ +class Bye { + /** @internal */ + constructor(incomingByeRequest) { + this.incomingByeRequest = incomingByeRequest; + } + /** Incoming BYE request message. */ + get request() { + return this.incomingByeRequest.message; + } + /** Accept the request. */ + accept(options) { + this.incomingByeRequest.accept(options); + return Promise.resolve(); + } + /** Reject the request. */ + reject(options) { + this.incomingByeRequest.reject(options); + return Promise.resolve(); + } +} + + +/***/ }), +/* 12 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "EmitterImpl": () => (/* binding */ EmitterImpl) +/* harmony export */ }); +/** + * An {@link Emitter} implementation. + * @internal + */ +class EmitterImpl { + constructor() { + this.listeners = new Array(); + } + /** + * Sets up a function that will be called whenever the target changes. + * @param listener - Callback function. + * @param options - An options object that specifies characteristics about the listener. + * If once true, indicates that the listener should be invoked at most once after being added. + * If once true, the listener would be automatically removed when invoked. + */ + addListener(listener, options) { + const onceWrapper = (data) => { + this.removeListener(onceWrapper); + listener(data); + }; + (options === null || options === void 0 ? void 0 : options.once) === true ? this.listeners.push(onceWrapper) : this.listeners.push(listener); + } + /** + * Emit change. + * @param data - Data to emit. + */ + emit(data) { + this.listeners.slice().forEach((listener) => listener(data)); + } + /** + * Removes all listeners previously registered with addListener. + */ + removeAllListeners() { + this.listeners = []; + } + /** + * Removes a listener previously registered with addListener. + * @param listener - Callback function. + */ + removeListener(listener) { + this.listeners = this.listeners.filter((l) => l !== listener); + } + /** + * Registers a listener. + * @param listener - Callback function. + * @deprecated Use addListener. + */ + on(listener) { + return this.addListener(listener); + } + /** + * Unregisters a listener. + * @param listener - Callback function. + * @deprecated Use removeListener. + */ + off(listener) { + return this.removeListener(listener); + } + /** + * Registers a listener then unregisters the listener after one event emission. + * @param listener - Callback function. + * @deprecated Use addListener. + */ + once(listener) { + return this.addListener(listener, { once: true }); + } +} + + +/***/ }), +/* 13 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Info": () => (/* binding */ Info) +/* harmony export */ }); +/** + * An exchange of information (incoming INFO). + * @public + */ +class Info { + /** @internal */ + constructor(incomingInfoRequest) { + this.incomingInfoRequest = incomingInfoRequest; + } + /** Incoming MESSAGE request message. */ + get request() { + return this.incomingInfoRequest.message; + } + /** Accept the request. */ + accept(options) { + this.incomingInfoRequest.accept(options); + return Promise.resolve(); + } + /** Reject the request. */ + reject(options) { + this.incomingInfoRequest.reject(options); + return Promise.resolve(); + } +} + + +/***/ }), +/* 14 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Invitation": () => (/* binding */ Invitation) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(17); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(30); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(35); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(36); +/* harmony import */ var _core_messages_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(20); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(8); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15); +/* harmony import */ var _session_state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16); +/* harmony import */ var _user_agent_options__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(34); + + + + + + +/** + * An invitation is an offer to establish a {@link Session} (incoming INVITE). + * @public + */ +class Invitation extends _session__WEBPACK_IMPORTED_MODULE_0__.Session { + /** @internal */ + constructor(userAgent, incomingInviteRequest) { + super(userAgent); + this.incomingInviteRequest = incomingInviteRequest; + /** True if dispose() has been called. */ + this.disposed = false; + /** INVITE will be rejected if not accepted within a certain period time. */ + this.expiresTimer = undefined; + /** True if this Session has been Terminated due to a CANCEL request. */ + this.isCanceled = false; + /** Are reliable provisional responses required or supported. */ + this.rel100 = "none"; + /** The current RSeq header value. */ + this.rseq = Math.floor(Math.random() * 10000); + /** INVITE will be rejected if final response not sent in a certain period time. */ + this.userNoAnswerTimer = undefined; + /** True if waiting for a PRACK before sending a 200 Ok. */ + this.waitingForPrack = false; + this.logger = userAgent.getLogger("sip.Invitation"); + const incomingRequestMessage = this.incomingInviteRequest.message; + // Set 100rel if necessary + const requireHeader = incomingRequestMessage.getHeader("require"); + if (requireHeader && requireHeader.toLowerCase().includes("100rel")) { + this.rel100 = "required"; + } + const supportedHeader = incomingRequestMessage.getHeader("supported"); + if (supportedHeader && supportedHeader.toLowerCase().includes("100rel")) { + this.rel100 = "supported"; + } + // FIXME: HACK: This is a hack to port an existing behavior. + // Set the toTag on the incoming request message to the toTag which + // will be used in the response to the incoming request!!! + // The behavior being ported appears to be a hack itself, + // so this is a hack to port a hack. At least one test spec + // relies on it (which is yet another hack). + // eslint-disable-next-line @typescript-eslint/no-explicit-any + incomingRequestMessage.toTag = incomingInviteRequest.toTag; + if (typeof incomingRequestMessage.toTag !== "string") { + throw new TypeError("toTag should have been a string."); + } + // The following mapping values are RECOMMENDED: + // ... + // 19 no answer from the user 480 Temporarily unavailable + // https://tools.ietf.org/html/rfc3398#section-7.2.4.1 + this.userNoAnswerTimer = setTimeout(() => { + incomingInviteRequest.reject({ statusCode: 480 }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated); + }, this.userAgent.configuration.noAnswerTimeout ? this.userAgent.configuration.noAnswerTimeout * 1000 : 60000); + // 1. If the request is an INVITE that contains an Expires header + // field, the UAS core sets a timer for the number of seconds + // indicated in the header field value. When the timer fires, the + // invitation is considered to be expired. If the invitation + // expires before the UAS has generated a final response, a 487 + // (Request Terminated) response SHOULD be generated. + // https://tools.ietf.org/html/rfc3261#section-13.3.1 + if (incomingRequestMessage.hasHeader("expires")) { + const expires = Number(incomingRequestMessage.getHeader("expires") || 0) * 1000; + this.expiresTimer = setTimeout(() => { + if (this.state === _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial) { + incomingInviteRequest.reject({ statusCode: 487 }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated); + } + }, expires); + } + // Session parent properties + const assertedIdentity = this.request.getHeader("P-Asserted-Identity"); + if (assertedIdentity) { + this._assertedIdentity = _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.nameAddrHeaderParse(assertedIdentity); + } + this._contact = this.userAgent.contact.toString(); + const contentDisposition = incomingRequestMessage.parseHeader("Content-Disposition"); + if (contentDisposition && contentDisposition.type === "render") { + this._renderbody = incomingRequestMessage.body; + this._rendertype = incomingRequestMessage.getHeader("Content-Type"); + } + // Identifier + this._id = incomingRequestMessage.callId + incomingRequestMessage.fromTag; + // Add to the user agent's session collection. + this.userAgent._sessions[this._id] = this; + } + /** + * Destructor. + */ + dispose() { + // Only run through this once. It can and does get called multiple times + // depending on the what the sessions state is when first called. + // For example, if called when "establishing" it will be called again + // at least once when the session transitions to "terminated". + // Regardless, running through this more than once is pointless. + if (this.disposed) { + return Promise.resolve(); + } + this.disposed = true; + // Clear timers + if (this.expiresTimer) { + clearTimeout(this.expiresTimer); + this.expiresTimer = undefined; + } + if (this.userNoAnswerTimer) { + clearTimeout(this.userNoAnswerTimer); + this.userNoAnswerTimer = undefined; + } + // If accept() is still waiting for a PRACK, make sure it rejects + this.prackNeverArrived(); + // If the final response for the initial INVITE not yet been sent, reject it + switch (this.state) { + case _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial: + return this.reject().then(() => super.dispose()); + case _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Establishing: + return this.reject().then(() => super.dispose()); + case _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Established: + return super.dispose(); + case _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminating: + return super.dispose(); + case _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated: + return super.dispose(); + default: + throw new Error("Unknown state."); + } + } + /** + * If true, a first provisional response after the 100 Trying + * will be sent automatically. This is false it the UAC required + * reliable provisional responses (100rel in Require header) or + * the user agent configuration has specified to not send an + * initial response, otherwise it is true. The provisional is sent by + * calling `progress()` without any options. + */ + get autoSendAnInitialProvisionalResponse() { + return this.rel100 !== "required" && this.userAgent.configuration.sendInitialProvisionalResponse; + } + /** + * Initial incoming INVITE request message body. + */ + get body() { + return this.incomingInviteRequest.message.body; + } + /** + * The identity of the local user. + */ + get localIdentity() { + return this.request.to; + } + /** + * The identity of the remote user. + */ + get remoteIdentity() { + return this.request.from; + } + /** + * Initial incoming INVITE request message. + */ + get request() { + return this.incomingInviteRequest.message; + } + /** + * Accept the invitation. + * + * @remarks + * Accept the incoming INVITE request to start a Session. + * Replies to the INVITE request with a 200 Ok response. + * Resolves once the response sent, otherwise rejects. + * + * This method may reject for a variety of reasons including + * the receipt of a CANCEL request before `accept` is able + * to construct a response. + * @param options - Options bucket. + */ + accept(options = {}) { + this.logger.log("Invitation.accept"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial) { + const error = new Error(`Invalid session state ${this.state}`); + this.logger.error(error.message); + return Promise.reject(error); + } + // Modifiers and options for initial INVITE transaction + if (options.sessionDescriptionHandlerModifiers) { + this.sessionDescriptionHandlerModifiers = options.sessionDescriptionHandlerModifiers; + } + if (options.sessionDescriptionHandlerOptions) { + this.sessionDescriptionHandlerOptions = options.sessionDescriptionHandlerOptions; + } + // transition state + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Establishing); + return (this.sendAccept(options) + // eslint-disable-next-line @typescript-eslint/no-unused-vars + .then(({ message, session }) => { + session.delegate = { + onAck: (ackRequest) => this.onAckRequest(ackRequest), + onAckTimeout: () => this.onAckTimeout(), + onBye: (byeRequest) => this.onByeRequest(byeRequest), + onInfo: (infoRequest) => this.onInfoRequest(infoRequest), + onInvite: (inviteRequest) => this.onInviteRequest(inviteRequest), + onMessage: (messageRequest) => this.onMessageRequest(messageRequest), + onNotify: (notifyRequest) => this.onNotifyRequest(notifyRequest), + onPrack: (prackRequest) => this.onPrackRequest(prackRequest), + onRefer: (referRequest) => this.onReferRequest(referRequest) + }; + this._dialog = session; + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Established); + // TODO: Reconsider this "automagic" send of a BYE to replacee behavior. + // This behavior has been ported forward from legacy versions. + if (this._replacee) { + this._replacee._bye(); + } + }) + .catch((error) => this.handleResponseError(error))); + } + /** + * Indicate progress processing the invitation. + * + * @remarks + * Report progress to the the caller. + * Replies to the INVITE request with a 1xx provisional response. + * Resolves once the response sent, otherwise rejects. + * @param options - Options bucket. + */ + progress(options = {}) { + this.logger.log("Invitation.progress"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial) { + const error = new Error(`Invalid session state ${this.state}`); + this.logger.error(error.message); + return Promise.reject(error); + } + // Ported + const statusCode = options.statusCode || 180; + if (statusCode < 100 || statusCode > 199) { + throw new TypeError("Invalid statusCode: " + statusCode); + } + // Modifiers and options for initial INVITE transaction + if (options.sessionDescriptionHandlerModifiers) { + this.sessionDescriptionHandlerModifiers = options.sessionDescriptionHandlerModifiers; + } + if (options.sessionDescriptionHandlerOptions) { + this.sessionDescriptionHandlerOptions = options.sessionDescriptionHandlerOptions; + } + // After the first reliable provisional response for a request has been + // acknowledged, the UAS MAY send additional reliable provisional + // responses. The UAS MUST NOT send a second reliable provisional + // response until the first is acknowledged. After the first, it is + // RECOMMENDED that the UAS not send an additional reliable provisional + // response until the previous is acknowledged. The first reliable + // provisional response receives special treatment because it conveys + // the initial sequence number. If additional reliable provisional + // responses were sent before the first was acknowledged, the UAS could + // not be certain these were received in order. + // https://tools.ietf.org/html/rfc3262#section-3 + if (this.waitingForPrack) { + this.logger.warn("Unexpected call for progress while waiting for prack, ignoring"); + return Promise.resolve(); + } + // Trying provisional response + if (options.statusCode === 100) { + return this.sendProgressTrying() + .then(() => { + return; + }) + .catch((error) => this.handleResponseError(error)); + } + // Standard provisional response + if (!(this.rel100 === "required") && + !(this.rel100 === "supported" && options.rel100) && + !(this.rel100 === "supported" && this.userAgent.configuration.sipExtension100rel === _user_agent_options__WEBPACK_IMPORTED_MODULE_3__.SIPExtension.Required)) { + return this.sendProgress(options) + .then(() => { + return; + }) + .catch((error) => this.handleResponseError(error)); + } + // Reliable provisional response + return this.sendProgressReliableWaitForPrack(options) + .then(() => { + return; + }) + .catch((error) => this.handleResponseError(error)); + } + /** + * Reject the invitation. + * + * @remarks + * Replies to the INVITE request with a 4xx, 5xx, or 6xx final response. + * Resolves once the response sent, otherwise rejects. + * + * The expectation is that this method is used to reject an INVITE request. + * That is indeed the case - a call to `progress` followed by `reject` is + * a typical way to "decline" an incoming INVITE request. However it may + * also be called after calling `accept` (but only before it completes) + * which will reject the call and cause `accept` to reject. + * @param options - Options bucket. + */ + reject(options = {}) { + this.logger.log("Invitation.reject"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial && this.state !== _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Establishing) { + const error = new Error(`Invalid session state ${this.state}`); + this.logger.error(error.message); + return Promise.reject(error); + } + const statusCode = options.statusCode || 480; + const reasonPhrase = options.reasonPhrase ? options.reasonPhrase : (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_4__.getReasonPhrase)(statusCode); + const extraHeaders = options.extraHeaders || []; + if (statusCode < 300 || statusCode > 699) { + throw new TypeError("Invalid statusCode: " + statusCode); + } + const body = options.body ? (0,_core__WEBPACK_IMPORTED_MODULE_5__.fromBodyLegacy)(options.body) : undefined; + // FIXME: Need to redirect to someplace + statusCode < 400 + ? this.incomingInviteRequest.redirect([], { statusCode, reasonPhrase, extraHeaders, body }) + : this.incomingInviteRequest.reject({ statusCode, reasonPhrase, extraHeaders, body }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated); + return Promise.resolve(); + } + /** + * Handle CANCEL request. + * + * @param message - CANCEL message. + * @internal + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _onCancel(message) { + this.logger.log("Invitation._onCancel"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial && this.state !== _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Establishing) { + this.logger.error(`CANCEL received while in state ${this.state}, dropping request`); + return; + } + // flag canceled + this.isCanceled = true; + // reject INVITE with 487 status code + this.incomingInviteRequest.reject({ statusCode: 487 }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated); + } + /** + * Helper function to handle offer/answer in a PRACK. + */ + handlePrackOfferAnswer(request) { + if (!this.dialog) { + throw new Error("Dialog undefined."); + } + // If the PRACK doesn't have an offer/answer, nothing to be done. + const body = (0,_core__WEBPACK_IMPORTED_MODULE_5__.getBody)(request.message); + if (!body || body.contentDisposition !== "session") { + return Promise.resolve(undefined); + } + const options = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers + }; + // If the UAC receives a reliable provisional response with an offer + // (this would occur if the UAC sent an INVITE without an offer, in + // which case the first reliable provisional response will contain the + // offer), it MUST generate an answer in the PRACK. If the UAC receives + // a reliable provisional response with an answer, it MAY generate an + // additional offer in the PRACK. If the UAS receives a PRACK with an + // offer, it MUST place the answer in the 2xx to the PRACK. + // https://tools.ietf.org/html/rfc3262#section-5 + switch (this.dialog.signalingState) { + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Initial: + // State should never be reached as first reliable provisional response must have answer/offer. + throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Stable: + // Receved answer. + return this.setAnswer(body, options).then(() => undefined); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveLocalOffer: + // State should never be reached as local offer would be answered by this PRACK + throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveRemoteOffer: + // Received offer, generate answer. + return this.setOfferAndGetAnswer(body, options); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Closed: + throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`); + default: + throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`); + } + } + /** + * A handler for errors which occur while attempting to send 1xx and 2xx responses. + * In all cases, an attempt is made to reject the request if it is still outstanding. + * And while there are a variety of things which can go wrong and we log something here + * for all errors, there are a handful of common exceptions we pay some extra attention to. + * @param error - The error which occurred. + */ + handleResponseError(error) { + let statusCode = 480; // "Temporarily Unavailable" + // Log Error message + if (error instanceof Error) { + this.logger.error(error.message); + } + else { + // We don't actually know what a session description handler implementation might throw our way, + // and more generally as a last resort catch all, just assume we are getting an "unknown" and log it. + this.logger.error(error); + } + // Log Exception message + if (error instanceof _exceptions__WEBPACK_IMPORTED_MODULE_7__.ContentTypeUnsupportedError) { + this.logger.error("A session description handler occurred while sending response (content type unsupported"); + statusCode = 415; // "Unsupported Media Type" + } + else if (error instanceof _exceptions__WEBPACK_IMPORTED_MODULE_8__.SessionDescriptionHandlerError) { + this.logger.error("A session description handler occurred while sending response"); + } + else if (error instanceof _exceptions__WEBPACK_IMPORTED_MODULE_9__.SessionTerminatedError) { + this.logger.error("Session ended before response could be formulated and sent (while waiting for PRACK)"); + } + else if (error instanceof _core__WEBPACK_IMPORTED_MODULE_10__.TransactionStateError) { + this.logger.error("Session changed state before response could be formulated and sent"); + } + // Reject if still in "initial" or "establishing" state. + if (this.state === _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Initial || this.state === _session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Establishing) { + try { + this.incomingInviteRequest.reject({ statusCode }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated); + } + catch (e) { + this.logger.error("An error occurred attempting to reject the request while handling another error"); + throw e; // This is not a good place to be... + } + } + // FIXME: TODO: + // Here we are squelching the throwing of errors due to an race condition. + // We have an internal race between calling `accept()` and handling an incoming + // CANCEL request. As there is no good way currently to delegate the handling of + // these race errors to the caller of `accept()`, we are squelching the throwing + // of ALL errors when/if they occur after receiving a CANCEL to catch the ONE we know + // is a "normal" exceptional condition. While this is a completely reasonable approach, + // the decision should be left up to the library user. Furthermore, as we are eating + // ALL errors in this case, we are potentially (likely) hiding "real" errors which occur. + // + // Only rethrow error if the session has not been canceled. + if (this.isCanceled) { + this.logger.warn("An error occurred while attempting to formulate and send a response to an incoming INVITE." + + " However a CANCEL was received and processed while doing so which can (and often does) result" + + " in errors occurring as the session terminates in the meantime. Said error is being ignored."); + return; + } + throw error; + } + /** + * Callback for when ACK for a 2xx response is never received. + * @param session - Session the ACK never arrived for. + */ + onAckTimeout() { + this.logger.log("Invitation.onAckTimeout"); + if (!this.dialog) { + throw new Error("Dialog undefined."); + } + this.logger.log("No ACK received for an extended period of time, terminating session"); + this.dialog.bye(); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated); + } + /** + * A version of `accept` which resolves a session when the 200 Ok response is sent. + * @param options - Options bucket. + */ + sendAccept(options = {}) { + const responseOptions = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers + }; + const extraHeaders = options.extraHeaders || []; + // The UAS MAY send a final response to the initial request before + // having received PRACKs for all unacknowledged reliable provisional + // responses, unless the final response is 2xx and any of the + // unacknowledged reliable provisional responses contained a session + // description. In that case, it MUST NOT send a final response until + // those provisional responses are acknowledged. If the UAS does send a + // final response when reliable responses are still unacknowledged, it + // SHOULD NOT continue to retransmit the unacknowledged reliable + // provisional responses, but it MUST be prepared to process PRACK + // requests for those outstanding responses. A UAS MUST NOT send new + // reliable provisional responses (as opposed to retransmissions of + // unacknowledged ones) after sending a final response to a request. + // https://tools.ietf.org/html/rfc3262#section-3 + if (this.waitingForPrack) { + return this.waitForArrivalOfPrack() + .then(() => clearTimeout(this.userNoAnswerTimer)) // Ported + .then(() => this.generateResponseOfferAnswer(this.incomingInviteRequest, responseOptions)) + .then((body) => this.incomingInviteRequest.accept({ statusCode: 200, body, extraHeaders })); + } + clearTimeout(this.userNoAnswerTimer); // Ported + return this.generateResponseOfferAnswer(this.incomingInviteRequest, responseOptions).then((body) => this.incomingInviteRequest.accept({ statusCode: 200, body, extraHeaders })); + } + /** + * A version of `progress` which resolves when the provisional response is sent. + * @param options - Options bucket. + */ + sendProgress(options = {}) { + const statusCode = options.statusCode || 180; + const reasonPhrase = options.reasonPhrase; + const extraHeaders = (options.extraHeaders || []).slice(); + const body = options.body ? (0,_core__WEBPACK_IMPORTED_MODULE_5__.fromBodyLegacy)(options.body) : undefined; + // The 183 (Session Progress) response is used to convey information + // about the progress of the call that is not otherwise classified. The + // Reason-Phrase, header fields, or message body MAY be used to convey + // more details about the call progress. + // https://tools.ietf.org/html/rfc3261#section-21.1.5 + // It is the de facto industry standard to utilize 183 with SDP to provide "early media". + // While it is unlikely someone would want to send a 183 without SDP, so it should be an option. + if (statusCode === 183 && !body) { + return this.sendProgressWithSDP(options); + } + try { + const progressResponse = this.incomingInviteRequest.progress({ statusCode, reasonPhrase, extraHeaders, body }); + this._dialog = progressResponse.session; + return Promise.resolve(progressResponse); + } + catch (error) { + return Promise.reject(error); + } + } + /** + * A version of `progress` which resolves when the provisional response with sdp is sent. + * @param options - Options bucket. + */ + sendProgressWithSDP(options = {}) { + const responseOptions = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers + }; + const statusCode = options.statusCode || 183; + const reasonPhrase = options.reasonPhrase; + const extraHeaders = (options.extraHeaders || []).slice(); + // Get an offer/answer and send a reply. + return this.generateResponseOfferAnswer(this.incomingInviteRequest, responseOptions) + .then((body) => this.incomingInviteRequest.progress({ statusCode, reasonPhrase, extraHeaders, body })) + .then((progressResponse) => { + this._dialog = progressResponse.session; + return progressResponse; + }); + } + /** + * A version of `progress` which resolves when the reliable provisional response is sent. + * @param options - Options bucket. + */ + sendProgressReliable(options = {}) { + options.extraHeaders = (options.extraHeaders || []).slice(); + options.extraHeaders.push("Require: 100rel"); + options.extraHeaders.push("RSeq: " + Math.floor(Math.random() * 10000)); + return this.sendProgressWithSDP(options); + } + /** + * A version of `progress` which resolves when the reliable provisional response is acknowledged. + * @param options - Options bucket. + */ + sendProgressReliableWaitForPrack(options = {}) { + const responseOptions = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers + }; + const statusCode = options.statusCode || 183; + const reasonPhrase = options.reasonPhrase; + const extraHeaders = (options.extraHeaders || []).slice(); + extraHeaders.push("Require: 100rel"); + extraHeaders.push("RSeq: " + this.rseq++); + let body; + return new Promise((resolve, reject) => { + this.waitingForPrack = true; + this.generateResponseOfferAnswer(this.incomingInviteRequest, responseOptions) + .then((offerAnswer) => { + body = offerAnswer; + return this.incomingInviteRequest.progress({ statusCode, reasonPhrase, extraHeaders, body }); + }) + .then((progressResponse) => { + this._dialog = progressResponse.session; + let prackRequest; + let prackResponse; + progressResponse.session.delegate = { + onPrack: (request) => { + prackRequest = request; + // eslint-disable-next-line @typescript-eslint/no-use-before-define + clearTimeout(prackWaitTimeoutTimer); + // eslint-disable-next-line @typescript-eslint/no-use-before-define + clearTimeout(rel1xxRetransmissionTimer); + if (!this.waitingForPrack) { + return; + } + this.waitingForPrack = false; + this.handlePrackOfferAnswer(prackRequest) + .then((prackResponseBody) => { + try { + prackResponse = prackRequest.accept({ statusCode: 200, body: prackResponseBody }); + this.prackArrived(); + resolve({ prackRequest, prackResponse, progressResponse }); + } + catch (error) { + reject(error); + } + }) + .catch((error) => reject(error)); + } + }; + // https://tools.ietf.org/html/rfc3262#section-3 + const prackWaitTimeout = () => { + if (!this.waitingForPrack) { + return; + } + this.waitingForPrack = false; + this.logger.warn("No PRACK received, rejecting INVITE."); + // eslint-disable-next-line @typescript-eslint/no-use-before-define + clearTimeout(rel1xxRetransmissionTimer); + this.reject({ statusCode: 504 }) + .then(() => reject(new _exceptions__WEBPACK_IMPORTED_MODULE_9__.SessionTerminatedError())) + .catch((error) => reject(error)); + }; + const prackWaitTimeoutTimer = setTimeout(prackWaitTimeout, _core__WEBPACK_IMPORTED_MODULE_11__.Timers.T1 * 64); + // https://tools.ietf.org/html/rfc3262#section-3 + const rel1xxRetransmission = () => { + try { + this.incomingInviteRequest.progress({ statusCode, reasonPhrase, extraHeaders, body }); + } + catch (error) { + this.waitingForPrack = false; + reject(error); + return; + } + // eslint-disable-next-line @typescript-eslint/no-use-before-define + rel1xxRetransmissionTimer = setTimeout(rel1xxRetransmission, (timeout *= 2)); + }; + let timeout = _core__WEBPACK_IMPORTED_MODULE_11__.Timers.T1; + let rel1xxRetransmissionTimer = setTimeout(rel1xxRetransmission, timeout); + }) + .catch((error) => { + this.waitingForPrack = false; + reject(error); + }); + }); + } + /** + * A version of `progress` which resolves when a 100 Trying provisional response is sent. + */ + sendProgressTrying() { + try { + const progressResponse = this.incomingInviteRequest.trying(); + return Promise.resolve(progressResponse); + } + catch (error) { + return Promise.reject(error); + } + } + /** + * When attempting to accept the INVITE, an invitation waits + * for any outstanding PRACK to arrive before sending the 200 Ok. + * It will be waiting on this Promise to resolve which lets it know + * the PRACK has arrived and it may proceed to send the 200 Ok. + */ + waitForArrivalOfPrack() { + if (this.waitingForPrackPromise) { + throw new Error("Already waiting for PRACK"); + } + this.waitingForPrackPromise = new Promise((resolve, reject) => { + this.waitingForPrackResolve = resolve; + this.waitingForPrackReject = reject; + }); + return this.waitingForPrackPromise; + } + /** + * Here we are resolving the promise which in turn will cause + * the accept to proceed (it may still fail for other reasons, but...). + */ + prackArrived() { + if (this.waitingForPrackResolve) { + this.waitingForPrackResolve(); + } + this.waitingForPrackPromise = undefined; + this.waitingForPrackResolve = undefined; + this.waitingForPrackReject = undefined; + } + /** + * Here we are rejecting the promise which in turn will cause + * the accept to fail and the session to transition to "terminated". + */ + prackNeverArrived() { + if (this.waitingForPrackReject) { + this.waitingForPrackReject(new _exceptions__WEBPACK_IMPORTED_MODULE_9__.SessionTerminatedError()); + } + this.waitingForPrackPromise = undefined; + this.waitingForPrackResolve = undefined; + this.waitingForPrackReject = undefined; + } +} + + +/***/ }), +/* 15 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Session": () => (/* binding */ Session) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(30); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(21); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(23); +/* harmony import */ var _core_messages_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(20); +/* harmony import */ var _core_user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28); +/* harmony import */ var _ack__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(10); +/* harmony import */ var _bye__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(11); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(4); +/* harmony import */ var _info__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(13); +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(31); +/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(32); +/* harmony import */ var _referral__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(33); +/* harmony import */ var _session_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16); + + + + + + + + + + + + +/** + * A session provides real time communication between one or more participants. + * + * @remarks + * The transport behaves in a deterministic manner according to the + * the state defined in {@link SessionState}. + * @public + */ +class Session { + /** + * Constructor. + * @param userAgent - User agent. See {@link UserAgent} for details. + * @internal + */ + constructor(userAgent, options = {}) { + /** True if there is an outgoing re-INVITE request outstanding. */ + this.pendingReinvite = false; + /** True if there is an incoming re-INVITE ACK request outstanding. */ + this.pendingReinviteAck = false; + /** Session state. */ + this._state = _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Initial; + this.delegate = options.delegate; + this._stateEventEmitter = new _emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + this._userAgent = userAgent; + } + /** + * Destructor. + */ + dispose() { + this.logger.log(`Session ${this.id} in state ${this._state} is being disposed`); + // Remove from the user agent's session collection + delete this.userAgent._sessions[this.id]; + // Dispose of dialog media + if (this._sessionDescriptionHandler) { + this._sessionDescriptionHandler.close(); + // TODO: The SDH needs to remain defined as it will be called after it is closed in cases + // where an answer/offer arrives while the session is being torn down. There are a variety + // of circumstances where this can happen - sending a BYE during a re-INVITE for example. + // The code is currently written such that it lazily makes a new SDH when it needs one + // and one is not yet defined. Thus if we undefined it here, it will currently make a + // new one which is out of sync and then never gets cleaned up. + // + // The downside of leaving it defined are that calls this closed SDH will continue to be + // made (think setDescription) and those should/will fail. These failures are handled, but + // it would be nice to have it all coded up in a way where having an undefined SDH where + // one is expected throws an error. + // + // this._sessionDescriptionHandler = undefined; + } + switch (this.state) { + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Initial: + break; // the Inviter/Invitation sub class dispose method handles this case + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Establishing: + break; // the Inviter/Invitation sub class dispose method handles this case + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established: + return new Promise((resolve) => { + this._bye({ + // wait for the response to the BYE before resolving + onAccept: () => resolve(), + onRedirect: () => resolve(), + onReject: () => resolve() + }); + }); + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating: + break; // nothing to be done + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated: + break; // nothing to be done + default: + throw new Error("Unknown state."); + } + return Promise.resolve(); + } + /** + * The asserted identity of the remote user. + */ + get assertedIdentity() { + return this._assertedIdentity; + } + /** + * The confirmed session dialog. + */ + get dialog() { + return this._dialog; + } + /** + * A unique identifier for this session. + */ + get id() { + return this._id; + } + /** + * The session being replace by this one. + */ + get replacee() { + return this._replacee; + } + /** + * Session description handler. + * @remarks + * If `this` is an instance of `Invitation`, + * `sessionDescriptionHandler` will be defined when the session state changes to "established". + * If `this` is an instance of `Inviter` and an offer was sent in the INVITE, + * `sessionDescriptionHandler` will be defined when the session state changes to "establishing". + * If `this` is an instance of `Inviter` and an offer was not sent in the INVITE, + * `sessionDescriptionHandler` will be defined when the session state changes to "established". + * Otherwise `undefined`. + */ + get sessionDescriptionHandler() { + return this._sessionDescriptionHandler; + } + /** + * Session description handler factory. + */ + get sessionDescriptionHandlerFactory() { + return this.userAgent.configuration.sessionDescriptionHandlerFactory; + } + /** + * SDH modifiers for the initial INVITE transaction. + * @remarks + * Used in all cases when handling the initial INVITE transaction as either UAC or UAS. + * May be set directly at anytime. + * May optionally be set via constructor option. + * May optionally be set via options passed to Inviter.invite() or Invitation.accept(). + */ + get sessionDescriptionHandlerModifiers() { + return this._sessionDescriptionHandlerModifiers || []; + } + set sessionDescriptionHandlerModifiers(modifiers) { + this._sessionDescriptionHandlerModifiers = modifiers.slice(); + } + /** + * SDH options for the initial INVITE transaction. + * @remarks + * Used in all cases when handling the initial INVITE transaction as either UAC or UAS. + * May be set directly at anytime. + * May optionally be set via constructor option. + * May optionally be set via options passed to Inviter.invite() or Invitation.accept(). + */ + get sessionDescriptionHandlerOptions() { + return this._sessionDescriptionHandlerOptions || {}; + } + set sessionDescriptionHandlerOptions(options) { + this._sessionDescriptionHandlerOptions = Object.assign({}, options); + } + /** + * SDH modifiers for re-INVITE transactions. + * @remarks + * Used in all cases when handling a re-INVITE transaction as either UAC or UAS. + * May be set directly at anytime. + * May optionally be set via constructor option. + * May optionally be set via options passed to Session.invite(). + */ + get sessionDescriptionHandlerModifiersReInvite() { + return this._sessionDescriptionHandlerModifiersReInvite || []; + } + set sessionDescriptionHandlerModifiersReInvite(modifiers) { + this._sessionDescriptionHandlerModifiersReInvite = modifiers.slice(); + } + /** + * SDH options for re-INVITE transactions. + * @remarks + * Used in all cases when handling a re-INVITE transaction as either UAC or UAS. + * May be set directly at anytime. + * May optionally be set via constructor option. + * May optionally be set via options passed to Session.invite(). + */ + get sessionDescriptionHandlerOptionsReInvite() { + return this._sessionDescriptionHandlerOptionsReInvite || {}; + } + set sessionDescriptionHandlerOptionsReInvite(options) { + this._sessionDescriptionHandlerOptionsReInvite = Object.assign({}, options); + } + /** + * Session state. + */ + get state() { + return this._state; + } + /** + * Session state change emitter. + */ + get stateChange() { + return this._stateEventEmitter; + } + /** + * The user agent. + */ + get userAgent() { + return this._userAgent; + } + /** + * End the {@link Session}. Sends a BYE. + * @param options - Options bucket. See {@link SessionByeOptions} for details. + */ + bye(options = {}) { + let message = "Session.bye() may only be called if established session."; + switch (this.state) { + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Initial: + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (typeof this.cancel === "function") { + message += " However Inviter.invite() has not yet been called."; + message += " Perhaps you should have called Inviter.cancel()?"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } + else if (typeof this.reject === "function") { + message += " However Invitation.accept() has not yet been called."; + message += " Perhaps you should have called Invitation.reject()?"; + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Establishing: + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (typeof this.cancel === "function") { + message += " However a dialog does not yet exist."; + message += " Perhaps you should have called Inviter.cancel()?"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } + else if (typeof this.reject === "function") { + message += " However Invitation.accept() has not yet been called (or not yet resolved)."; + message += " Perhaps you should have called Invitation.reject()?"; + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established: { + const requestDelegate = options.requestDelegate; + const requestOptions = this.copyRequestOptions(options.requestOptions); + return this._bye(requestDelegate, requestOptions); + } + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating: + message += " However this session is already terminating."; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (typeof this.cancel === "function") { + message += " Perhaps you have already called Inviter.cancel()?"; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } + else if (typeof this.reject === "function") { + message += " Perhaps you have already called Session.bye()?"; + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated: + message += " However this session is already terminated."; + break; + default: + throw new Error("Unknown state"); + } + this.logger.error(message); + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + /** + * Share {@link Info} with peer. Sends an INFO. + * @param options - Options bucket. See {@link SessionInfoOptions} for details. + */ + info(options = {}) { + // guard session state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + const message = "Session.info() may only be called if established session."; + this.logger.error(message); + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + const requestDelegate = options.requestDelegate; + const requestOptions = this.copyRequestOptions(options.requestOptions); + return this._info(requestDelegate, requestOptions); + } + /** + * Renegotiate the session. Sends a re-INVITE. + * @param options - Options bucket. See {@link SessionInviteOptions} for details. + */ + invite(options = {}) { + this.logger.log("Session.invite"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + if (this.pendingReinvite) { + return Promise.reject(new _exceptions__WEBPACK_IMPORTED_MODULE_2__.RequestPendingError("Reinvite in progress. Please wait until complete, then try again.")); + } + this.pendingReinvite = true; + // Modifiers and options for initial INVITE transaction + if (options.sessionDescriptionHandlerModifiers) { + this.sessionDescriptionHandlerModifiersReInvite = options.sessionDescriptionHandlerModifiers; + } + if (options.sessionDescriptionHandlerOptions) { + this.sessionDescriptionHandlerOptionsReInvite = options.sessionDescriptionHandlerOptions; + } + const delegate = { + onAccept: (response) => { + // A re-INVITE transaction has an offer/answer [RFC3264] exchange + // associated with it. The UAC (User Agent Client) generating a given + // re-INVITE can act as the offerer or as the answerer. A UAC willing + // to act as the offerer includes an offer in the re-INVITE. The UAS + // (User Agent Server) then provides an answer in a response to the + // re-INVITE. A UAC willing to act as answerer does not include an + // offer in the re-INVITE. The UAS then provides an offer in a response + // to the re-INVITE becoming, thus, the offerer. + // https://tools.ietf.org/html/rfc6141#section-1 + const body = (0,_core__WEBPACK_IMPORTED_MODULE_3__.getBody)(response.message); + if (!body) { + // No way to recover, so terminate session and mark as failed. + this.logger.error("Received 2xx response to re-INVITE without a session description"); + this.ackAndBye(response, 400, "Missing session description"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + this.pendingReinvite = false; + return; + } + if (options.withoutSdp) { + // INVITE without SDP - set remote offer and send an answer in the ACK + const answerOptions = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptionsReInvite, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiersReInvite + }; + this.setOfferAndGetAnswer(body, answerOptions) + .then((answerBody) => { + response.ack({ body: answerBody }); + }) + .catch((error) => { + // No way to recover, so terminate session and mark as failed. + this.logger.error("Failed to handle offer in 2xx response to re-INVITE"); + this.logger.error(error.message); + if (this.state === _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + // A BYE should not be sent if already terminated. + // For example, a BYE may be sent/received while re-INVITE is outstanding. + response.ack(); + } + else { + this.ackAndBye(response, 488, "Bad Media Description"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + } + }) + .then(() => { + this.pendingReinvite = false; + if (options.requestDelegate && options.requestDelegate.onAccept) { + options.requestDelegate.onAccept(response); + } + }); + } + else { + // INVITE with SDP - set remote answer and send an ACK + const answerOptions = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptionsReInvite, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiersReInvite + }; + this.setAnswer(body, answerOptions) + .then(() => { + response.ack(); + }) + .catch((error) => { + // No way to recover, so terminate session and mark as failed. + this.logger.error("Failed to handle answer in 2xx response to re-INVITE"); + this.logger.error(error.message); + // A BYE should only be sent if session is not already terminated. + // For example, a BYE may be sent/received while re-INVITE is outstanding. + // The ACK needs to be sent regardless as it was not handled by the transaction. + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + this.ackAndBye(response, 488, "Bad Media Description"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + } + else { + response.ack(); + } + }) + .then(() => { + this.pendingReinvite = false; + if (options.requestDelegate && options.requestDelegate.onAccept) { + options.requestDelegate.onAccept(response); + } + }); + } + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onProgress: (response) => { + return; + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onRedirect: (response) => { + return; + }, + onReject: (response) => { + this.logger.warn("Received a non-2xx response to re-INVITE"); + this.pendingReinvite = false; + if (options.withoutSdp) { + if (options.requestDelegate && options.requestDelegate.onReject) { + options.requestDelegate.onReject(response); + } + } + else { + this.rollbackOffer() + .catch((error) => { + // No way to recover, so terminate session and mark as failed. + this.logger.error("Failed to rollback offer on non-2xx response to re-INVITE"); + this.logger.error(error.message); + // A BYE should only be sent if session is not already terminated. + // For example, a BYE may be sent/received while re-INVITE is outstanding. + // Note that the ACK was already sent by the transaction, so just need to send BYE. + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + if (!this.dialog) { + throw new Error("Dialog undefined."); + } + const extraHeaders = []; + extraHeaders.push("Reason: " + this.getReasonHeaderValue(500, "Internal Server Error")); + this.dialog.bye(undefined, { extraHeaders }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + } + }) + .then(() => { + if (options.requestDelegate && options.requestDelegate.onReject) { + options.requestDelegate.onReject(response); + } + }); + } + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onTrying: (response) => { + return; + } + }; + const requestOptions = options.requestOptions || {}; + requestOptions.extraHeaders = (requestOptions.extraHeaders || []).slice(); + requestOptions.extraHeaders.push("Allow: " + _core_user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_4__.AllowedMethods.toString()); + requestOptions.extraHeaders.push("Contact: " + this._contact); + // Just send an INVITE with no sdp... + if (options.withoutSdp) { + if (!this.dialog) { + this.pendingReinvite = false; + throw new Error("Dialog undefined."); + } + return Promise.resolve(this.dialog.invite(delegate, requestOptions)); + } + // Get an offer and send it in an INVITE + const offerOptions = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptionsReInvite, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiersReInvite + }; + return this.getOffer(offerOptions) + .then((offerBody) => { + if (!this.dialog) { + this.pendingReinvite = false; + throw new Error("Dialog undefined."); + } + requestOptions.body = offerBody; + return this.dialog.invite(delegate, requestOptions); + }) + .catch((error) => { + this.logger.error(error.message); + this.logger.error("Failed to send re-INVITE"); + this.pendingReinvite = false; + throw error; + }); + } + /** + * Deliver a {@link Message}. Sends a MESSAGE. + * @param options - Options bucket. See {@link SessionMessageOptions} for details. + */ + message(options = {}) { + // guard session state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + const message = "Session.message() may only be called if established session."; + this.logger.error(message); + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + const requestDelegate = options.requestDelegate; + const requestOptions = this.copyRequestOptions(options.requestOptions); + return this._message(requestDelegate, requestOptions); + } + /** + * Proffer a {@link Referral}. Send a REFER. + * @param referTo - The referral target. If a `Session`, a REFER w/Replaces is sent. + * @param options - Options bucket. See {@link SessionReferOptions} for details. + */ + refer(referTo, options = {}) { + // guard session state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + const message = "Session.refer() may only be called if established session."; + this.logger.error(message); + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + const requestDelegate = options.requestDelegate; + const requestOptions = this.copyRequestOptions(options.requestOptions); + requestOptions.extraHeaders = requestOptions.extraHeaders + ? requestOptions.extraHeaders.concat(this.referExtraHeaders(this.referToString(referTo))) + : this.referExtraHeaders(this.referToString(referTo)); + return this._refer(options.onNotify, requestDelegate, requestOptions); + } + /** + * Send BYE. + * @param delegate - Request delegate. + * @param options - Request options bucket. + * @internal + */ + _bye(delegate, options) { + // Using core session dialog + if (!this.dialog) { + return Promise.reject(new Error("Session dialog undefined.")); + } + const dialog = this.dialog; + // The caller's UA MAY send a BYE for either confirmed or early dialogs, + // and the callee's UA MAY send a BYE on confirmed dialogs, but MUST NOT + // send a BYE on early dialogs. However, the callee's UA MUST NOT send a + // BYE on a confirmed dialog until it has received an ACK for its 2xx + // response or until the server transaction times out. + // https://tools.ietf.org/html/rfc3261#section-15 + switch (dialog.sessionState) { + case _core__WEBPACK_IMPORTED_MODULE_5__.SessionState.Initial: + throw new Error(`Invalid dialog state ${dialog.sessionState}`); + case _core__WEBPACK_IMPORTED_MODULE_5__.SessionState.Early: // Implementation choice - not sending BYE for early dialogs. + throw new Error(`Invalid dialog state ${dialog.sessionState}`); + case _core__WEBPACK_IMPORTED_MODULE_5__.SessionState.AckWait: { + // This state only occurs if we are the callee. + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating); // We're terminating + return new Promise((resolve) => { + dialog.delegate = { + // When ACK shows up, say BYE. + onAck: () => { + const request = dialog.bye(delegate, options); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + resolve(request); + return Promise.resolve(); + }, + // Or the server transaction times out before the ACK arrives. + onAckTimeout: () => { + const request = dialog.bye(delegate, options); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + resolve(request); + } + }; + }); + } + case _core__WEBPACK_IMPORTED_MODULE_5__.SessionState.Confirmed: { + const request = dialog.bye(delegate, options); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + return Promise.resolve(request); + } + case _core__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated: + throw new Error(`Invalid dialog state ${dialog.sessionState}`); + default: + throw new Error("Unrecognized state."); + } + } + /** + * Send INFO. + * @param delegate - Request delegate. + * @param options - Request options bucket. + * @internal + */ + _info(delegate, options) { + // Using core session dialog + if (!this.dialog) { + return Promise.reject(new Error("Session dialog undefined.")); + } + return Promise.resolve(this.dialog.info(delegate, options)); + } + /** + * Send MESSAGE. + * @param delegate - Request delegate. + * @param options - Request options bucket. + * @internal + */ + _message(delegate, options) { + // Using core session dialog + if (!this.dialog) { + return Promise.reject(new Error("Session dialog undefined.")); + } + return Promise.resolve(this.dialog.message(delegate, options)); + } + /** + * Send REFER. + * @param onNotify - Notification callback. + * @param delegate - Request delegate. + * @param options - Request options bucket. + * @internal + */ + _refer(onNotify, delegate, options) { + // Using core session dialog + if (!this.dialog) { + return Promise.reject(new Error("Session dialog undefined.")); + } + // If set, deliver any in-dialog NOTIFY requests here... + this.onNotify = onNotify; + return Promise.resolve(this.dialog.refer(delegate, options)); + } + /** + * Send ACK and then BYE. There are unrecoverable errors which can occur + * while handling dialog forming and in-dialog INVITE responses and when + * they occur we ACK the response and send a BYE. + * Note that the BYE is sent in the dialog associated with the response + * which is not necessarily `this.dialog`. And, accordingly, the + * session state is not transitioned to terminated and session is not closed. + * @param inviteResponse - The response causing the error. + * @param statusCode - Status code for he reason phrase. + * @param reasonPhrase - Reason phrase for the BYE. + * @internal + */ + ackAndBye(response, statusCode, reasonPhrase) { + response.ack(); + const extraHeaders = []; + if (statusCode) { + extraHeaders.push("Reason: " + this.getReasonHeaderValue(statusCode, reasonPhrase)); + } + // Using the dialog session associate with the response (which might not be this.dialog) + response.session.bye(undefined, { extraHeaders }); + } + /** + * Handle in dialog ACK request. + * @internal + */ + onAckRequest(request) { + this.logger.log("Session.onAckRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established && this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating) { + this.logger.error(`ACK received while in state ${this.state}, dropping request`); + return Promise.resolve(); + } + const dialog = this.dialog; + if (!dialog) { + throw new Error("Dialog undefined."); + } + // if received answer in ACK. + const answerOptions = { + sessionDescriptionHandlerOptions: this.pendingReinviteAck + ? this.sessionDescriptionHandlerOptionsReInvite + : this.sessionDescriptionHandlerOptions, + sessionDescriptionHandlerModifiers: this.pendingReinviteAck + ? this._sessionDescriptionHandlerModifiersReInvite + : this._sessionDescriptionHandlerModifiers + }; + if (this.delegate && this.delegate.onAck) { + const ack = new _ack__WEBPACK_IMPORTED_MODULE_6__.Ack(request); + this.delegate.onAck(ack); + } + // reset pending ACK flag + this.pendingReinviteAck = false; + switch (dialog.signalingState) { + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Initial: { + // State should never be reached as first reliable response must have answer/offer. + // So we must have never has sent an offer. + this.logger.error(`Invalid signaling state ${dialog.signalingState}.`); + const extraHeaders = ["Reason: " + this.getReasonHeaderValue(488, "Bad Media Description")]; + dialog.bye(undefined, { extraHeaders }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + return Promise.resolve(); + } + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Stable: { + // State we should be in. + // Either the ACK has the answer that got us here, or we were in this state prior to the ACK. + const body = (0,_core__WEBPACK_IMPORTED_MODULE_3__.getBody)(request.message); + // If the ACK doesn't have an answer, nothing to be done. + if (!body) { + return Promise.resolve(); + } + if (body.contentDisposition === "render") { + this._renderbody = body.content; + this._rendertype = body.contentType; + return Promise.resolve(); + } + if (body.contentDisposition !== "session") { + return Promise.resolve(); + } + return this.setAnswer(body, answerOptions).catch((error) => { + this.logger.error(error.message); + const extraHeaders = ["Reason: " + this.getReasonHeaderValue(488, "Bad Media Description")]; + dialog.bye(undefined, { extraHeaders }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + }); + } + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.HaveLocalOffer: { + // State should never be reached as local offer would be answered by this ACK. + // So we must have received an ACK without an answer. + this.logger.error(`Invalid signaling state ${dialog.signalingState}.`); + const extraHeaders = ["Reason: " + this.getReasonHeaderValue(488, "Bad Media Description")]; + dialog.bye(undefined, { extraHeaders }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + return Promise.resolve(); + } + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.HaveRemoteOffer: { + // State should never be reached as remote offer would be answered in first reliable response. + // So we must have never has sent an answer. + this.logger.error(`Invalid signaling state ${dialog.signalingState}.`); + const extraHeaders = ["Reason: " + this.getReasonHeaderValue(488, "Bad Media Description")]; + dialog.bye(undefined, { extraHeaders }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + return Promise.resolve(); + } + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Closed: + throw new Error(`Invalid signaling state ${dialog.signalingState}.`); + default: + throw new Error(`Invalid signaling state ${dialog.signalingState}.`); + } + } + /** + * Handle in dialog BYE request. + * @internal + */ + onByeRequest(request) { + this.logger.log("Session.onByeRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`BYE received while in state ${this.state}, dropping request`); + return; + } + if (this.delegate && this.delegate.onBye) { + const bye = new _bye__WEBPACK_IMPORTED_MODULE_7__.Bye(request); + this.delegate.onBye(bye); + } + else { + request.accept(); + } + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + } + /** + * Handle in dialog INFO request. + * @internal + */ + onInfoRequest(request) { + this.logger.log("Session.onInfoRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`INFO received while in state ${this.state}, dropping request`); + return; + } + if (this.delegate && this.delegate.onInfo) { + const info = new _info__WEBPACK_IMPORTED_MODULE_8__.Info(request); + this.delegate.onInfo(info); + } + else { + // FIXME: TODO: We should reject request... + // + // If a UA receives an INFO request associated with an Info Package that + // the UA has not indicated willingness to receive, the UA MUST send a + // 469 (Bad Info Package) response (see Section 11.6), which contains a + // Recv-Info header field with Info Packages for which the UA is willing + // to receive INFO requests. + // https://tools.ietf.org/html/rfc6086#section-4.2.2 + request.accept(); + } + } + /** + * Handle in dialog INVITE request. + * @internal + */ + onInviteRequest(request) { + this.logger.log("Session.onInviteRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`INVITE received while in state ${this.state}, dropping request`); + return; + } + // set pending ACK flag + this.pendingReinviteAck = true; + // TODO: would be nice to have core track and set the Contact header, + // but currently the session which is setting it is holding onto it. + const extraHeaders = ["Contact: " + this._contact]; + // Handle P-Asserted-Identity + if (request.message.hasHeader("P-Asserted-Identity")) { + const header = request.message.getHeader("P-Asserted-Identity"); + if (!header) { + throw new Error("Header undefined."); + } + this._assertedIdentity = _core__WEBPACK_IMPORTED_MODULE_9__.Grammar.nameAddrHeaderParse(header); + } + const options = { + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptionsReInvite, + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiersReInvite + }; + this.generateResponseOfferAnswerInDialog(options) + .then((body) => { + const outgoingResponse = request.accept({ statusCode: 200, extraHeaders, body }); + if (this.delegate && this.delegate.onInvite) { + this.delegate.onInvite(request.message, outgoingResponse.message, 200); + } + }) + .catch((error) => { + this.logger.error(error.message); + this.logger.error("Failed to handle to re-INVITE request"); + if (!this.dialog) { + throw new Error("Dialog undefined."); + } + this.logger.error(this.dialog.signalingState); + // If we don't have a local/remote offer... + if (this.dialog.signalingState === _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Stable) { + const outgoingResponse = request.reject({ statusCode: 488 }); // Not Acceptable Here + if (this.delegate && this.delegate.onInvite) { + this.delegate.onInvite(request.message, outgoingResponse.message, 488); + } + return; + } + // Otherwise rollback + this.rollbackOffer() + .then(() => { + const outgoingResponse = request.reject({ statusCode: 488 }); // Not Acceptable Here + if (this.delegate && this.delegate.onInvite) { + this.delegate.onInvite(request.message, outgoingResponse.message, 488); + } + }) + .catch((errorRollback) => { + // No way to recover, so terminate session and mark as failed. + this.logger.error(errorRollback.message); + this.logger.error("Failed to rollback offer on re-INVITE request"); + const outgoingResponse = request.reject({ statusCode: 488 }); // Not Acceptable Here + // A BYE should only be sent if session is not already terminated. + // For example, a BYE may be sent/received while re-INVITE is outstanding. + // Note that the ACK was already sent by the transaction, so just need to send BYE. + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + if (!this.dialog) { + throw new Error("Dialog undefined."); + } + const extraHeadersBye = []; + extraHeadersBye.push("Reason: " + this.getReasonHeaderValue(500, "Internal Server Error")); + this.dialog.bye(undefined, { extraHeaders }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated); + } + if (this.delegate && this.delegate.onInvite) { + this.delegate.onInvite(request.message, outgoingResponse.message, 488); + } + }); + }); + } + /** + * Handle in dialog MESSAGE request. + * @internal + */ + onMessageRequest(request) { + this.logger.log("Session.onMessageRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`MESSAGE received while in state ${this.state}, dropping request`); + return; + } + if (this.delegate && this.delegate.onMessage) { + const message = new _message__WEBPACK_IMPORTED_MODULE_10__.Message(request); + this.delegate.onMessage(message); + } + else { + request.accept(); + } + } + /** + * Handle in dialog NOTIFY request. + * @internal + */ + onNotifyRequest(request) { + this.logger.log("Session.onNotifyRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`NOTIFY received while in state ${this.state}, dropping request`); + return; + } + // If this a NOTIFY associated with the progress of a REFER, + // look to delegate handling to the associated callback. + if (this.onNotify) { + const notification = new _notification__WEBPACK_IMPORTED_MODULE_11__.Notification(request); + this.onNotify(notification); + return; + } + // Otherwise accept the NOTIFY. + if (this.delegate && this.delegate.onNotify) { + const notification = new _notification__WEBPACK_IMPORTED_MODULE_11__.Notification(request); + this.delegate.onNotify(notification); + } + else { + request.accept(); + } + } + /** + * Handle in dialog PRACK request. + * @internal + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onPrackRequest(request) { + this.logger.log("Session.onPrackRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`PRACK received while in state ${this.state}, dropping request`); + return; + } + throw new Error("Unimplemented."); + } + /** + * Handle in dialog REFER request. + * @internal + */ + onReferRequest(request) { + this.logger.log("Session.onReferRequest"); + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + this.logger.error(`REFER received while in state ${this.state}, dropping request`); + return; + } + // REFER is a SIP request and is constructed as defined in [1]. A REFER + // request MUST contain exactly one Refer-To header field value. + // https://tools.ietf.org/html/rfc3515#section-2.4.1 + if (!request.message.hasHeader("refer-to")) { + this.logger.warn("Invalid REFER packet. A refer-to header is required. Rejecting."); + request.reject(); + return; + } + const referral = new _referral__WEBPACK_IMPORTED_MODULE_12__.Referral(request, this); + if (this.delegate && this.delegate.onRefer) { + this.delegate.onRefer(referral); + } + else { + this.logger.log("No delegate available to handle REFER, automatically accepting and following."); + referral + .accept() + .then(() => referral.makeInviter(this._referralInviterOptions).invite()) + .catch((error) => { + // FIXME: logging and eating error... + this.logger.error(error.message); + }); + } + } + /** + * Generate an offer or answer for a response to an INVITE request. + * If a remote offer was provided in the request, set the remote + * description and get a local answer. If a remote offer was not + * provided, generates a local offer. + * @internal + */ + generateResponseOfferAnswer(request, options) { + if (this.dialog) { + return this.generateResponseOfferAnswerInDialog(options); + } + const body = (0,_core__WEBPACK_IMPORTED_MODULE_3__.getBody)(request.message); + if (!body || body.contentDisposition !== "session") { + return this.getOffer(options); + } + else { + return this.setOfferAndGetAnswer(body, options); + } + } + /** + * Generate an offer or answer for a response to an INVITE request + * when a dialog (early or otherwise) has already been established. + * This method may NOT be called if a dialog has yet to be established. + * @internal + */ + generateResponseOfferAnswerInDialog(options) { + if (!this.dialog) { + throw new Error("Dialog undefined."); + } + switch (this.dialog.signalingState) { + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Initial: + return this.getOffer(options); + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.HaveLocalOffer: + // o Once the UAS has sent or received an answer to the initial + // offer, it MUST NOT generate subsequent offers in any responses + // to the initial INVITE. This means that a UAS based on this + // specification alone can never generate subsequent offers until + // completion of the initial transaction. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + return Promise.resolve(undefined); + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.HaveRemoteOffer: + if (!this.dialog.offer) { + throw new Error(`Session offer undefined in signaling state ${this.dialog.signalingState}.`); + } + return this.setOfferAndGetAnswer(this.dialog.offer, options); + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Stable: + // o Once the UAS has sent or received an answer to the initial + // offer, it MUST NOT generate subsequent offers in any responses + // to the initial INVITE. This means that a UAS based on this + // specification alone can never generate subsequent offers until + // completion of the initial transaction. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established) { + return Promise.resolve(undefined); + } + // In dialog INVITE without offer, get an offer for the response. + return this.getOffer(options); + case _core__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Closed: + throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`); + default: + throw new Error(`Invalid signaling state ${this.dialog.signalingState}.`); + } + } + /** + * Get local offer. + * @internal + */ + getOffer(options) { + const sdh = this.setupSessionDescriptionHandler(); + const sdhOptions = options.sessionDescriptionHandlerOptions; + const sdhModifiers = options.sessionDescriptionHandlerModifiers; + // This is intentionally written very defensively. Don't trust SDH to behave. + try { + return sdh + .getDescription(sdhOptions, sdhModifiers) + .then((bodyAndContentType) => (0,_core__WEBPACK_IMPORTED_MODULE_3__.fromBodyLegacy)(bodyAndContentType)) + .catch((error) => { + // don't trust SDH to reject with Error + this.logger.error("Session.getOffer: SDH getDescription rejected..."); + const e = error instanceof Error ? error : new Error("Session.getOffer unknown error."); + this.logger.error(e.message); + throw e; + }); + } + catch (error) { + // don't trust SDH to throw an Error + this.logger.error("Session.getOffer: SDH getDescription threw..."); + const e = error instanceof Error ? error : new Error(error); + this.logger.error(e.message); + return Promise.reject(e); + } + } + /** + * Rollback local/remote offer. + * @internal + */ + rollbackOffer() { + const sdh = this.setupSessionDescriptionHandler(); + if (sdh.rollbackDescription === undefined) { + return Promise.resolve(); + } + // This is intentionally written very defensively. Don't trust SDH to behave. + try { + return sdh.rollbackDescription().catch((error) => { + // don't trust SDH to reject with Error + this.logger.error("Session.rollbackOffer: SDH rollbackDescription rejected..."); + const e = error instanceof Error ? error : new Error("Session.rollbackOffer unknown error."); + this.logger.error(e.message); + throw e; + }); + } + catch (error) { + // don't trust SDH to throw an Error + this.logger.error("Session.rollbackOffer: SDH rollbackDescription threw..."); + const e = error instanceof Error ? error : new Error(error); + this.logger.error(e.message); + return Promise.reject(e); + } + } + /** + * Set remote answer. + * @internal + */ + setAnswer(answer, options) { + const sdh = this.setupSessionDescriptionHandler(); + const sdhOptions = options.sessionDescriptionHandlerOptions; + const sdhModifiers = options.sessionDescriptionHandlerModifiers; + // This is intentionally written very defensively. Don't trust SDH to behave. + try { + if (!sdh.hasDescription(answer.contentType)) { + return Promise.reject(new _exceptions__WEBPACK_IMPORTED_MODULE_13__.ContentTypeUnsupportedError()); + } + } + catch (error) { + this.logger.error("Session.setAnswer: SDH hasDescription threw..."); + const e = error instanceof Error ? error : new Error(error); + this.logger.error(e.message); + return Promise.reject(e); + } + try { + return sdh.setDescription(answer.content, sdhOptions, sdhModifiers).catch((error) => { + // don't trust SDH to reject with Error + this.logger.error("Session.setAnswer: SDH setDescription rejected..."); + const e = error instanceof Error ? error : new Error("Session.setAnswer unknown error."); + this.logger.error(e.message); + throw e; + }); + } + catch (error) { + // don't trust SDH to throw an Error + this.logger.error("Session.setAnswer: SDH setDescription threw..."); + const e = error instanceof Error ? error : new Error(error); + this.logger.error(e.message); + return Promise.reject(e); + } + } + /** + * Set remote offer and get local answer. + * @internal + */ + setOfferAndGetAnswer(offer, options) { + const sdh = this.setupSessionDescriptionHandler(); + const sdhOptions = options.sessionDescriptionHandlerOptions; + const sdhModifiers = options.sessionDescriptionHandlerModifiers; + // This is intentionally written very defensively. Don't trust SDH to behave. + try { + if (!sdh.hasDescription(offer.contentType)) { + return Promise.reject(new _exceptions__WEBPACK_IMPORTED_MODULE_13__.ContentTypeUnsupportedError()); + } + } + catch (error) { + this.logger.error("Session.setOfferAndGetAnswer: SDH hasDescription threw..."); + const e = error instanceof Error ? error : new Error(error); + this.logger.error(e.message); + return Promise.reject(e); + } + try { + return sdh + .setDescription(offer.content, sdhOptions, sdhModifiers) + .then(() => sdh.getDescription(sdhOptions, sdhModifiers)) + .then((bodyAndContentType) => (0,_core__WEBPACK_IMPORTED_MODULE_3__.fromBodyLegacy)(bodyAndContentType)) + .catch((error) => { + // don't trust SDH to reject with Error + this.logger.error("Session.setOfferAndGetAnswer: SDH setDescription or getDescription rejected..."); + const e = error instanceof Error ? error : new Error("Session.setOfferAndGetAnswer unknown error."); + this.logger.error(e.message); + throw e; + }); + } + catch (error) { + // don't trust SDH to throw an Error + this.logger.error("Session.setOfferAndGetAnswer: SDH setDescription or getDescription threw..."); + const e = error instanceof Error ? error : new Error(error); + this.logger.error(e.message); + return Promise.reject(e); + } + } + /** + * SDH for confirmed dialog. + * @internal + */ + setSessionDescriptionHandler(sdh) { + if (this._sessionDescriptionHandler) { + throw new Error("Session description handler defined."); + } + this._sessionDescriptionHandler = sdh; + } + /** + * SDH for confirmed dialog. + * @internal + */ + setupSessionDescriptionHandler() { + var _a; + if (this._sessionDescriptionHandler) { + return this._sessionDescriptionHandler; + } + this._sessionDescriptionHandler = this.sessionDescriptionHandlerFactory(this, this.userAgent.configuration.sessionDescriptionHandlerFactoryOptions); + if ((_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onSessionDescriptionHandler) { + this.delegate.onSessionDescriptionHandler(this._sessionDescriptionHandler, false); + } + return this._sessionDescriptionHandler; + } + /** + * Transition session state. + * @internal + */ + stateTransition(newState) { + const invalidTransition = () => { + throw new Error(`Invalid state transition from ${this._state} to ${newState}`); + }; + // Validate transition + switch (this._state) { + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Initial: + if (newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Establishing && + newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established && + newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating && + newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + invalidTransition(); + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Establishing: + if (newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established && + newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating && + newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + invalidTransition(); + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Established: + if (newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating && newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + invalidTransition(); + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminating: + if (newState !== _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + invalidTransition(); + } + break; + case _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated: + invalidTransition(); + break; + default: + throw new Error("Unrecognized state."); + } + // Transition + this._state = newState; + this.logger.log(`Session ${this.id} transitioned to state ${this._state}`); + this._stateEventEmitter.emit(this._state); + // Dispose + if (newState === _session_state__WEBPACK_IMPORTED_MODULE_0__.SessionState.Terminated) { + this.dispose(); + } + } + copyRequestOptions(requestOptions = {}) { + const extraHeaders = requestOptions.extraHeaders ? requestOptions.extraHeaders.slice() : undefined; + const body = requestOptions.body + ? { + contentDisposition: requestOptions.body.contentDisposition || "render", + contentType: requestOptions.body.contentType || "text/plain", + content: requestOptions.body.content || "" + } + : undefined; + return { + extraHeaders, + body + }; + } + getReasonHeaderValue(code, reason) { + const cause = code; + let text = (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_14__.getReasonPhrase)(code); + if (!text && reason) { + text = reason; + } + return "SIP;cause=" + cause + ';text="' + text + '"'; + } + referExtraHeaders(referTo) { + const extraHeaders = []; + extraHeaders.push("Referred-By: <" + this.userAgent.configuration.uri + ">"); + extraHeaders.push("Contact: " + this._contact); + extraHeaders.push("Allow: " + ["ACK", "CANCEL", "INVITE", "MESSAGE", "BYE", "OPTIONS", "INFO", "NOTIFY", "REFER"].toString()); + extraHeaders.push("Refer-To: " + referTo); + return extraHeaders; + } + referToString(target) { + let referTo; + if (target instanceof _core__WEBPACK_IMPORTED_MODULE_15__.URI) { + // REFER without Replaces (Blind Transfer) + referTo = target.toString(); + } + else { + // REFER with Replaces (Attended Transfer) + if (!target.dialog) { + throw new Error("Dialog undefined."); + } + const displayName = target.remoteIdentity.friendlyName; + const remoteTarget = target.dialog.remoteTarget.toString(); + const callId = target.dialog.callId; + const remoteTag = target.dialog.remoteTag; + const localTag = target.dialog.localTag; + const replaces = encodeURIComponent(`${callId};to-tag=${remoteTag};from-tag=${localTag}`); + referTo = `"${displayName}" <${remoteTarget}?Replaces=${replaces}>`; + } + return referTo; + } +} + + +/***/ }), +/* 16 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionState": () => (/* binding */ SessionState) +/* harmony export */ }); +/** + * {@link Session} state. + * + * @remarks + * The {@link Session} behaves in a deterministic manner according to the following + * Finite State Machine (FSM). + * ```txt + * ___________________________________________________________ + * | ____________________________________________ | + * | | ____________________________ | | + * Session | | | v v v + * Constructed -> Initial -> Establishing -> Established -> Terminating -> Terminated + * | |___________________________^ ^ + * |_______________________________________________| + * ``` + * @public + */ +var SessionState; +(function (SessionState) { + /** + * If `Inviter`, INVITE not sent yet. + * If `Invitation`, received INVITE (but no final response sent yet). + */ + SessionState["Initial"] = "Initial"; + /** + * If `Inviter`, sent INVITE and waiting for a final response. + * If `Invitation`, received INVITE and attempting to send 200 final response (but has not sent it yet). + */ + SessionState["Establishing"] = "Establishing"; + /** + * If `Inviter`, sent INVITE and received 200 final response and sent ACK. + * If `Invitation`, received INVITE and sent 200 final response. + */ + SessionState["Established"] = "Established"; + /** + * If `Inviter`, sent INVITE, sent CANCEL and now waiting for 487 final response to ACK (or 200 to ACK & BYE). + * If `Invitation`, received INVITE, sent 200 final response and now waiting on ACK and upon receipt will attempt BYE + * (as the protocol specification requires, before sending a BYE we must receive the ACK - so we are waiting). + */ + SessionState["Terminating"] = "Terminating"; + /** + * If `Inviter`, sent INVITE and received non-200 final response (or sent/received BYE after receiving 200). + * If `Invitation`, received INVITE and sent non-200 final response (or sent/received BYE after sending 200). + */ + SessionState["Terminated"] = "Terminated"; +})(SessionState || (SessionState = {})); + + +/***/ }), +/* 17 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "fromBodyLegacy": () => (/* binding */ fromBodyLegacy), +/* harmony export */ "isBody": () => (/* binding */ isBody), +/* harmony export */ "getBody": () => (/* binding */ getBody) +/* harmony export */ }); +/* harmony import */ var _incoming_request_message__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18); +/* harmony import */ var _incoming_response_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26); +/* harmony import */ var _outgoing_request_message__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27); + + + +// If the Content-Disposition header field is missing, bodies of +// Content-Type application/sdp imply the disposition "session", while +// other content types imply "render". +// https://tools.ietf.org/html/rfc3261#section-13.2.1 +function contentTypeToContentDisposition(contentType) { + if (contentType === "application/sdp") { + return "session"; + } + else { + return "render"; + } +} +/** + * Create a Body given a legacy body type. + * @param bodyLegacy - Body Object + * @internal + */ +function fromBodyLegacy(bodyLegacy) { + const content = typeof bodyLegacy === "string" ? bodyLegacy : bodyLegacy.body; + const contentType = typeof bodyLegacy === "string" ? "application/sdp" : bodyLegacy.contentType; + const contentDisposition = contentTypeToContentDisposition(contentType); + const body = { contentDisposition, contentType, content }; + return body; +} +/** + * User-Defined Type Guard for Body. + * @param body - Body to check. + * @internal + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function isBody(body) { + return body && + typeof body.content === "string" && + typeof body.contentType === "string" && + body.contentDisposition === undefined + ? true + : typeof body.contentDisposition === "string"; +} +/** + * Given a message, get a normalized body. + * The content disposition is inferred if not set. + * @param message - The message. + * @internal + */ +function getBody(message) { + let contentDisposition; + let contentType; + let content; + // We're in UAS role, receiving incoming request + if (message instanceof _incoming_request_message__WEBPACK_IMPORTED_MODULE_0__.IncomingRequestMessage) { + if (message.body) { + // FIXME: Parsing needs typing + const parse = message.parseHeader("Content-Disposition"); + contentDisposition = parse ? parse.type : undefined; + contentType = message.parseHeader("Content-Type"); + content = message.body; + } + } + // We're in UAC role, receiving incoming response + if (message instanceof _incoming_response_message__WEBPACK_IMPORTED_MODULE_1__.IncomingResponseMessage) { + if (message.body) { + // FIXME: Parsing needs typing + const parse = message.parseHeader("Content-Disposition"); + contentDisposition = parse ? parse.type : undefined; + contentType = message.parseHeader("Content-Type"); + content = message.body; + } + } + // We're in UAC role, sending outgoing request + if (message instanceof _outgoing_request_message__WEBPACK_IMPORTED_MODULE_2__.OutgoingRequestMessage) { + if (message.body) { + contentDisposition = message.getHeader("Content-Disposition"); + contentType = message.getHeader("Content-Type"); + if (typeof message.body === "string") { + // FIXME: OutgoingRequest should not allow a "string" body without a "Content-Type" header. + if (!contentType) { + throw new Error("Header content type header does not equal body content type."); + } + content = message.body; + } + else { + // FIXME: OutgoingRequest should not allow the "Content-Type" header not to match th body content type + if (contentType && contentType !== message.body.contentType) { + throw new Error("Header content type header does not equal body content type."); + } + contentType = message.body.contentType; + content = message.body.body; + } + } + } + // We're in UAS role, sending outgoing response + if (isBody(message)) { + contentDisposition = message.contentDisposition; + contentType = message.contentType; + content = message.content; + } + // No content, no body. + if (!content) { + return undefined; + } + if (contentType && !contentDisposition) { + contentDisposition = contentTypeToContentDisposition(contentType); + } + if (!contentDisposition) { + throw new Error("Content disposition undefined."); + } + if (!contentType) { + throw new Error("Content type undefined."); + } + return { + contentDisposition, + contentType, + content + }; +} + + +/***/ }), +/* 18 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "IncomingRequestMessage": () => (/* binding */ IncomingRequestMessage) +/* harmony export */ }); +/* harmony import */ var _incoming_message__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(19); + +/** + * Incoming request message. + * @public + */ +class IncomingRequestMessage extends _incoming_message__WEBPACK_IMPORTED_MODULE_0__.IncomingMessage { + constructor() { + super(); + } +} + + +/***/ }), +/* 19 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "IncomingMessage": () => (/* binding */ IncomingMessage) +/* harmony export */ }); +/* harmony import */ var _grammar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); + + +/** + * Incoming message. + * @public + */ +class IncomingMessage { + constructor() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.headers = {}; + } + /** + * Insert a header of the given name and value into the last position of the + * header array. + * @param name - header name + * @param value - header value + */ + addHeader(name, value) { + const header = { raw: value }; + name = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name); + if (this.headers[name]) { + this.headers[name].push(header); + } + else { + this.headers[name] = [header]; + } + } + /** + * Get the value of the given header name at the given position. + * @param name - header name + * @returns Returns the specified header, undefined if header doesn't exist. + */ + getHeader(name) { + const header = this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)]; + if (header) { + if (header[0]) { + return header[0].raw; + } + } + else { + return; + } + } + /** + * Get the header/s of the given name. + * @param name - header name + * @returns Array - with all the headers of the specified name. + */ + getHeaders(name) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const header = this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)]; + const result = []; + if (!header) { + return []; + } + for (const headerPart of header) { + result.push(headerPart.raw); + } + return result; + } + /** + * Verify the existence of the given header. + * @param name - header name + * @returns true if header with given name exists, false otherwise + */ + hasHeader(name) { + return !!this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)]; + } + /** + * Parse the given header on the given index. + * @param name - header name + * @param idx - header index + * @returns Parsed header object, undefined if the + * header is not present or in case of a parsing error. + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + parseHeader(name, idx = 0) { + name = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name); + if (!this.headers[name]) { + // this.logger.log("header '" + name + "' not present"); + return; + } + else if (idx >= this.headers[name].length) { + // this.logger.log("not so many '" + name + "' headers present"); + return; + } + const header = this.headers[name][idx]; + const value = header.raw; + if (header.parsed) { + return header.parsed; + } + // substitute '-' by '_' for grammar rule matching. + const parsed = _grammar__WEBPACK_IMPORTED_MODULE_1__.Grammar.parse(value, name.replace(/-/g, "_")); + if (parsed === -1) { + this.headers[name].splice(idx, 1); // delete from headers + // this.logger.warn('error parsing "' + name + '" header field with value "' + value + '"'); + return; + } + else { + header.parsed = parsed; + return parsed; + } + } + /** + * Message Header attribute selector. Alias of parseHeader. + * @param name - header name + * @param idx - header index + * @returns Parsed header object, undefined if the + * header is not present or in case of a parsing error. + * + * @example + * message.s('via',3).port + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + s(name, idx = 0) { + return this.parseHeader(name, idx); + } + /** + * Replace the value of the given header by the value. + * @param name - header name + * @param value - header value + */ + setHeader(name, value) { + this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)] = [{ raw: value }]; + } + toString() { + return this.data; + } +} + + +/***/ }), +/* 20 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createRandomToken": () => (/* binding */ createRandomToken), +/* harmony export */ "getReasonPhrase": () => (/* binding */ getReasonPhrase), +/* harmony export */ "newTag": () => (/* binding */ newTag), +/* harmony export */ "headerize": () => (/* binding */ headerize), +/* harmony export */ "utf8Length": () => (/* binding */ utf8Length) +/* harmony export */ }); +/** + * SIP Response Reasons + * DOC: http://www.iana.org/assignments/sip-parameters + * @internal + */ +const REASON_PHRASE = { + 100: "Trying", + 180: "Ringing", + 181: "Call Is Being Forwarded", + 182: "Queued", + 183: "Session Progress", + 199: "Early Dialog Terminated", + 200: "OK", + 202: "Accepted", + 204: "No Notification", + 300: "Multiple Choices", + 301: "Moved Permanently", + 302: "Moved Temporarily", + 305: "Use Proxy", + 380: "Alternative Service", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 410: "Gone", + 412: "Conditional Request Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Unsupported URI Scheme", + 417: "Unknown Resource-Priority", + 420: "Bad Extension", + 421: "Extension Required", + 422: "Session Interval Too Small", + 423: "Interval Too Brief", + 428: "Use Identity Header", + 429: "Provide Referrer Identity", + 430: "Flow Failed", + 433: "Anonymity Disallowed", + 436: "Bad Identity-Info", + 437: "Unsupported Certificate", + 438: "Invalid Identity Header", + 439: "First Hop Lacks Outbound Support", + 440: "Max-Breadth Exceeded", + 469: "Bad Info Package", + 470: "Consent Needed", + 478: "Unresolvable Destination", + 480: "Temporarily Unavailable", + 481: "Call/Transaction Does Not Exist", + 482: "Loop Detected", + 483: "Too Many Hops", + 484: "Address Incomplete", + 485: "Ambiguous", + 486: "Busy Here", + 487: "Request Terminated", + 488: "Not Acceptable Here", + 489: "Bad Event", + 491: "Request Pending", + 493: "Undecipherable", + 494: "Security Agreement Required", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Server Time-out", + 505: "Version Not Supported", + 513: "Message Too Large", + 580: "Precondition Failure", + 600: "Busy Everywhere", + 603: "Decline", + 604: "Does Not Exist Anywhere", + 606: "Not Acceptable" +}; +/** + * @param size - + * @param base - + * @internal + */ +function createRandomToken(size, base = 32) { + let token = ""; + for (let i = 0; i < size; i++) { + const r = Math.floor(Math.random() * base); + token += r.toString(base); + } + return token; +} +/** + * @internal + */ +function getReasonPhrase(code) { + return REASON_PHRASE[code] || ""; +} +/** + * @internal + */ +function newTag() { + return createRandomToken(10); +} +/** + * @param str - + * @internal + */ +function headerize(str) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const exceptions = { + "Call-Id": "Call-ID", + Cseq: "CSeq", + "Min-Se": "Min-SE", + Rack: "RAck", + Rseq: "RSeq", + "Www-Authenticate": "WWW-Authenticate" + }; + const name = str.toLowerCase().replace(/_/g, "-").split("-"); + const parts = name.length; + let hname = ""; + for (let part = 0; part < parts; part++) { + if (part !== 0) { + hname += "-"; + } + hname += name[part].charAt(0).toUpperCase() + name[part].substring(1); + } + if (exceptions[hname]) { + hname = exceptions[hname]; + } + return hname; +} +/** + * @param str - + * @internal + */ +function utf8Length(str) { + return encodeURIComponent(str).replace(/%[A-F\d]{2}/g, "U").length; +} + + +/***/ }), +/* 21 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Grammar": () => (/* binding */ Grammar) +/* harmony export */ }); +/* harmony import */ var _pegjs_dist_grammar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22); +/* eslint-disable @typescript-eslint/no-namespace */ +/* eslint-disable no-inner-declarations */ + +/** + * Grammar. + * @internal + */ +var Grammar; +(function (Grammar) { + /** + * Parse. + * @param input - + * @param startRule - + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function parse(input, startRule) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const options = { startRule }; + try { + _pegjs_dist_grammar__WEBPACK_IMPORTED_MODULE_0__.parse(input, options); + } + catch (e) { + options.data = -1; + } + return options.data; + } + Grammar.parse = parse; + /** + * Parse the given string and returns a SIP.NameAddrHeader instance or undefined if + * it is an invalid NameAddrHeader. + * @param name_addr_header - + */ + function nameAddrHeaderParse(nameAddrHeader) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const parsedNameAddrHeader = Grammar.parse(nameAddrHeader, "Name_Addr_Header"); + return parsedNameAddrHeader !== -1 ? parsedNameAddrHeader : undefined; + } + Grammar.nameAddrHeaderParse = nameAddrHeaderParse; + /** + * Parse the given string and returns a SIP.URI instance or undefined if + * it is an invalid URI. + * @param uri - + */ + function URIParse(uri) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const parsedUri = Grammar.parse(uri, "SIP_URI"); + return parsedUri !== -1 ? parsedUri : undefined; + } + Grammar.URIParse = URIParse; +})(Grammar || (Grammar = {})); + + +/***/ }), +/* 22 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SyntaxError": () => (/* binding */ SyntaxError), +/* harmony export */ "parse": () => (/* binding */ parse) +/* harmony export */ }); +/* harmony import */ var _name_addr_header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25); +/* harmony import */ var _uri__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23); + + +class SyntaxError extends Error { + constructor(message, expected, found, location) { + super(); + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, SyntaxError); + } + } + static buildMessage(expected, found) { + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + function literalEscape(s) { + return s + .replace(/\\/g, "\\\\") + .replace(/"/g, "\\\"") + .replace(/\0/g, "\\0") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x0F]/g, (ch) => "\\x0" + hex(ch)) + .replace(/[\x10-\x1F\x7F-\x9F]/g, (ch) => "\\x" + hex(ch)); + } + function classEscape(s) { + return s + .replace(/\\/g, "\\\\") + .replace(/\]/g, "\\]") + .replace(/\^/g, "\\^") + .replace(/-/g, "\\-") + .replace(/\0/g, "\\0") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x0F]/g, (ch) => "\\x0" + hex(ch)) + .replace(/[\x10-\x1F\x7F-\x9F]/g, (ch) => "\\x" + hex(ch)); + } + function describeExpectation(expectation) { + switch (expectation.type) { + case "literal": + return "\"" + literalEscape(expectation.text) + "\""; + case "class": + const escapedParts = expectation.parts.map((part) => { + return Array.isArray(part) + ? classEscape(part[0]) + "-" + classEscape(part[1]) + : classEscape(part); + }); + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + case "any": + return "any character"; + case "end": + return "end of input"; + case "other": + return expectation.description; + } + } + function describeExpected(expected1) { + const descriptions = expected1.map(describeExpectation); + let i; + let j; + descriptions.sort(); + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + switch (descriptions.length) { + case 1: + return descriptions[0]; + case 2: + return descriptions[0] + " or " + descriptions[1]; + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + function describeFound(found1) { + return found1 ? "\"" + literalEscape(found1) + "\"" : "end of input"; + } + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + } +} +function peg$parse(input, options) { + options = options !== undefined ? options : {}; + const peg$FAILED = {}; + const peg$startRuleIndices = { Contact: 119, Name_Addr_Header: 156, Record_Route: 176, Request_Response: 81, SIP_URI: 45, Subscription_State: 186, Supported: 191, Require: 182, Via: 194, absoluteURI: 84, Call_ID: 118, Content_Disposition: 130, Content_Length: 135, Content_Type: 136, CSeq: 146, displayName: 122, Event: 149, From: 151, host: 52, Max_Forwards: 154, Min_SE: 213, Proxy_Authenticate: 157, quoted_string: 40, Refer_To: 178, Replaces: 179, Session_Expires: 210, stun_URI: 217, To: 192, turn_URI: 223, uuid: 226, WWW_Authenticate: 209, challenge: 158, sipfrag: 230, Referred_By: 231 }; + let peg$startRuleIndex = 119; + const peg$consts = [ + "\r\n", + peg$literalExpectation("\r\n", false), + /^[0-9]/, + peg$classExpectation([["0", "9"]], false, false), + /^[a-zA-Z]/, + peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), + /^[0-9a-fA-F]/, + peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false), + /^[\0-\xFF]/, + peg$classExpectation([["\0", "\xFF"]], false, false), + /^["]/, + peg$classExpectation(["\""], false, false), + " ", + peg$literalExpectation(" ", false), + "\t", + peg$literalExpectation("\t", false), + /^[a-zA-Z0-9]/, + peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false), + ";", + peg$literalExpectation(";", false), + "/", + peg$literalExpectation("/", false), + "?", + peg$literalExpectation("?", false), + ":", + peg$literalExpectation(":", false), + "@", + peg$literalExpectation("@", false), + "&", + peg$literalExpectation("&", false), + "=", + peg$literalExpectation("=", false), + "+", + peg$literalExpectation("+", false), + "$", + peg$literalExpectation("$", false), + ",", + peg$literalExpectation(",", false), + "-", + peg$literalExpectation("-", false), + "_", + peg$literalExpectation("_", false), + ".", + peg$literalExpectation(".", false), + "!", + peg$literalExpectation("!", false), + "~", + peg$literalExpectation("~", false), + "*", + peg$literalExpectation("*", false), + "'", + peg$literalExpectation("'", false), + "(", + peg$literalExpectation("(", false), + ")", + peg$literalExpectation(")", false), + "%", + peg$literalExpectation("%", false), + function () { return " "; }, + function () { return ':'; }, + /^[!-~]/, + peg$classExpectation([["!", "~"]], false, false), + /^[\x80-\uFFFF]/, + peg$classExpectation([["\x80", "\uFFFF"]], false, false), + /^[\x80-\xBF]/, + peg$classExpectation([["\x80", "\xBF"]], false, false), + /^[a-f]/, + peg$classExpectation([["a", "f"]], false, false), + "`", + peg$literalExpectation("`", false), + "<", + peg$literalExpectation("<", false), + ">", + peg$literalExpectation(">", false), + "\\", + peg$literalExpectation("\\", false), + "[", + peg$literalExpectation("[", false), + "]", + peg$literalExpectation("]", false), + "{", + peg$literalExpectation("{", false), + "}", + peg$literalExpectation("}", false), + function () { return "*"; }, + function () { return "/"; }, + function () { return "="; }, + function () { return "("; }, + function () { return ")"; }, + function () { return ">"; }, + function () { return "<"; }, + function () { return ","; }, + function () { return ";"; }, + function () { return ":"; }, + function () { return "\""; }, + /^[!-']/, + peg$classExpectation([["!", "'"]], false, false), + /^[*-[]/, + peg$classExpectation([["*", "["]], false, false), + /^[\]-~]/, + peg$classExpectation([["]", "~"]], false, false), + function (contents) { + return contents; + }, + /^[#-[]/, + peg$classExpectation([["#", "["]], false, false), + /^[\0-\t]/, + peg$classExpectation([["\0", "\t"]], false, false), + /^[\x0B-\f]/, + peg$classExpectation([["\x0B", "\f"]], false, false), + /^[\x0E-\x7F]/, + peg$classExpectation([["\x0E", "\x7F"]], false, false), + function () { + options = options || { data: {} }; + options.data.uri = new _uri__WEBPACK_IMPORTED_MODULE_0__.URI(options.data.scheme, options.data.user, options.data.host, options.data.port); + delete options.data.scheme; + delete options.data.user; + delete options.data.host; + delete options.data.host_type; + delete options.data.port; + }, + function () { + options = options || { data: {} }; + options.data.uri = new _uri__WEBPACK_IMPORTED_MODULE_0__.URI(options.data.scheme, options.data.user, options.data.host, options.data.port, options.data.uri_params, options.data.uri_headers); + delete options.data.scheme; + delete options.data.user; + delete options.data.host; + delete options.data.host_type; + delete options.data.port; + delete options.data.uri_params; + if (options.startRule === 'SIP_URI') { + options.data = options.data.uri; + } + }, + "sips", + peg$literalExpectation("sips", true), + "sip", + peg$literalExpectation("sip", true), + function (uri_scheme) { + options = options || { data: {} }; + options.data.scheme = uri_scheme; + }, + function () { + options = options || { data: {} }; + options.data.user = decodeURIComponent(text().slice(0, -1)); + }, + function () { + options = options || { data: {} }; + options.data.password = text(); + }, + function () { + options = options || { data: {} }; + options.data.host = text(); + return options.data.host; + }, + function () { + options = options || { data: {} }; + options.data.host_type = 'domain'; + return text(); + }, + /^[a-zA-Z0-9_\-]/, + peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "_", "-"], false, false), + /^[a-zA-Z0-9\-]/, + peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "-"], false, false), + function () { + options = options || { data: {} }; + options.data.host_type = 'IPv6'; + return text(); + }, + "::", + peg$literalExpectation("::", false), + function () { + options = options || { data: {} }; + options.data.host_type = 'IPv6'; + return text(); + }, + function () { + options = options || { data: {} }; + options.data.host_type = 'IPv4'; + return text(); + }, + "25", + peg$literalExpectation("25", false), + /^[0-5]/, + peg$classExpectation([["0", "5"]], false, false), + "2", + peg$literalExpectation("2", false), + /^[0-4]/, + peg$classExpectation([["0", "4"]], false, false), + "1", + peg$literalExpectation("1", false), + /^[1-9]/, + peg$classExpectation([["1", "9"]], false, false), + function (port) { + options = options || { data: {} }; + port = parseInt(port.join('')); + options.data.port = port; + return port; + }, + "transport=", + peg$literalExpectation("transport=", true), + "udp", + peg$literalExpectation("udp", true), + "tcp", + peg$literalExpectation("tcp", true), + "sctp", + peg$literalExpectation("sctp", true), + "tls", + peg$literalExpectation("tls", true), + function (transport) { + options = options || { data: {} }; + if (!options.data.uri_params) + options.data.uri_params = {}; + options.data.uri_params['transport'] = transport.toLowerCase(); + }, + "user=", + peg$literalExpectation("user=", true), + "phone", + peg$literalExpectation("phone", true), + "ip", + peg$literalExpectation("ip", true), + function (user) { + options = options || { data: {} }; + if (!options.data.uri_params) + options.data.uri_params = {}; + options.data.uri_params['user'] = user.toLowerCase(); + }, + "method=", + peg$literalExpectation("method=", true), + function (method) { + options = options || { data: {} }; + if (!options.data.uri_params) + options.data.uri_params = {}; + options.data.uri_params['method'] = method; + }, + "ttl=", + peg$literalExpectation("ttl=", true), + function (ttl) { + options = options || { data: {} }; + if (!options.data.params) + options.data.params = {}; + options.data.params['ttl'] = ttl; + }, + "maddr=", + peg$literalExpectation("maddr=", true), + function (maddr) { + options = options || { data: {} }; + if (!options.data.uri_params) + options.data.uri_params = {}; + options.data.uri_params['maddr'] = maddr; + }, + "lr", + peg$literalExpectation("lr", true), + function () { + options = options || { data: {} }; + if (!options.data.uri_params) + options.data.uri_params = {}; + options.data.uri_params['lr'] = undefined; + }, + function (param, value) { + options = options || { data: {} }; + if (!options.data.uri_params) + options.data.uri_params = {}; + if (value === null) { + value = undefined; + } + else { + value = value[1]; + } + options.data.uri_params[param.toLowerCase()] = value; + }, + function (hname, hvalue) { + hname = hname.join('').toLowerCase(); + hvalue = hvalue.join(''); + options = options || { data: {} }; + if (!options.data.uri_headers) + options.data.uri_headers = {}; + if (!options.data.uri_headers[hname]) { + options.data.uri_headers[hname] = [hvalue]; + } + else { + options.data.uri_headers[hname].push(hvalue); + } + }, + function () { + options = options || { data: {} }; + // lots of tests fail if this isn't guarded... + if (options.startRule === 'Refer_To') { + options.data.uri = new _uri__WEBPACK_IMPORTED_MODULE_0__.URI(options.data.scheme, options.data.user, options.data.host, options.data.port, options.data.uri_params, options.data.uri_headers); + delete options.data.scheme; + delete options.data.user; + delete options.data.host; + delete options.data.host_type; + delete options.data.port; + delete options.data.uri_params; + } + }, + "//", + peg$literalExpectation("//", false), + function () { + options = options || { data: {} }; + options.data.scheme = text(); + }, + peg$literalExpectation("SIP", true), + function () { + options = options || { data: {} }; + options.data.sip_version = text(); + }, + "INVITE", + peg$literalExpectation("INVITE", false), + "ACK", + peg$literalExpectation("ACK", false), + "VXACH", + peg$literalExpectation("VXACH", false), + "OPTIONS", + peg$literalExpectation("OPTIONS", false), + "BYE", + peg$literalExpectation("BYE", false), + "CANCEL", + peg$literalExpectation("CANCEL", false), + "REGISTER", + peg$literalExpectation("REGISTER", false), + "SUBSCRIBE", + peg$literalExpectation("SUBSCRIBE", false), + "NOTIFY", + peg$literalExpectation("NOTIFY", false), + "REFER", + peg$literalExpectation("REFER", false), + "PUBLISH", + peg$literalExpectation("PUBLISH", false), + function () { + options = options || { data: {} }; + options.data.method = text(); + return options.data.method; + }, + function (status_code) { + options = options || { data: {} }; + options.data.status_code = parseInt(status_code.join('')); + }, + function () { + options = options || { data: {} }; + options.data.reason_phrase = text(); + }, + function () { + options = options || { data: {} }; + options.data = text(); + }, + function () { + var idx, length; + options = options || { data: {} }; + length = options.data.multi_header.length; + for (idx = 0; idx < length; idx++) { + if (options.data.multi_header[idx].parsed === null) { + options.data = null; + break; + } + } + if (options.data !== null) { + options.data = options.data.multi_header; + } + else { + options.data = -1; + } + }, + function () { + var header; + options = options || { data: {} }; + if (!options.data.multi_header) + options.data.multi_header = []; + try { + header = new _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); + delete options.data.uri; + delete options.data.displayName; + delete options.data.params; + } + catch (e) { + header = null; + } + options.data.multi_header.push({ 'position': peg$currPos, + 'offset': location().start.offset, + 'parsed': header + }); + }, + function (displayName) { + displayName = text().trim(); + if (displayName[0] === '\"') { + displayName = displayName.substring(1, displayName.length - 1); + } + options = options || { data: {} }; + options.data.displayName = displayName; + }, + "q", + peg$literalExpectation("q", true), + function (q) { + options = options || { data: {} }; + if (!options.data.params) + options.data.params = {}; + options.data.params['q'] = q; + }, + "expires", + peg$literalExpectation("expires", true), + function (expires) { + options = options || { data: {} }; + if (!options.data.params) + options.data.params = {}; + options.data.params['expires'] = expires; + }, + function (delta_seconds) { + return parseInt(delta_seconds.join('')); + }, + "0", + peg$literalExpectation("0", false), + function () { + return parseFloat(text()); + }, + function (param, value) { + options = options || { data: {} }; + if (!options.data.params) + options.data.params = {}; + if (value === null) { + value = undefined; + } + else { + value = value[1]; + } + options.data.params[param.toLowerCase()] = value; + }, + "render", + peg$literalExpectation("render", true), + "session", + peg$literalExpectation("session", true), + "icon", + peg$literalExpectation("icon", true), + "alert", + peg$literalExpectation("alert", true), + function () { + options = options || { data: {} }; + if (options.startRule === 'Content_Disposition') { + options.data.type = text().toLowerCase(); + } + }, + "handling", + peg$literalExpectation("handling", true), + "optional", + peg$literalExpectation("optional", true), + "required", + peg$literalExpectation("required", true), + function (length) { + options = options || { data: {} }; + options.data = parseInt(length.join('')); + }, + function () { + options = options || { data: {} }; + options.data = text(); + }, + "text", + peg$literalExpectation("text", true), + "image", + peg$literalExpectation("image", true), + "audio", + peg$literalExpectation("audio", true), + "video", + peg$literalExpectation("video", true), + "application", + peg$literalExpectation("application", true), + "message", + peg$literalExpectation("message", true), + "multipart", + peg$literalExpectation("multipart", true), + "x-", + peg$literalExpectation("x-", true), + function (cseq_value) { + options = options || { data: {} }; + options.data.value = parseInt(cseq_value.join('')); + }, + function (expires) { options = options || { data: {} }; options.data = expires; }, + function (event_type) { + options = options || { data: {} }; + options.data.event = event_type.toLowerCase(); + }, + function () { + options = options || { data: {} }; + var tag = options.data.tag; + options.data = new _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); + if (tag) { + options.data.setParam('tag', tag); + } + }, + "tag", + peg$literalExpectation("tag", true), + function (tag) { options = options || { data: {} }; options.data.tag = tag; }, + function (forwards) { + options = options || { data: {} }; + options.data = parseInt(forwards.join('')); + }, + function (min_expires) { options = options || { data: {} }; options.data = min_expires; }, + function () { + options = options || { data: {} }; + options.data = new _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); + }, + "digest", + peg$literalExpectation("Digest", true), + "realm", + peg$literalExpectation("realm", true), + function (realm) { options = options || { data: {} }; options.data.realm = realm; }, + "domain", + peg$literalExpectation("domain", true), + "nonce", + peg$literalExpectation("nonce", true), + function (nonce) { options = options || { data: {} }; options.data.nonce = nonce; }, + "opaque", + peg$literalExpectation("opaque", true), + function (opaque) { options = options || { data: {} }; options.data.opaque = opaque; }, + "stale", + peg$literalExpectation("stale", true), + "true", + peg$literalExpectation("true", true), + function () { options = options || { data: {} }; options.data.stale = true; }, + "false", + peg$literalExpectation("false", true), + function () { options = options || { data: {} }; options.data.stale = false; }, + "algorithm", + peg$literalExpectation("algorithm", true), + "md5", + peg$literalExpectation("MD5", true), + "md5-sess", + peg$literalExpectation("MD5-sess", true), + function (algorithm) { + options = options || { data: {} }; + options.data.algorithm = algorithm.toUpperCase(); + }, + "qop", + peg$literalExpectation("qop", true), + "auth-int", + peg$literalExpectation("auth-int", true), + "auth", + peg$literalExpectation("auth", true), + function (qop_value) { + options = options || { data: {} }; + options.data.qop || (options.data.qop = []); + options.data.qop.push(qop_value.toLowerCase()); + }, + function (rack_value) { + options = options || { data: {} }; + options.data.value = parseInt(rack_value.join('')); + }, + function () { + var idx, length; + options = options || { data: {} }; + length = options.data.multi_header.length; + for (idx = 0; idx < length; idx++) { + if (options.data.multi_header[idx].parsed === null) { + options.data = null; + break; + } + } + if (options.data !== null) { + options.data = options.data.multi_header; + } + else { + options.data = -1; + } + }, + function () { + var header; + options = options || { data: {} }; + if (!options.data.multi_header) + options.data.multi_header = []; + try { + header = new _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); + delete options.data.uri; + delete options.data.displayName; + delete options.data.params; + } + catch (e) { + header = null; + } + options.data.multi_header.push({ 'position': peg$currPos, + 'offset': location().start.offset, + 'parsed': header + }); + }, + function () { + options = options || { data: {} }; + options.data = new _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); + }, + function () { + options = options || { data: {} }; + if (!(options.data.replaces_from_tag && options.data.replaces_to_tag)) { + options.data = -1; + } + }, + function () { + options = options || { data: {} }; + options.data = { + call_id: options.data + }; + }, + "from-tag", + peg$literalExpectation("from-tag", true), + function (from_tag) { + options = options || { data: {} }; + options.data.replaces_from_tag = from_tag; + }, + "to-tag", + peg$literalExpectation("to-tag", true), + function (to_tag) { + options = options || { data: {} }; + options.data.replaces_to_tag = to_tag; + }, + "early-only", + peg$literalExpectation("early-only", true), + function () { + options = options || { data: {} }; + options.data.early_only = true; + }, + function (head, r) { return r; }, + function (head, tail) { return list(head, tail); }, + function (value) { + options = options || { data: {} }; + if (options.startRule === 'Require') { + options.data = value || []; + } + }, + function (rseq_value) { + options = options || { data: {} }; + options.data.value = parseInt(rseq_value.join('')); + }, + "active", + peg$literalExpectation("active", true), + "pending", + peg$literalExpectation("pending", true), + "terminated", + peg$literalExpectation("terminated", true), + function () { + options = options || { data: {} }; + options.data.state = text(); + }, + "reason", + peg$literalExpectation("reason", true), + function (reason) { + options = options || { data: {} }; + if (typeof reason !== 'undefined') + options.data.reason = reason; + }, + function (expires) { + options = options || { data: {} }; + if (typeof expires !== 'undefined') + options.data.expires = expires; + }, + "retry_after", + peg$literalExpectation("retry_after", true), + function (retry_after) { + options = options || { data: {} }; + if (typeof retry_after !== 'undefined') + options.data.retry_after = retry_after; + }, + "deactivated", + peg$literalExpectation("deactivated", true), + "probation", + peg$literalExpectation("probation", true), + "rejected", + peg$literalExpectation("rejected", true), + "timeout", + peg$literalExpectation("timeout", true), + "giveup", + peg$literalExpectation("giveup", true), + "noresource", + peg$literalExpectation("noresource", true), + "invariant", + peg$literalExpectation("invariant", true), + function (value) { + options = options || { data: {} }; + if (options.startRule === 'Supported') { + options.data = value || []; + } + }, + function () { + options = options || { data: {} }; + var tag = options.data.tag; + options.data = new _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(options.data.uri, options.data.displayName, options.data.params); + if (tag) { + options.data.setParam('tag', tag); + } + }, + "ttl", + peg$literalExpectation("ttl", true), + function (via_ttl_value) { + options = options || { data: {} }; + options.data.ttl = via_ttl_value; + }, + "maddr", + peg$literalExpectation("maddr", true), + function (via_maddr) { + options = options || { data: {} }; + options.data.maddr = via_maddr; + }, + "received", + peg$literalExpectation("received", true), + function (via_received) { + options = options || { data: {} }; + options.data.received = via_received; + }, + "branch", + peg$literalExpectation("branch", true), + function (via_branch) { + options = options || { data: {} }; + options.data.branch = via_branch; + }, + "rport", + peg$literalExpectation("rport", true), + function (response_port) { + options = options || { data: {} }; + if (typeof response_port !== 'undefined') + options.data.rport = response_port.join(''); + }, + function (via_protocol) { + options = options || { data: {} }; + options.data.protocol = via_protocol; + }, + peg$literalExpectation("UDP", true), + peg$literalExpectation("TCP", true), + peg$literalExpectation("TLS", true), + peg$literalExpectation("SCTP", true), + function (via_transport) { + options = options || { data: {} }; + options.data.transport = via_transport; + }, + function () { + options = options || { data: {} }; + options.data.host = text(); + }, + function (via_sent_by_port) { + options = options || { data: {} }; + options.data.port = parseInt(via_sent_by_port.join('')); + }, + function (ttl) { + return parseInt(ttl.join('')); + }, + function (deltaSeconds) { + options = options || { data: {} }; + if (options.startRule === 'Session_Expires') { + options.data.deltaSeconds = deltaSeconds; + } + }, + "refresher", + peg$literalExpectation("refresher", false), + "uas", + peg$literalExpectation("uas", false), + "uac", + peg$literalExpectation("uac", false), + function (endpoint) { + options = options || { data: {} }; + if (options.startRule === 'Session_Expires') { + options.data.refresher = endpoint; + } + }, + function (deltaSeconds) { + options = options || { data: {} }; + if (options.startRule === 'Min_SE') { + options.data = deltaSeconds; + } + }, + "stuns", + peg$literalExpectation("stuns", true), + "stun", + peg$literalExpectation("stun", true), + function (scheme) { + options = options || { data: {} }; + options.data.scheme = scheme; + }, + function (host) { + options = options || { data: {} }; + options.data.host = host; + }, + "?transport=", + peg$literalExpectation("?transport=", false), + "turns", + peg$literalExpectation("turns", true), + "turn", + peg$literalExpectation("turn", true), + function (transport) { + options = options || { data: {} }; + options.data.transport = transport; + }, + function () { + options = options || { data: {} }; + options.data = text(); + }, + "Referred-By", + peg$literalExpectation("Referred-By", false), + "b", + peg$literalExpectation("b", false), + "cid", + peg$literalExpectation("cid", false) + ]; + const peg$bytecode = [ + peg$decode("2 \"\"6 7!"), + peg$decode("4\"\"\"5!7#"), + peg$decode("4$\"\"5!7%"), + peg$decode("4&\"\"5!7'"), + peg$decode(";'.# &;("), + peg$decode("4(\"\"5!7)"), + peg$decode("4*\"\"5!7+"), + peg$decode("2,\"\"6,7-"), + peg$decode("2.\"\"6.7/"), + peg$decode("40\"\"5!71"), + peg$decode("22\"\"6273.\x89 &24\"\"6475.} &26\"\"6677.q &28\"\"6879.e &2:\"\"6:7;.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E"), + peg$decode(";).# &;,"), + peg$decode("2F\"\"6F7G.} &2H\"\"6H7I.q &2J\"\"6J7K.e &2L\"\"6L7M.Y &2N\"\"6N7O.M &2P\"\"6P7Q.A &2R\"\"6R7S.5 &2T\"\"6T7U.) &2V\"\"6V7W"), + peg$decode("%%2X\"\"6X7Y/5#;#/,$;#/#$+#)(#'#(\"'#&'#/\"!&,)"), + peg$decode("%%$;$0#*;$&/,#; /#$+\")(\"'#&'#.\" &\"/=#$;$/�#*;$&&&#/'$8\":Z\" )(\"'#&'#"), + peg$decode(";..\" &\""), + peg$decode("%$;'.# &;(0)*;'.# &;(&/?#28\"\"6879/0$;//'$8#:[# )(#'#(\"'#&'#"), + peg$decode("%%$;2/�#*;2&&&#/g#$%$;.0#*;.&/,#;2/#$+\")(\"'#&'#0=*%$;.0#*;.&/,#;2/#$+\")(\"'#&'#&/#$+\")(\"'#&'#/\"!&,)"), + peg$decode("4\\\"\"5!7].# &;3"), + peg$decode("4^\"\"5!7_"), + peg$decode("4`\"\"5!7a"), + peg$decode(";!.) &4b\"\"5!7c"), + peg$decode("%$;).\x95 &2F\"\"6F7G.\x89 &2J\"\"6J7K.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O/\x9E#0\x9B*;).\x95 &2F\"\"6F7G.\x89 &2J\"\"6J7K.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O&&&#/\"!&,)"), + peg$decode("%$;).\x89 &2F\"\"6F7G.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O/\x92#0\x8F*;).\x89 &2F\"\"6F7G.} &2L\"\"6L7M.q &2X\"\"6X7Y.e &2P\"\"6P7Q.Y &2H\"\"6H7I.M &2@\"\"6@7A.A &2d\"\"6d7e.5 &2R\"\"6R7S.) &2N\"\"6N7O&&&#/\"!&,)"), + peg$decode("2T\"\"6T7U.\xE3 &2V\"\"6V7W.\xD7 &2f\"\"6f7g.\xCB &2h\"\"6h7i.\xBF &2:\"\"6:7;.\xB3 &2D\"\"6D7E.\xA7 &22\"\"6273.\x9B &28\"\"6879.\x8F &2j\"\"6j7k.\x83 &;&.} &24\"\"6475.q &2l\"\"6l7m.e &2n\"\"6n7o.Y &26\"\"6677.M &2>\"\"6>7?.A &2p\"\"6p7q.5 &2r\"\"6r7s.) &;'.# &;("), + peg$decode("%$;).\u012B &2F\"\"6F7G.\u011F &2J\"\"6J7K.\u0113 &2L\"\"6L7M.\u0107 &2X\"\"6X7Y.\xFB &2P\"\"6P7Q.\xEF &2H\"\"6H7I.\xE3 &2@\"\"6@7A.\xD7 &2d\"\"6d7e.\xCB &2R\"\"6R7S.\xBF &2N\"\"6N7O.\xB3 &2T\"\"6T7U.\xA7 &2V\"\"6V7W.\x9B &2f\"\"6f7g.\x8F &2h\"\"6h7i.\x83 &28\"\"6879.w &2j\"\"6j7k.k &;&.e &24\"\"6475.Y &2l\"\"6l7m.M &2n\"\"6n7o.A &26\"\"6677.5 &2p\"\"6p7q.) &2r\"\"6r7s/\u0134#0\u0131*;).\u012B &2F\"\"6F7G.\u011F &2J\"\"6J7K.\u0113 &2L\"\"6L7M.\u0107 &2X\"\"6X7Y.\xFB &2P\"\"6P7Q.\xEF &2H\"\"6H7I.\xE3 &2@\"\"6@7A.\xD7 &2d\"\"6d7e.\xCB &2R\"\"6R7S.\xBF &2N\"\"6N7O.\xB3 &2T\"\"6T7U.\xA7 &2V\"\"6V7W.\x9B &2f\"\"6f7g.\x8F &2h\"\"6h7i.\x83 &28\"\"6879.w &2j\"\"6j7k.k &;&.e &24\"\"6475.Y &2l\"\"6l7m.M &2n\"\"6n7o.A &26\"\"6677.5 &2p\"\"6p7q.) &2r\"\"6r7s&&&#/\"!&,)"), + peg$decode("%;//?#2P\"\"6P7Q/0$;//'$8#:t# )(#'#(\"'#&'#"), + peg$decode("%;//?#24\"\"6475/0$;//'$8#:u# )(#'#(\"'#&'#"), + peg$decode("%;//?#2>\"\"6>7?/0$;//'$8#:v# )(#'#(\"'#&'#"), + peg$decode("%;//?#2T\"\"6T7U/0$;//'$8#:w# )(#'#(\"'#&'#"), + peg$decode("%;//?#2V\"\"6V7W/0$;//'$8#:x# )(#'#(\"'#&'#"), + peg$decode("%2h\"\"6h7i/0#;//'$8\":y\" )(\"'#&'#"), + peg$decode("%;//6#2f\"\"6f7g/'$8\":z\" )(\"'#&'#"), + peg$decode("%;//?#2D\"\"6D7E/0$;//'$8#:{# )(#'#(\"'#&'#"), + peg$decode("%;//?#22\"\"6273/0$;//'$8#:|# )(#'#(\"'#&'#"), + peg$decode("%;//?#28\"\"6879/0$;//'$8#:}# )(#'#(\"'#&'#"), + peg$decode("%;//0#;&/'$8\":~\" )(\"'#&'#"), + peg$decode("%;&/0#;//'$8\":~\" )(\"'#&'#"), + peg$decode("%;=/T#$;G.) &;K.# &;F0/*;G.) &;K.# &;F&/,$;>/#$+#)(#'#(\"'#&'#"), + peg$decode("4\x7F\"\"5!7\x80.A &4\x81\"\"5!7\x82.5 &4\x83\"\"5!7\x84.) &;3.# &;."), + peg$decode("%%;//Q#;&/H$$;J.# &;K0)*;J.# &;K&/,$;&/#$+$)($'#(#'#(\"'#&'#/\"!&,)"), + peg$decode("%;//]#;&/T$%$;J.# &;K0)*;J.# &;K&/\"!&,)/1$;&/($8$:\x85$!!)($'#(#'#(\"'#&'#"), + peg$decode(";..G &2L\"\"6L7M.; &4\x86\"\"5!7\x87./ &4\x83\"\"5!7\x84.# &;3"), + peg$decode("%2j\"\"6j7k/J#4\x88\"\"5!7\x89.5 &4\x8A\"\"5!7\x8B.) &4\x8C\"\"5!7\x8D/#$+\")(\"'#&'#"), + peg$decode("%;N/M#28\"\"6879/>$;O.\" &\"/0$;S/'$8$:\x8E$ )($'#(#'#(\"'#&'#"), + peg$decode("%;N/d#28\"\"6879/U$;O.\" &\"/G$;S/>$;_/5$;l.\" &\"/'$8&:\x8F& )(&'#(%'#($'#(#'#(\"'#&'#"), + peg$decode("%3\x90\"\"5$7\x91.) &3\x92\"\"5#7\x93/' 8!:\x94!! )"), + peg$decode("%;P/]#%28\"\"6879/,#;R/#$+\")(\"'#&'#.\" &\"/6$2:\"\"6:7;/'$8#:\x95# )(#'#(\"'#&'#"), + peg$decode("$;+.) &;-.# &;Q/2#0/*;+.) &;-.# &;Q&&&#"), + peg$decode("2<\"\"6<7=.q &2>\"\"6>7?.e &2@\"\"6@7A.Y &2B\"\"6B7C.M &2D\"\"6D7E.A &22\"\"6273.5 &26\"\"6677.) &24\"\"6475"), + peg$decode("%$;+._ &;-.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E0e*;+._ &;-.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E&/& 8!:\x96! )"), + peg$decode("%;T/J#%28\"\"6879/,#;^/#$+\")(\"'#&'#.\" &\"/#$+\")(\"'#&'#"), + peg$decode("%;U.) &;\\.# &;X/& 8!:\x97! )"), + peg$decode("%$%;V/2#2J\"\"6J7K/#$+\")(\"'#&'#0<*%;V/2#2J\"\"6J7K/#$+\")(\"'#&'#&/D#;W/;$2J\"\"6J7K.\" &\"/'$8#:\x98# )(#'#(\"'#&'#"), + peg$decode("$4\x99\"\"5!7\x9A/,#0)*4\x99\"\"5!7\x9A&&&#"), + peg$decode("%4$\"\"5!7%/?#$4\x9B\"\"5!7\x9C0)*4\x9B\"\"5!7\x9C&/#$+\")(\"'#&'#"), + peg$decode("%2l\"\"6l7m/?#;Y/6$2n\"\"6n7o/'$8#:\x9D# )(#'#(\"'#&'#"), + peg$decode("%%;Z/\xB3#28\"\"6879/\xA4$;Z/\x9B$28\"\"6879/\x8C$;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+-)(-'#(,'#(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0790 &%2\x9E\"\"6\x9E7\x9F/\xA4#;Z/\x9B$28\"\"6879/\x8C$;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+,)(,'#(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u06F9 &%2\x9E\"\"6\x9E7\x9F/\x8C#;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+*)(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u067A &%2\x9E\"\"6\x9E7\x9F/t#;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0613 &%2\x9E\"\"6\x9E7\x9F/\\#;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+&)(&'#(%'#($'#(#'#(\"'#&'#.\u05C4 &%2\x9E\"\"6\x9E7\x9F/D#;Z/;$28\"\"6879/,$;[/#$+$)($'#(#'#(\"'#&'#.\u058D &%2\x9E\"\"6\x9E7\x9F/,#;[/#$+\")(\"'#&'#.\u056E &%2\x9E\"\"6\x9E7\x9F/,#;Z/#$+\")(\"'#&'#.\u054F &%;Z/\x9B#2\x9E\"\"6\x9E7\x9F/\x8C$;Z/\x83$28\"\"6879/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$++)(+'#(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u04C7 &%;Z/\xAA#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x83$2\x9E\"\"6\x9E7\x9F/t$;Z/k$28\"\"6879/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+*)(*'#()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0430 &%;Z/\xB9#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x92$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/k$2\x9E\"\"6\x9E7\x9F/\\$;Z/S$28\"\"6879/D$;Z/;$28\"\"6879/,$;[/#$+))()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u038A &%;Z/\xC8#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xA1$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/z$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/S$2\x9E\"\"6\x9E7\x9F/D$;Z/;$28\"\"6879/,$;[/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u02D5 &%;Z/\xD7#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xB0$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x89$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/b$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/;$2\x9E\"\"6\x9E7\x9F/,$;[/#$+')(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0211 &%;Z/\xFE#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xD7$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xB0$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x89$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/b$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/;$2\x9E\"\"6\x9E7\x9F/,$;Z/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#.\u0126 &%;Z/\u011C#%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xF5$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xCE$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\xA7$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/\x80$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/Y$%28\"\"6879/,#;Z/#$+\")(\"'#&'#.\" &\"/2$2\x9E\"\"6\x9E7\x9F/#$+()(('#(''#(&'#(%'#($'#(#'#(\"'#&'#/& 8!:\xA0! )"), + peg$decode("%;#/M#;#.\" &\"/?$;#.\" &\"/1$;#.\" &\"/#$+$)($'#(#'#(\"'#&'#"), + peg$decode("%;Z/;#28\"\"6879/,$;Z/#$+#)(#'#(\"'#&'#.# &;\\"), + peg$decode("%;]/o#2J\"\"6J7K/`$;]/W$2J\"\"6J7K/H$;]/?$2J\"\"6J7K/0$;]/'$8':\xA1' )(''#(&'#(%'#($'#(#'#(\"'#&'#"), + peg$decode("%2\xA2\"\"6\xA27\xA3/2#4\xA4\"\"5!7\xA5/#$+\")(\"'#&'#.\x98 &%2\xA6\"\"6\xA67\xA7/;#4\xA8\"\"5!7\xA9/,$;!/#$+#)(#'#(\"'#&'#.j &%2\xAA\"\"6\xAA7\xAB/5#;!/,$;!/#$+#)(#'#(\"'#&'#.B &%4\xAC\"\"5!7\xAD/,#;!/#$+\")(\"'#&'#.# &;!"), + peg$decode("%%;!.\" &\"/[#;!.\" &\"/M$;!.\" &\"/?$;!.\" &\"/1$;!.\" &\"/#$+%)(%'#($'#(#'#(\"'#&'#/' 8!:\xAE!! )"), + peg$decode("$%22\"\"6273/,#;`/#$+\")(\"'#&'#0<*%22\"\"6273/,#;`/#$+\")(\"'#&'#&"), + peg$decode(";a.A &;b.; &;c.5 &;d./ &;e.) &;f.# &;g"), + peg$decode("%3\xAF\"\"5*7\xB0/a#3\xB1\"\"5#7\xB2.G &3\xB3\"\"5#7\xB4.; &3\xB5\"\"5$7\xB6./ &3\xB7\"\"5#7\xB8.# &;6/($8\":\xB9\"! )(\"'#&'#"), + peg$decode("%3\xBA\"\"5%7\xBB/I#3\xBC\"\"5%7\xBD./ &3\xBE\"\"5\"7\xBF.# &;6/($8\":\xC0\"! )(\"'#&'#"), + peg$decode("%3\xC1\"\"5'7\xC2/1#;\x90/($8\":\xC3\"! )(\"'#&'#"), + peg$decode("%3\xC4\"\"5$7\xC5/1#;\xF0/($8\":\xC6\"! )(\"'#&'#"), + peg$decode("%3\xC7\"\"5&7\xC8/1#;T/($8\":\xC9\"! )(\"'#&'#"), + peg$decode("%3\xCA\"\"5\"7\xCB/N#%2>\"\"6>7?/,#;6/#$+\")(\"'#&'#.\" &\"/'$8\":\xCC\" )(\"'#&'#"), + peg$decode("%;h/P#%2>\"\"6>7?/,#;i/#$+\")(\"'#&'#.\" &\"/)$8\":\xCD\"\"! )(\"'#&'#"), + peg$decode("%$;j/�#*;j&&&#/\"!&,)"), + peg$decode("%$;j/�#*;j&&&#/\"!&,)"), + peg$decode(";k.) &;+.# &;-"), + peg$decode("2l\"\"6l7m.e &2n\"\"6n7o.Y &24\"\"6475.M &28\"\"6879.A &2<\"\"6<7=.5 &2@\"\"6@7A.) &2B\"\"6B7C"), + peg$decode("%26\"\"6677/n#;m/e$$%2<\"\"6<7=/,#;m/#$+\")(\"'#&'#0<*%2<\"\"6<7=/,#;m/#$+\")(\"'#&'#&/#$+#)(#'#(\"'#&'#"), + peg$decode("%;n/A#2>\"\"6>7?/2$;o/)$8#:\xCE#\"\" )(#'#(\"'#&'#"), + peg$decode("$;p.) &;+.# &;-/2#0/*;p.) &;+.# &;-&&&#"), + peg$decode("$;p.) &;+.# &;-0/*;p.) &;+.# &;-&"), + peg$decode("2l\"\"6l7m.e &2n\"\"6n7o.Y &24\"\"6475.M &26\"\"6677.A &28\"\"6879.5 &2@\"\"6@7A.) &2B\"\"6B7C"), + peg$decode(";\x91.# &;r"), + peg$decode("%;\x90/G#;'/>$;s/5$;'/,$;\x84/#$+%)(%'#($'#(#'#(\"'#&'#"), + peg$decode(";M.# &;t"), + peg$decode("%;\x7F/E#28\"\"6879/6$;u.# &;x/'$8#:\xCF# )(#'#(\"'#&'#"), + peg$decode("%;v.# &;w/J#%26\"\"6677/,#;\x83/#$+\")(\"'#&'#.\" &\"/#$+\")(\"'#&'#"), + peg$decode("%2\xD0\"\"6\xD07\xD1/:#;\x80/1$;w.\" &\"/#$+#)(#'#(\"'#&'#"), + peg$decode("%24\"\"6475/,#;{/#$+\")(\"'#&'#"), + peg$decode("%;z/3#$;y0#*;y&/#$+\")(\"'#&'#"), + peg$decode(";*.) &;+.# &;-"), + peg$decode(";+.\x8F &;-.\x89 &22\"\"6273.} &26\"\"6677.q &28\"\"6879.e &2:\"\"6:7;.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E"), + peg$decode("%;|/e#$%24\"\"6475/,#;|/#$+\")(\"'#&'#0<*%24\"\"6475/,#;|/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), + peg$decode("%$;~0#*;~&/e#$%22\"\"6273/,#;}/#$+\")(\"'#&'#0<*%22\"\"6273/,#;}/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), + peg$decode("$;~0#*;~&"), + peg$decode(";+.w &;-.q &28\"\"6879.e &2:\"\"6:7;.Y &2<\"\"6<7=.M &2>\"\"6>7?.A &2@\"\"6@7A.5 &2B\"\"6B7C.) &2D\"\"6D7E"), + peg$decode("%%;\"/\x87#$;\".G &;!.A &2@\"\"6@7A.5 &2F\"\"6F7G.) &2J\"\"6J7K0M*;\".G &;!.A &2@\"\"6@7A.5 &2F\"\"6F7G.) &2J\"\"6J7K&/#$+\")(\"'#&'#/& 8!:\xD2! )"), + peg$decode(";\x81.# &;\x82"), + peg$decode("%%;O/2#2:\"\"6:7;/#$+\")(\"'#&'#.\" &\"/,#;S/#$+\")(\"'#&'#.\" &\""), + peg$decode("$;+.\x83 &;-.} &2B\"\"6B7C.q &2D\"\"6D7E.e &22\"\"6273.Y &28\"\"6879.M &2:\"\"6:7;.A &2<\"\"6<7=.5 &2>\"\"6>7?.) &2@\"\"6@7A/\x8C#0\x89*;+.\x83 &;-.} &2B\"\"6B7C.q &2D\"\"6D7E.e &22\"\"6273.Y &28\"\"6879.M &2:\"\"6:7;.A &2<\"\"6<7=.5 &2>\"\"6>7?.) &2@\"\"6@7A&&&#"), + peg$decode("$;y0#*;y&"), + peg$decode("%3\x92\"\"5#7\xD3/q#24\"\"6475/b$$;!/�#*;!&&&#/L$2J\"\"6J7K/=$$;!/�#*;!&&&#/'$8%:\xD4% )(%'#($'#(#'#(\"'#&'#"), + peg$decode("2\xD5\"\"6\xD57\xD6"), + peg$decode("2\xD7\"\"6\xD77\xD8"), + peg$decode("2\xD9\"\"6\xD97\xDA"), + peg$decode("2\xDB\"\"6\xDB7\xDC"), + peg$decode("2\xDD\"\"6\xDD7\xDE"), + peg$decode("2\xDF\"\"6\xDF7\xE0"), + peg$decode("2\xE1\"\"6\xE17\xE2"), + peg$decode("2\xE3\"\"6\xE37\xE4"), + peg$decode("2\xE5\"\"6\xE57\xE6"), + peg$decode("2\xE7\"\"6\xE77\xE8"), + peg$decode("2\xE9\"\"6\xE97\xEA"), + peg$decode("%;\x85.Y &;\x86.S &;\x88.M &;\x89.G &;\x8A.A &;\x8B.; &;\x8C.5 &;\x8F./ &;\x8D.) &;\x8E.# &;6/& 8!:\xEB! )"), + peg$decode("%;\x84/G#;'/>$;\x92/5$;'/,$;\x94/#$+%)(%'#($'#(#'#(\"'#&'#"), + peg$decode("%;\x93/' 8!:\xEC!! )"), + peg$decode("%;!/5#;!/,$;!/#$+#)(#'#(\"'#&'#"), + peg$decode("%$;*.A &;+.; &;-.5 &;3./ &;4.) &;'.# &;(0G*;*.A &;+.; &;-.5 &;3./ &;4.) &;'.# &;(&/& 8!:\xED! )"), + peg$decode("%;\xB6/Y#$%;A/,#;\xB6/#$+\")(\"'#&'#06*%;A/,#;\xB6/#$+\")(\"'#&'#&/#$+\")(\"'#&'#"), + peg$decode("%;9/N#%2:\"\"6:7;/,#;9/#$+\")(\"'#&'#.\" &\"/'$8\":\xEE\" )(\"'#&'#"), + peg$decode("%;:.c &%;\x98/Y#$%;A/,#;\x98/#$+\")(\"'#&'#06*%;A/,#;\x98/#$+\")(\"'#&'#&/#$+\")(\"'#&'#/& 8!:\xEF! )"), + peg$decode("%;L.# &;\x99/]#$%;B/,#;\x9B/#$+\")(\"'#&'#06*%;B/,#;\x9B/#$+\")(\"'#&'#&/'$8\":\xF0\" )(\"'#&'#"), + peg$decode("%;\x9A.\" &\"/>#;@/5$;M/,$;?/#$+$)($'#(#'#(\"'#&'#"), + peg$decode("%%;6/Y#$%;./,#;6/#$+\")(\"'#&'#06*%;./,#;6/#$+\")(\"'#&'#&/#$+\")(\"'#&'#.# &;H/' 8!:\xF1!! )"), + peg$decode(";\x9C.) &;\x9D.# &;\xA0"), + peg$decode("%3\xF2\"\"5!7\xF3/:#;$;\xCF/5$;./,$;\x90/#$+%)(%'#($'#(#'#(\"'#&'#"), + peg$decode("%$;!/�#*;!&&&#/' 8!:\u014B!! )"), + peg$decode("%;\xD1/]#$%;A/,#;\xD1/#$+\")(\"'#&'#06*%;A/,#;\xD1/#$+\")(\"'#&'#&/'$8\":\u014C\" )(\"'#&'#"), + peg$decode("%;\x99/]#$%;B/,#;\xA0/#$+\")(\"'#&'#06*%;B/,#;\xA0/#$+\")(\"'#&'#&/'$8\":\u014D\" )(\"'#&'#"), + peg$decode("%;L.O &;\x99.I &%;@.\" &\"/:#;t/1$;?.\" &\"/#$+#)(#'#(\"'#&'#/]#$%;B/,#;\xA0/#$+\")(\"'#&'#06*%;B/,#;\xA0/#$+\")(\"'#&'#&/'$8\":\u014E\" )(\"'#&'#"), + peg$decode("%;\xD4/]#$%;B/,#;\xD5/#$+\")(\"'#&'#06*%;B/,#;\xD5/#$+\")(\"'#&'#&/'$8\":\u014F\" )(\"'#&'#"), + peg$decode("%;\x96/& 8!:\u0150! )"), + peg$decode("%3\u0151\"\"5(7\u0152/:#;$;6/5$;;/,$;\xEC/#$+%)(%'#($'#(#'#(\"'#&'#"), + peg$decode("%3\x92\"\"5#7\xD3.# &;6/' 8!:\u018B!! )"), + peg$decode("%3\xB1\"\"5#7\u018C.G &3\xB3\"\"5#7\u018D.; &3\xB7\"\"5#7\u018E./ &3\xB5\"\"5$7\u018F.# &;6/' 8!:\u0190!! )"), + peg$decode("%;\xEE/D#%;C/,#;\xEF/#$+\")(\"'#&'#.\" &\"/#$+\")(\"'#&'#"), + peg$decode("%;U.) &;\\.# &;X/& 8!:\u0191! )"), + peg$decode("%%;!.\" &\"/[#;!.\" &\"/M$;!.\" &\"/?$;!.\" &\"/1$;!.\" &\"/#$+%)(%'#($'#(#'#(\"'#&'#/' 8!:\u0192!! )"), + peg$decode("%%;!/?#;!.\" &\"/1$;!.\" &\"/#$+#)(#'#(\"'#&'#/' 8!:\u0193!! )"), + peg$decode(";\xBE"), + peg$decode("%;\x9E/^#$%;B/,#;\xF3/#$+\")(\"'#&'#06*%;B/,#;\xF3/#$+\")(\"'#&'#&/($8\":\u0194\"!!)(\"'#&'#"), + peg$decode(";\xF4.# &;\xA0"), + peg$decode("%2\u0195\"\"6\u01957\u0196/L#;\"\"6>7?"), + peg$decode("%;\u0100/b#28\"\"6879/S$;\xFB/J$%2\u01A3\"\"6\u01A37\u01A4/,#;\xEC/#$+\")(\"'#&'#.\" &\"/#$+$)($'#(#'#(\"'#&'#"), + peg$decode("%3\u01A5\"\"5%7\u01A6.) &3\u01A7\"\"5$7\u01A8/' 8!:\u01A1!! )"), + peg$decode("%3\xB1\"\"5#7\xB2.6 &3\xB3\"\"5#7\xB4.* &$;+0#*;+&/' 8!:\u01A9!! )"), + peg$decode("%;\u0104/\x87#2F\"\"6F7G/x$;\u0103/o$2F\"\"6F7G/`$;\u0103/W$2F\"\"6F7G/H$;\u0103/?$2F\"\"6F7G/0$;\u0105/'$8):\u01AA) )()'#(('#(''#(&'#(%'#($'#(#'#(\"'#&'#"), + peg$decode("%;#/>#;#/5$;#/,$;#/#$+$)($'#(#'#(\"'#&'#"), + peg$decode("%;\u0103/,#;\u0103/#$+\")(\"'#&'#"), + peg$decode("%;\u0103/5#;\u0103/,$;\u0103/#$+#)(#'#(\"'#&'#"), + peg$decode("%;q/T#$;m0#*;m&/D$%; /,#;\xF8/#$+\")(\"'#&'#.\" &\"/#$+#)(#'#(\"'#&'#"), + peg$decode("%2\u01AB\"\"6\u01AB7\u01AC.) &2\u01AD\"\"6\u01AD7\u01AE/w#;0/n$;\u0108/e$$%;B/2#;\u0109.# &;\xA0/#$+\")(\"'#&'#0<*%;B/2#;\u0109.# &;\xA0/#$+\")(\"'#&'#&/#$+$)($'#(#'#(\"'#&'#"), + peg$decode(";\x99.# &;L"), + peg$decode("%2\u01AF\"\"6\u01AF7\u01B0/5#; peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + peg$maxFailExpected.push(expected1); + } + function peg$buildSimpleError(message, location1) { + return new SyntaxError(message, [], "", location1); + } + function peg$buildStructuredError(expected1, found, location1) { + return new SyntaxError(SyntaxError.buildMessage(expected1, found), expected1, found, location1); + } + function peg$decode(s) { + return s.split("").map((ch) => ch.charCodeAt(0) - 32); + } + function peg$parseRule(index) { + const bc = peg$bytecode[index]; + let ip = 0; + const ips = []; + let end = bc.length; + const ends = []; + const stack = []; + let params; + while (true) { + while (ip < end) { + switch (bc[ip]) { + case 0: + stack.push(peg$consts[bc[ip + 1]]); + ip += 2; + break; + case 1: + stack.push(undefined); + ip++; + break; + case 2: + stack.push(null); + ip++; + break; + case 3: + stack.push(peg$FAILED); + ip++; + break; + case 4: + stack.push([]); + ip++; + break; + case 5: + stack.push(peg$currPos); + ip++; + break; + case 6: + stack.pop(); + ip++; + break; + case 7: + peg$currPos = stack.pop(); + ip++; + break; + case 8: + stack.length -= bc[ip + 1]; + ip += 2; + break; + case 9: + stack.splice(-2, 1); + ip++; + break; + case 10: + stack[stack.length - 2].push(stack.pop()); + ip++; + break; + case 11: + stack.push(stack.splice(stack.length - bc[ip + 1], bc[ip + 1])); + ip += 2; + break; + case 12: + stack.push(input.substring(stack.pop(), peg$currPos)); + ip++; + break; + case 13: + ends.push(end); + ips.push(ip + 3 + bc[ip + 1] + bc[ip + 2]); + if (stack[stack.length - 1]) { + end = ip + 3 + bc[ip + 1]; + ip += 3; + } + else { + end = ip + 3 + bc[ip + 1] + bc[ip + 2]; + ip += 3 + bc[ip + 1]; + } + break; + case 14: + ends.push(end); + ips.push(ip + 3 + bc[ip + 1] + bc[ip + 2]); + if (stack[stack.length - 1] === peg$FAILED) { + end = ip + 3 + bc[ip + 1]; + ip += 3; + } + else { + end = ip + 3 + bc[ip + 1] + bc[ip + 2]; + ip += 3 + bc[ip + 1]; + } + break; + case 15: + ends.push(end); + ips.push(ip + 3 + bc[ip + 1] + bc[ip + 2]); + if (stack[stack.length - 1] !== peg$FAILED) { + end = ip + 3 + bc[ip + 1]; + ip += 3; + } + else { + end = ip + 3 + bc[ip + 1] + bc[ip + 2]; + ip += 3 + bc[ip + 1]; + } + break; + case 16: + if (stack[stack.length - 1] !== peg$FAILED) { + ends.push(end); + ips.push(ip); + end = ip + 2 + bc[ip + 1]; + ip += 2; + } + else { + ip += 2 + bc[ip + 1]; + } + break; + case 17: + ends.push(end); + ips.push(ip + 3 + bc[ip + 1] + bc[ip + 2]); + if (input.length > peg$currPos) { + end = ip + 3 + bc[ip + 1]; + ip += 3; + } + else { + end = ip + 3 + bc[ip + 1] + bc[ip + 2]; + ip += 3 + bc[ip + 1]; + } + break; + case 18: + ends.push(end); + ips.push(ip + 4 + bc[ip + 2] + bc[ip + 3]); + if (input.substr(peg$currPos, peg$consts[bc[ip + 1]].length) === peg$consts[bc[ip + 1]]) { + end = ip + 4 + bc[ip + 2]; + ip += 4; + } + else { + end = ip + 4 + bc[ip + 2] + bc[ip + 3]; + ip += 4 + bc[ip + 2]; + } + break; + case 19: + ends.push(end); + ips.push(ip + 4 + bc[ip + 2] + bc[ip + 3]); + if (input.substr(peg$currPos, peg$consts[bc[ip + 1]].length).toLowerCase() === peg$consts[bc[ip + 1]]) { + end = ip + 4 + bc[ip + 2]; + ip += 4; + } + else { + end = ip + 4 + bc[ip + 2] + bc[ip + 3]; + ip += 4 + bc[ip + 2]; + } + break; + case 20: + ends.push(end); + ips.push(ip + 4 + bc[ip + 2] + bc[ip + 3]); + if (peg$consts[bc[ip + 1]].test(input.charAt(peg$currPos))) { + end = ip + 4 + bc[ip + 2]; + ip += 4; + } + else { + end = ip + 4 + bc[ip + 2] + bc[ip + 3]; + ip += 4 + bc[ip + 2]; + } + break; + case 21: + stack.push(input.substr(peg$currPos, bc[ip + 1])); + peg$currPos += bc[ip + 1]; + ip += 2; + break; + case 22: + stack.push(peg$consts[bc[ip + 1]]); + peg$currPos += peg$consts[bc[ip + 1]].length; + ip += 2; + break; + case 23: + stack.push(peg$FAILED); + if (peg$silentFails === 0) { + peg$fail(peg$consts[bc[ip + 1]]); + } + ip += 2; + break; + case 24: + peg$savedPos = stack[stack.length - 1 - bc[ip + 1]]; + ip += 2; + break; + case 25: + peg$savedPos = peg$currPos; + ip++; + break; + case 26: + params = bc.slice(ip + 4, ip + 4 + bc[ip + 3]) + .map(function (p) { return stack[stack.length - 1 - p]; }); + stack.splice(stack.length - bc[ip + 2], bc[ip + 2], peg$consts[bc[ip + 1]].apply(null, params)); + ip += 4 + bc[ip + 3]; + break; + case 27: + stack.push(peg$parseRule(bc[ip + 1])); + ip += 2; + break; + case 28: + peg$silentFails++; + ip++; + break; + case 29: + peg$silentFails--; + ip++; + break; + default: + throw new Error("Invalid opcode: " + bc[ip] + "."); + } + } + if (ends.length > 0) { + end = ends.pop(); + ip = ips.pop(); + } + else { + break; + } + } + return stack[0]; + } + options.data = {}; // Object to which header attributes will be assigned during parsing + function list(head, tail) { + return [head].concat(tail); + } + peg$result = peg$parseRule(peg$startRuleIndex); + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } + else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)); + } +} +const parse = peg$parse; + + +/***/ }), +/* 23 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "URI": () => (/* binding */ URI), +/* harmony export */ "equivalentURI": () => (/* binding */ equivalentURI) +/* harmony export */ }); +/* harmony import */ var _parameters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24); +/* eslint-disable @typescript-eslint/no-explicit-any */ + +/** + * URI. + * @public + */ +class URI extends _parameters__WEBPACK_IMPORTED_MODULE_0__.Parameters { + /** + * Constructor + * @param scheme - + * @param user - + * @param host - + * @param port - + * @param parameters - + * @param headers - + */ + constructor(scheme = "sip", user, host, port, parameters, headers) { + super(parameters || {}); + this.headers = {}; + // Checks + if (!host) { + throw new TypeError('missing or invalid "host" parameter'); + } + for (const header in headers) { + // eslint-disable-next-line no-prototype-builtins + if (headers.hasOwnProperty(header)) { + this.setHeader(header, headers[header]); + } + } + // Raw URI + this.raw = { + scheme, + user, + host, + port + }; + // Normalized URI + this.normal = { + scheme: scheme.toLowerCase(), + user, + host: host.toLowerCase(), + port + }; + } + get scheme() { return this.normal.scheme; } + set scheme(value) { + this.raw.scheme = value; + this.normal.scheme = value.toLowerCase(); + } + get user() { return this.normal.user; } + set user(value) { + this.normal.user = this.raw.user = value; + } + get host() { return this.normal.host; } + set host(value) { + this.raw.host = value; + this.normal.host = value.toLowerCase(); + } + get aor() { return this.normal.user + "@" + this.normal.host; } + get port() { return this.normal.port; } + set port(value) { + this.normal.port = this.raw.port = value === 0 ? value : value; + } + setHeader(name, value) { + this.headers[this.headerize(name)] = (value instanceof Array) ? value : [value]; + } + getHeader(name) { + if (name) { + return this.headers[this.headerize(name)]; + } + } + hasHeader(name) { + // eslint-disable-next-line no-prototype-builtins + return !!name && !!this.headers.hasOwnProperty(this.headerize(name)); + } + deleteHeader(header) { + header = this.headerize(header); + // eslint-disable-next-line no-prototype-builtins + if (this.headers.hasOwnProperty(header)) { + const value = this.headers[header]; + delete this.headers[header]; + return value; + } + } + clearHeaders() { + this.headers = {}; + } + clone() { + return new URI(this._raw.scheme, this._raw.user || "", this._raw.host, this._raw.port, JSON.parse(JSON.stringify(this.parameters)), JSON.parse(JSON.stringify(this.headers))); + } + toRaw() { + return this._toString(this._raw); + } + toString() { + return this._toString(this._normal); + } + get _normal() { return this.normal; } + get _raw() { return this.raw; } + _toString(uri) { + let uriString = uri.scheme + ":"; + // add slashes if it's not a sip(s) URI + if (!uri.scheme.toLowerCase().match("^sips?$")) { + uriString += "//"; + } + if (uri.user) { + uriString += this.escapeUser(uri.user) + "@"; + } + uriString += uri.host; + if (uri.port || uri.port === 0) { + uriString += ":" + uri.port; + } + for (const parameter in this.parameters) { + // eslint-disable-next-line no-prototype-builtins + if (this.parameters.hasOwnProperty(parameter)) { + uriString += ";" + parameter; + if (this.parameters[parameter] !== null) { + uriString += "=" + this.parameters[parameter]; + } + } + } + const headers = []; + for (const header in this.headers) { + // eslint-disable-next-line no-prototype-builtins + if (this.headers.hasOwnProperty(header)) { + // eslint-disable-next-line @typescript-eslint/no-for-in-array + for (const idx in this.headers[header]) { + // eslint-disable-next-line no-prototype-builtins + if (this.headers[header].hasOwnProperty(idx)) { + headers.push(header + "=" + this.headers[header][idx]); + } + } + } + } + if (headers.length > 0) { + uriString += "?" + headers.join("&"); + } + return uriString; + } + /* + * Hex-escape a SIP URI user. + * @private + * @param {String} user + */ + escapeUser(user) { + let decodedUser; + // FIXME: This is called by toString above which should never throw, but + // decodeURIComponent can throw and I've seen one case in production where + // it did throw resulting in a cascading failure. This class should be + // fixed so that decodeURIComponent is not called at this point (in toString). + // The user should be decoded when the URI is constructor or some other + // place where we can catch the error before the URI is created or somesuch. + // eslint-disable-next-line no-useless-catch + try { + decodedUser = decodeURIComponent(user); + } + catch (error) { + throw error; + } + // Don't hex-escape ':' (%3A), '+' (%2B), '?' (%3F"), '/' (%2F). + return encodeURIComponent(decodedUser) + .replace(/%3A/ig, ":") + .replace(/%2B/ig, "+") + .replace(/%3F/ig, "?") + .replace(/%2F/ig, "/"); + } + headerize(str) { + const exceptions = { + "Call-Id": "Call-ID", + "Cseq": "CSeq", + "Min-Se": "Min-SE", + "Rack": "RAck", + "Rseq": "RSeq", + "Www-Authenticate": "WWW-Authenticate", + }; + const name = str.toLowerCase().replace(/_/g, "-").split("-"); + const parts = name.length; + let hname = ""; + for (let part = 0; part < parts; part++) { + if (part !== 0) { + hname += "-"; + } + hname += name[part].charAt(0).toUpperCase() + name[part].substring(1); + } + if (exceptions[hname]) { + hname = exceptions[hname]; + } + return hname; + } +} +/** + * Returns true if URIs are equivalent per RFC 3261 Section 19.1.4. + * @param a URI to compare + * @param b URI to compare + * + * @remarks + * 19.1.4 URI Comparison + * Some operations in this specification require determining whether two + * SIP or SIPS URIs are equivalent. + * + * https://tools.ietf.org/html/rfc3261#section-19.1.4 + * @internal + */ +function equivalentURI(a, b) { + // o A SIP and SIPS URI are never equivalent. + if (a.scheme !== b.scheme) { + return false; + } + // o Comparison of the userinfo of SIP and SIPS URIs is case- + // sensitive. This includes userinfo containing passwords or + // formatted as telephone-subscribers. Comparison of all other + // components of the URI is case-insensitive unless explicitly + // defined otherwise. + // + // o The ordering of parameters and header fields is not significant + // in comparing SIP and SIPS URIs. + // + // o Characters other than those in the "reserved" set (see RFC 2396 + // [5]) are equivalent to their ""%" HEX HEX" encoding. + // + // o An IP address that is the result of a DNS lookup of a host name + // does not match that host name. + // + // o For two URIs to be equal, the user, password, host, and port + // components must match. + // + // A URI omitting the user component will not match a URI that + // includes one. A URI omitting the password component will not + // match a URI that includes one. + // + // A URI omitting any component with a default value will not + // match a URI explicitly containing that component with its + // default value. For instance, a URI omitting the optional port + // component will not match a URI explicitly declaring port 5060. + // The same is true for the transport-parameter, ttl-parameter, + // user-parameter, and method components. + // + // Defining sip:user@host to not be equivalent to + // sip:user@host:5060 is a change from RFC 2543. When deriving + // addresses from URIs, equivalent addresses are expected from + // equivalent URIs. The URI sip:user@host:5060 will always + // resolve to port 5060. The URI sip:user@host may resolve to + // other ports through the DNS SRV mechanisms detailed in [4]. + // FIXME: TODO: + // - character compared to hex encoding is not handled + // - password does not exist on URI currently + if (a.user !== b.user || a.host !== b.host || a.port !== b.port) { + return false; + } + // o URI uri-parameter components are compared as follows: + function compareParameters(a, b) { + // - Any uri-parameter appearing in both URIs must match. + const parameterKeysA = Object.keys(a.parameters); + const parameterKeysB = Object.keys(b.parameters); + const intersection = parameterKeysA.filter(x => parameterKeysB.includes(x)); + if (!intersection.every(key => a.parameters[key] === b.parameters[key])) { + return false; + } + // - A user, ttl, or method uri-parameter appearing in only one + // URI never matches, even if it contains the default value. + if (!["user", "ttl", "method", "transport"].every(key => a.hasParam(key) && b.hasParam(key) || !a.hasParam(key) && !b.hasParam(key))) { + return false; + } + // - A URI that includes an maddr parameter will not match a URI + // that contains no maddr parameter. + if (!["maddr"].every(key => a.hasParam(key) && b.hasParam(key) || !a.hasParam(key) && !b.hasParam(key))) { + return false; + } + // - All other uri-parameters appearing in only one URI are + // ignored when comparing the URIs. + return true; + } + if (!compareParameters(a, b)) { + return false; + } + // o URI header components are never ignored. Any present header + // component MUST be present in both URIs and match for the URIs + // to match. The matching rules are defined for each header field + // in Section 20. + const headerKeysA = Object.keys(a.headers); + const headerKeysB = Object.keys(b.headers); + // No need to check if no headers + if (headerKeysA.length !== 0 || headerKeysB.length !== 0) { + // Must have same number of headers + if (headerKeysA.length !== headerKeysB.length) { + return false; + } + // Must have same headers + const intersection = headerKeysA.filter(x => headerKeysB.includes(x)); + if (intersection.length !== headerKeysB.length) { + return false; + } + // FIXME: Not to spec. But perhaps not worth fixing? + // Must have same header values + // It seems too much to consider multiple headers with same name. + // It seems too much to compare two header params according to the rule of each header. + // We'll assume a single header and compare them string to string... + if (!intersection.every(key => a.headers[key].length && b.headers[key].length && a.headers[key][0] === b.headers[key][0])) { + return false; + } + } + return true; +} + + +/***/ }), +/* 24 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parameters": () => (/* binding */ Parameters) +/* harmony export */ }); +/** + * @internal + */ +class Parameters { + constructor(parameters) { + this.parameters = {}; + // for in is required here as the Grammar parser is adding to the prototype chain + for (const param in parameters) { + // eslint-disable-next-line no-prototype-builtins + if (parameters.hasOwnProperty(param)) { + this.setParam(param, parameters[param]); + } + } + } + setParam(key, value) { + if (key) { + this.parameters[key.toLowerCase()] = (typeof value === "undefined" || value === null) ? null : value.toString(); + } + } + getParam(key) { + if (key) { + return this.parameters[key.toLowerCase()]; + } + } + hasParam(key) { + return !!(key && this.parameters[key.toLowerCase()] !== undefined); + } + deleteParam(key) { + key = key.toLowerCase(); + if (this.hasParam(key)) { + const value = this.parameters[key]; + delete this.parameters[key]; + return value; + } + } + clearParams() { + this.parameters = {}; + } +} + + +/***/ }), +/* 25 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NameAddrHeader": () => (/* binding */ NameAddrHeader) +/* harmony export */ }); +/* harmony import */ var _parameters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(24); + +/** + * Name Address SIP header. + * @public + */ +class NameAddrHeader extends _parameters__WEBPACK_IMPORTED_MODULE_0__.Parameters { + /** + * Constructor + * @param uri - + * @param displayName - + * @param parameters - + */ + constructor(uri, displayName, parameters) { + super(parameters); + this.uri = uri; + this._displayName = displayName; + } + get friendlyName() { + return this.displayName || this.uri.aor; + } + get displayName() { return this._displayName; } + set displayName(value) { + this._displayName = value; + } + clone() { + return new NameAddrHeader(this.uri.clone(), this._displayName, JSON.parse(JSON.stringify(this.parameters))); + } + toString() { + let body = (this.displayName || this.displayName === "0") ? '"' + this.displayName + '" ' : ""; + body += "<" + this.uri.toString() + ">"; + for (const parameter in this.parameters) { + // eslint-disable-next-line no-prototype-builtins + if (this.parameters.hasOwnProperty(parameter)) { + body += ";" + parameter; + if (this.parameters[parameter] !== null) { + body += "=" + this.parameters[parameter]; + } + } + } + return body; + } +} + + +/***/ }), +/* 26 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "IncomingResponseMessage": () => (/* binding */ IncomingResponseMessage) +/* harmony export */ }); +/* harmony import */ var _incoming_message__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(19); + +/** + * Incoming response message. + * @public + */ +class IncomingResponseMessage extends _incoming_message__WEBPACK_IMPORTED_MODULE_0__.IncomingMessage { + constructor() { + super(); + } +} + + +/***/ }), +/* 27 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "OutgoingRequestMessage": () => (/* binding */ OutgoingRequestMessage) +/* harmony export */ }); +/* harmony import */ var _grammar__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); + + +/** + * Outgoing SIP request message. + * @public + */ +class OutgoingRequestMessage { + constructor(method, ruri, fromURI, toURI, options, extraHeaders, body) { + this.headers = {}; + this.extraHeaders = []; + // Initialize default options + this.options = OutgoingRequestMessage.getDefaultOptions(); + // Options - merge a deep copy + if (options) { + this.options = Object.assign(Object.assign({}, this.options), options); + if (this.options.optionTags && this.options.optionTags.length) { + this.options.optionTags = this.options.optionTags.slice(); + } + if (this.options.routeSet && this.options.routeSet.length) { + this.options.routeSet = this.options.routeSet.slice(); + } + } + // Extra headers - deep copy + if (extraHeaders && extraHeaders.length) { + this.extraHeaders = extraHeaders.slice(); + } + // Body - deep copy + if (body) { + // TODO: internal representation should be Body + // this.body = { ...body }; + this.body = { + body: body.content, + contentType: body.contentType + }; + } + // Method + this.method = method; + // RURI + this.ruri = ruri.clone(); + // From + this.fromURI = fromURI.clone(); + this.fromTag = this.options.fromTag ? this.options.fromTag : (0,_utils__WEBPACK_IMPORTED_MODULE_0__.newTag)(); + this.from = OutgoingRequestMessage.makeNameAddrHeader(this.fromURI, this.options.fromDisplayName, this.fromTag); + // To + this.toURI = toURI.clone(); + this.toTag = this.options.toTag; + this.to = OutgoingRequestMessage.makeNameAddrHeader(this.toURI, this.options.toDisplayName, this.toTag); + // Call-ID + this.callId = this.options.callId ? this.options.callId : this.options.callIdPrefix + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createRandomToken)(15); + // CSeq + this.cseq = this.options.cseq; + // The relative order of header fields with different field names is not + // significant. However, it is RECOMMENDED that header fields which are + // needed for proxy processing (Via, Route, Record-Route, Proxy-Require, + // Max-Forwards, and Proxy-Authorization, for example) appear towards + // the top of the message to facilitate rapid parsing. + // https://tools.ietf.org/html/rfc3261#section-7.3.1 + this.setHeader("route", this.options.routeSet); + this.setHeader("via", ""); + this.setHeader("to", this.to.toString()); + this.setHeader("from", this.from.toString()); + this.setHeader("cseq", this.cseq + " " + this.method); + this.setHeader("call-id", this.callId); + this.setHeader("max-forwards", "70"); + } + /** Get a copy of the default options. */ + static getDefaultOptions() { + return { + callId: "", + callIdPrefix: "", + cseq: 1, + toDisplayName: "", + toTag: "", + fromDisplayName: "", + fromTag: "", + forceRport: false, + hackViaTcp: false, + optionTags: ["outbound"], + routeSet: [], + userAgentString: "sip.js", + viaHost: "" + }; + } + static makeNameAddrHeader(uri, displayName, tag) { + const parameters = {}; + if (tag) { + parameters.tag = tag; + } + return new _grammar__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader(uri, displayName, parameters); + } + /** + * Get the value of the given header name at the given position. + * @param name - header name + * @returns Returns the specified header, undefined if header doesn't exist. + */ + getHeader(name) { + const header = this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)]; + if (header) { + if (header[0]) { + return header[0]; + } + } + else { + const regexp = new RegExp("^\\s*" + name + "\\s*:", "i"); + for (const exHeader of this.extraHeaders) { + if (regexp.test(exHeader)) { + return exHeader.substring(exHeader.indexOf(":") + 1).trim(); + } + } + } + return; + } + /** + * Get the header/s of the given name. + * @param name - header name + * @returns Array with all the headers of the specified name. + */ + getHeaders(name) { + const result = []; + const headerArray = this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)]; + if (headerArray) { + for (const headerPart of headerArray) { + result.push(headerPart); + } + } + else { + const regexp = new RegExp("^\\s*" + name + "\\s*:", "i"); + for (const exHeader of this.extraHeaders) { + if (regexp.test(exHeader)) { + result.push(exHeader.substring(exHeader.indexOf(":") + 1).trim()); + } + } + } + return result; + } + /** + * Verify the existence of the given header. + * @param name - header name + * @returns true if header with given name exists, false otherwise + */ + hasHeader(name) { + if (this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)]) { + return true; + } + else { + const regexp = new RegExp("^\\s*" + name + "\\s*:", "i"); + for (const extraHeader of this.extraHeaders) { + if (regexp.test(extraHeader)) { + return true; + } + } + } + return false; + } + /** + * Replace the the given header by the given value. + * @param name - header name + * @param value - header value + */ + setHeader(name, value) { + this.headers[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.headerize)(name)] = value instanceof Array ? value : [value]; + } + /** + * The Via header field indicates the transport used for the transaction + * and identifies the location where the response is to be sent. A Via + * header field value is added only after the transport that will be + * used to reach the next hop has been selected (which may involve the + * usage of the procedures in [4]). + * + * When the UAC creates a request, it MUST insert a Via into that + * request. The protocol name and protocol version in the header field + * MUST be SIP and 2.0, respectively. The Via header field value MUST + * contain a branch parameter. This parameter is used to identify the + * transaction created by that request. This parameter is used by both + * the client and the server. + * https://tools.ietf.org/html/rfc3261#section-8.1.1.7 + * @param branchParameter - The branch parameter. + * @param transport - The sent protocol transport. + */ + setViaHeader(branch, transport) { + // FIXME: Hack + if (this.options.hackViaTcp) { + transport = "TCP"; + } + let via = "SIP/2.0/" + transport; + via += " " + this.options.viaHost + ";branch=" + branch; + if (this.options.forceRport) { + via += ";rport"; + } + this.setHeader("via", via); + this.branch = branch; + } + toString() { + let msg = ""; + msg += this.method + " " + this.ruri.toRaw() + " SIP/2.0\r\n"; + for (const header in this.headers) { + if (this.headers[header]) { + for (const headerPart of this.headers[header]) { + msg += header + ": " + headerPart + "\r\n"; + } + } + } + for (const header of this.extraHeaders) { + msg += header.trim() + "\r\n"; + } + msg += "Supported: " + this.options.optionTags.join(", ") + "\r\n"; + msg += "User-Agent: " + this.options.userAgentString + "\r\n"; + if (this.body) { + if (typeof this.body === "string") { + msg += "Content-Length: " + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.utf8Length)(this.body) + "\r\n\r\n"; + msg += this.body; + } + else { + if (this.body.body && this.body.contentType) { + msg += "Content-Type: " + this.body.contentType + "\r\n"; + msg += "Content-Length: " + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.utf8Length)(this.body.body) + "\r\n\r\n"; + msg += this.body.body; + } + else { + msg += "Content-Length: " + 0 + "\r\n\r\n"; + } + } + } + else { + msg += "Content-Length: " + 0 + "\r\n\r\n"; + } + return msg; + } +} + + +/***/ }), +/* 28 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "AllowedMethods": () => (/* binding */ AllowedMethods) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29); + +/** + * FIXME: TODO: Should be configurable/variable. + */ +const AllowedMethods = [ + _messages__WEBPACK_IMPORTED_MODULE_0__.C.ACK, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.BYE, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.CANCEL, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.INFO, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.INVITE, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.MESSAGE, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.NOTIFY, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.OPTIONS, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.PRACK, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.REFER, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.REGISTER, + _messages__WEBPACK_IMPORTED_MODULE_0__.C.SUBSCRIBE +]; + + +/***/ }), +/* 29 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "C": () => (/* binding */ C) +/* harmony export */ }); +/* eslint-disable @typescript-eslint/no-namespace */ +/** + * SIP Methods + * @internal + */ +var C; +(function (C) { + C.ACK = "ACK"; + C.BYE = "BYE"; + C.CANCEL = "CANCEL"; + C.INFO = "INFO"; + C.INVITE = "INVITE"; + C.MESSAGE = "MESSAGE"; + C.NOTIFY = "NOTIFY"; + C.OPTIONS = "OPTIONS"; + C.REGISTER = "REGISTER"; + C.UPDATE = "UPDATE"; + C.SUBSCRIBE = "SUBSCRIBE"; + C.PUBLISH = "PUBLISH"; + C.REFER = "REFER"; + C.PRACK = "PRACK"; +})(C || (C = {})); + + +/***/ }), +/* 30 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionState": () => (/* binding */ SessionState), +/* harmony export */ "SignalingState": () => (/* binding */ SignalingState) +/* harmony export */ }); +/** + * Session state. + * @remarks + * https://tools.ietf.org/html/rfc3261#section-13 + * @public + */ +var SessionState; +(function (SessionState) { + SessionState["Initial"] = "Initial"; + SessionState["Early"] = "Early"; + SessionState["AckWait"] = "AckWait"; + SessionState["Confirmed"] = "Confirmed"; + SessionState["Terminated"] = "Terminated"; +})(SessionState || (SessionState = {})); +/** + * Offer/Answer state. + * @remarks + * ```txt + * Offer Answer RFC Ini Est Early + * ------------------------------------------------------------------- + * 1. INVITE Req. 2xx INVITE Resp. RFC 3261 Y Y N + * 2. 2xx INVITE Resp. ACK Req. RFC 3261 Y Y N + * 3. INVITE Req. 1xx-rel INVITE Resp. RFC 3262 Y Y N + * 4. 1xx-rel INVITE Resp. PRACK Req. RFC 3262 Y Y N + * 5. PRACK Req. 200 PRACK Resp. RFC 3262 N Y Y + * 6. UPDATE Req. 2xx UPDATE Resp. RFC 3311 N Y Y + * + * Table 1: Summary of SIP Usage of the Offer/Answer Model + * ``` + * https://tools.ietf.org/html/rfc6337#section-2.2 + * @public + */ +var SignalingState; +(function (SignalingState) { + SignalingState["Initial"] = "Initial"; + SignalingState["HaveLocalOffer"] = "HaveLocalOffer"; + SignalingState["HaveRemoteOffer"] = "HaveRemoteOffer"; + SignalingState["Stable"] = "Stable"; + SignalingState["Closed"] = "Closed"; +})(SignalingState || (SignalingState = {})); + + +/***/ }), +/* 31 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Message": () => (/* binding */ Message) +/* harmony export */ }); +/** + * A received message (incoming MESSAGE). + * @public + */ +class Message { + /** @internal */ + constructor(incomingMessageRequest) { + this.incomingMessageRequest = incomingMessageRequest; + } + /** Incoming MESSAGE request message. */ + get request() { + return this.incomingMessageRequest.message; + } + /** Accept the request. */ + accept(options) { + this.incomingMessageRequest.accept(options); + return Promise.resolve(); + } + /** Reject the request. */ + reject(options) { + this.incomingMessageRequest.reject(options); + return Promise.resolve(); + } +} + + +/***/ }), +/* 32 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Notification": () => (/* binding */ Notification) +/* harmony export */ }); +/** + * A notification of an event (incoming NOTIFY). + * @public + */ +class Notification { + /** @internal */ + constructor(incomingNotifyRequest) { + this.incomingNotifyRequest = incomingNotifyRequest; + } + /** Incoming NOTIFY request message. */ + get request() { + return this.incomingNotifyRequest.message; + } + /** Accept the request. */ + accept(options) { + this.incomingNotifyRequest.accept(options); + return Promise.resolve(); + } + /** Reject the request. */ + reject(options) { + this.incomingNotifyRequest.reject(options); + return Promise.resolve(); + } +} + + +/***/ }), +/* 33 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Referral": () => (/* binding */ Referral) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25); + +/** + * A request to establish a {@link Session} elsewhere (incoming REFER). + * @public + */ +class Referral { + /** @internal */ + constructor(incomingReferRequest, session) { + this.incomingReferRequest = incomingReferRequest; + this.session = session; + } + get referTo() { + const referTo = this.incomingReferRequest.message.parseHeader("refer-to"); + if (!(referTo instanceof _core__WEBPACK_IMPORTED_MODULE_0__.NameAddrHeader)) { + throw new Error("Failed to parse Refer-To header."); + } + return referTo; + } + get referredBy() { + return this.incomingReferRequest.message.getHeader("referred-by"); + } + get replaces() { + const value = this.referTo.uri.getHeader("replaces"); + if (value instanceof Array) { + return value[0]; + } + return value; + } + /** Incoming REFER request message. */ + get request() { + return this.incomingReferRequest.message; + } + /** Accept the request. */ + accept(options = { statusCode: 202 }) { + this.incomingReferRequest.accept(options); + return Promise.resolve(); + } + /** Reject the request. */ + reject(options) { + this.incomingReferRequest.reject(options); + return Promise.resolve(); + } + /** + * Creates an inviter which may be used to send an out of dialog INVITE request. + * + * @remarks + * This a helper method to create an Inviter which will execute the referral + * of the `Session` which was referred. The appropriate headers are set and + * the referred `Session` is linked to the new `Session`. Note that only a + * single instance of the `Inviter` will be created and returned (if called + * more than once a reference to the same `Inviter` will be returned every time). + * + * @param options - Options bucket. + * @param modifiers - Session description handler modifiers. + */ + makeInviter(options) { + if (this.inviter) { + return this.inviter; + } + const targetURI = this.referTo.uri.clone(); + targetURI.clearHeaders(); + options = options || {}; + const extraHeaders = (options.extraHeaders || []).slice(); + const replaces = this.replaces; + if (replaces) { + // decodeURIComponent is a holdover from 2c086eb4. Not sure that it is actually necessary + extraHeaders.push("Replaces: " + decodeURIComponent(replaces)); + } + const referredBy = this.referredBy; + if (referredBy) { + extraHeaders.push("Referred-By: " + referredBy); + } + options.extraHeaders = extraHeaders; + this.inviter = this.session.userAgent._makeInviter(targetURI, options); + this.inviter._referred = this.session; + this.session._referral = this.inviter; + return this.inviter; + } +} + + +/***/ }), +/* 34 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SIPExtension": () => (/* binding */ SIPExtension), +/* harmony export */ "UserAgentRegisteredOptionTags": () => (/* binding */ UserAgentRegisteredOptionTags) +/* harmony export */ }); +/** + * SIP extension support level. + * @public + */ +var SIPExtension; +(function (SIPExtension) { + SIPExtension["Required"] = "Required"; + SIPExtension["Supported"] = "Supported"; + SIPExtension["Unsupported"] = "Unsupported"; +})(SIPExtension || (SIPExtension = {})); +/** + * SIP Option Tags + * @remarks + * http://www.iana.org/assignments/sip-parameters/sip-parameters.xhtml#sip-parameters-4 + * @public + */ +const UserAgentRegisteredOptionTags = { + "100rel": true, + "199": true, + answermode: true, + "early-session": true, + eventlist: true, + explicitsub: true, + "from-change": true, + "geolocation-http": true, + "geolocation-sip": true, + gin: true, + gruu: true, + histinfo: true, + ice: true, + join: true, + "multiple-refer": true, + norefersub: true, + nosub: true, + outbound: true, + path: true, + policy: true, + precondition: true, + pref: true, + privacy: true, + "recipient-list-invite": true, + "recipient-list-message": true, + "recipient-list-subscribe": true, + replaces: true, + "resource-priority": true, + "sdp-anat": true, + "sec-agree": true, + tdialog: true, + timer: true, + uui: true // RFC 7433 +}; + + +/***/ }), +/* 35 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TransactionStateError": () => (/* binding */ TransactionStateError) +/* harmony export */ }); +/* harmony import */ var _exception__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * Indicates that the operation could not be completed given the current transaction state. + * @public + */ +class TransactionStateError extends _exception__WEBPACK_IMPORTED_MODULE_0__.Exception { + constructor(message) { + super(message ? message : "Transaction state error."); + } +} + + +/***/ }), +/* 36 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Timers": () => (/* binding */ Timers) +/* harmony export */ }); +const T1 = 500; +const T2 = 4000; +const T4 = 5000; +/** + * Timers. + * @public + */ +const Timers = { + T1, + T2, + T4, + TIMER_B: 64 * T1, + TIMER_D: 0 * T1, + TIMER_F: 64 * T1, + TIMER_H: 64 * T1, + TIMER_I: 0 * T4, + TIMER_J: 0 * T1, + TIMER_K: 0 * T4, + TIMER_L: 64 * T1, + TIMER_M: 64 * T1, + TIMER_N: 64 * T1, + PROVISIONAL_RESPONSE_INTERVAL: 60000 // See RFC 3261 Section 13.3.1.1 +}; + + +/***/ }), +/* 37 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Inviter": () => (/* binding */ Inviter) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(30); +/* harmony import */ var _core_messages_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(15); +/* harmony import */ var _session_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(16); +/* harmony import */ var _user_agent_options__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(34); + + + + + +/** + * An inviter offers to establish a {@link Session} (outgoing INVITE). + * @public + */ +class Inviter extends _session__WEBPACK_IMPORTED_MODULE_0__.Session { + /** + * Constructs a new instance of the `Inviter` class. + * @param userAgent - User agent. See {@link UserAgent} for details. + * @param targetURI - Request URI identifying the target of the message. + * @param options - Options bucket. See {@link InviterOptions} for details. + */ + constructor(userAgent, targetURI, options = {}) { + super(userAgent, options); + /** True if dispose() has been called. */ + this.disposed = false; + /** True if early media use is enabled. */ + this.earlyMedia = false; + /** The early media session description handlers. */ + this.earlyMediaSessionDescriptionHandlers = new Map(); + /** True if cancel() was called. */ + this.isCanceled = false; + /** True if initial INVITE without SDP. */ + this.inviteWithoutSdp = false; + this.logger = userAgent.getLogger("sip.Inviter"); + // Early media + this.earlyMedia = options.earlyMedia !== undefined ? options.earlyMedia : this.earlyMedia; + // From tag + this.fromTag = (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_1__.newTag)(); + // Invite without SDP + this.inviteWithoutSdp = options.inviteWithoutSdp !== undefined ? options.inviteWithoutSdp : this.inviteWithoutSdp; + // Inviter options (could do better copying these options) + const inviterOptions = Object.assign({}, options); + inviterOptions.params = Object.assign({}, options.params); + // Anonymous call + const anonymous = options.anonymous || false; + // Contact + const contact = userAgent.contact.toString({ + anonymous, + // Do not add ;ob in initial forming dialog requests if the + // registration over the current connection got a GRUU URI. + outbound: anonymous ? !userAgent.contact.tempGruu : !userAgent.contact.pubGruu + }); + // FIXME: TODO: We should not be parsing URIs here as if it fails we have to throw an exception + // which is not something we want our constructor to do. URIs should be passed in as params. + // URIs + if (anonymous && userAgent.configuration.uri) { + inviterOptions.params.fromDisplayName = "Anonymous"; + inviterOptions.params.fromUri = "sip:anonymous@anonymous.invalid"; + } + let fromURI = userAgent.userAgentCore.configuration.aor; + if (inviterOptions.params.fromUri) { + fromURI = + typeof inviterOptions.params.fromUri === "string" + ? _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.URIParse(inviterOptions.params.fromUri) + : inviterOptions.params.fromUri; + } + if (!fromURI) { + throw new TypeError("Invalid from URI: " + inviterOptions.params.fromUri); + } + let toURI = targetURI; + if (inviterOptions.params.toUri) { + toURI = + typeof inviterOptions.params.toUri === "string" + ? _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.URIParse(inviterOptions.params.toUri) + : inviterOptions.params.toUri; + } + if (!toURI) { + throw new TypeError("Invalid to URI: " + inviterOptions.params.toUri); + } + // Params + const messageOptions = Object.assign({}, inviterOptions.params); + messageOptions.fromTag = this.fromTag; + // Extra headers + const extraHeaders = (inviterOptions.extraHeaders || []).slice(); + if (anonymous && userAgent.configuration.uri) { + extraHeaders.push("P-Preferred-Identity: " + userAgent.configuration.uri.toString()); + extraHeaders.push("Privacy: id"); + } + extraHeaders.push("Contact: " + contact); + extraHeaders.push("Allow: " + ["ACK", "CANCEL", "INVITE", "MESSAGE", "BYE", "OPTIONS", "INFO", "NOTIFY", "REFER"].toString()); + if (userAgent.configuration.sipExtension100rel === _user_agent_options__WEBPACK_IMPORTED_MODULE_3__.SIPExtension.Required) { + extraHeaders.push("Require: 100rel"); + } + if (userAgent.configuration.sipExtensionReplaces === _user_agent_options__WEBPACK_IMPORTED_MODULE_3__.SIPExtension.Required) { + extraHeaders.push("Require: replaces"); + } + inviterOptions.extraHeaders = extraHeaders; + // Body + const body = undefined; + // Make initial outgoing request message + this.outgoingRequestMessage = userAgent.userAgentCore.makeOutgoingRequestMessage(_core__WEBPACK_IMPORTED_MODULE_4__.C.INVITE, targetURI, fromURI, toURI, messageOptions, extraHeaders, body); + // Session parent properties + this._contact = contact; + this._referralInviterOptions = inviterOptions; + this._renderbody = options.renderbody; + this._rendertype = options.rendertype; + // Modifiers and options for initial INVITE transaction + if (options.sessionDescriptionHandlerModifiers) { + this.sessionDescriptionHandlerModifiers = options.sessionDescriptionHandlerModifiers; + } + if (options.sessionDescriptionHandlerOptions) { + this.sessionDescriptionHandlerOptions = options.sessionDescriptionHandlerOptions; + } + // Modifiers and options for re-INVITE transactions + if (options.sessionDescriptionHandlerModifiersReInvite) { + this.sessionDescriptionHandlerModifiersReInvite = options.sessionDescriptionHandlerModifiersReInvite; + } + if (options.sessionDescriptionHandlerOptionsReInvite) { + this.sessionDescriptionHandlerOptionsReInvite = options.sessionDescriptionHandlerOptionsReInvite; + } + // Identifier + this._id = this.outgoingRequestMessage.callId + this.fromTag; + // Add to the user agent's session collection. + this.userAgent._sessions[this._id] = this; + } + /** + * Destructor. + */ + dispose() { + // Only run through this once. It can and does get called multiple times + // depending on the what the sessions state is when first called. + // For example, if called when "establishing" it will be called again + // at least once when the session transitions to "terminated". + // Regardless, running through this more than once is pointless. + if (this.disposed) { + return Promise.resolve(); + } + this.disposed = true; + // Dispose of early dialog media + this.disposeEarlyMedia(); + // If the final response for the initial INVITE not yet been received, cancel it + switch (this.state) { + case _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Initial: + return this.cancel().then(() => super.dispose()); + case _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing: + return this.cancel().then(() => super.dispose()); + case _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Established: + return super.dispose(); + case _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminating: + return super.dispose(); + case _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated: + return super.dispose(); + default: + throw new Error("Unknown state."); + } + } + /** + * Initial outgoing INVITE request message body. + */ + get body() { + return this.outgoingRequestMessage.body; + } + /** + * The identity of the local user. + */ + get localIdentity() { + return this.outgoingRequestMessage.from; + } + /** + * The identity of the remote user. + */ + get remoteIdentity() { + return this.outgoingRequestMessage.to; + } + /** + * Initial outgoing INVITE request message. + */ + get request() { + return this.outgoingRequestMessage; + } + /** + * Cancels the INVITE request. + * + * @remarks + * Sends a CANCEL request. + * Resolves once the response sent, otherwise rejects. + * + * After sending a CANCEL request the expectation is that a 487 final response + * will be received for the INVITE. However a 200 final response to the INVITE + * may nonetheless arrive (it's a race between the CANCEL reaching the UAS before + * the UAS sends a 200) in which case an ACK & BYE will be sent. The net effect + * is that this method will terminate the session regardless of the race. + * @param options - Options bucket. + */ + cancel(options = {}) { + this.logger.log("Inviter.cancel"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Initial && this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing) { + const error = new Error(`Invalid session state ${this.state}`); + this.logger.error(error.message); + return Promise.reject(error); + } + // flag canceled + this.isCanceled = true; + // transition state + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminating); + // helper function + function getCancelReason(code, reason) { + if ((code && code < 200) || code > 699) { + throw new TypeError("Invalid statusCode: " + code); + } + else if (code) { + const cause = code; + const text = (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_1__.getReasonPhrase)(code) || reason; + return "SIP;cause=" + cause + ';text="' + text + '"'; + } + } + if (this.outgoingInviteRequest) { + // the CANCEL may not be respected by peer(s), so don't transition to terminated + let cancelReason; + if (options.statusCode && options.reasonPhrase) { + cancelReason = getCancelReason(options.statusCode, options.reasonPhrase); + } + this.outgoingInviteRequest.cancel(cancelReason, options); + } + else { + this.logger.warn("Canceled session before INVITE was sent"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + } + return Promise.resolve(); + } + /** + * Sends the INVITE request. + * + * @remarks + * TLDR... + * 1) Only one offer/answer exchange permitted during initial INVITE. + * 2) No "early media" if the initial offer is in an INVITE (default behavior). + * 3) If "early media" and the initial offer is in an INVITE, no INVITE forking. + * + * 1) Only one offer/answer exchange permitted during initial INVITE. + * + * Our implementation replaces the following bullet point... + * + * o After having sent or received an answer to the first offer, the + * UAC MAY generate subsequent offers in requests based on rules + * specified for that method, but only if it has received answers + * to any previous offers, and has not sent any offers to which it + * hasn't gotten an answer. + * https://tools.ietf.org/html/rfc3261#section-13.2.1 + * + * ...with... + * + * o After having sent or received an answer to the first offer, the + * UAC MUST NOT generate subsequent offers in requests based on rules + * specified for that method. + * + * ...which in combination with this bullet point... + * + * o Once the UAS has sent or received an answer to the initial + * offer, it MUST NOT generate subsequent offers in any responses + * to the initial INVITE. This means that a UAS based on this + * specification alone can never generate subsequent offers until + * completion of the initial transaction. + * https://tools.ietf.org/html/rfc3261#section-13.2.1 + * + * ...ensures that EXACTLY ONE offer/answer exchange will occur + * during an initial out of dialog INVITE request made by our UAC. + * + * + * 2) No "early media" if the initial offer is in an INVITE (default behavior). + * + * While our implementation adheres to the following bullet point... + * + * o If the initial offer is in an INVITE, the answer MUST be in a + * reliable non-failure message from UAS back to UAC which is + * correlated to that INVITE. For this specification, that is + * only the final 2xx response to that INVITE. That same exact + * answer MAY also be placed in any provisional responses sent + * prior to the answer. The UAC MUST treat the first session + * description it receives as the answer, and MUST ignore any + * session descriptions in subsequent responses to the initial + * INVITE. + * https://tools.ietf.org/html/rfc3261#section-13.2.1 + * + * We have made the following implementation decision with regard to early media... + * + * o If the initial offer is in the INVITE, the answer from the + * UAS back to the UAC will establish a media session only + * only after the final 2xx response to that INVITE is received. + * + * The reason for this decision is rooted in a restriction currently + * inherent in WebRTC. Specifically, while a SIP INVITE request with an + * initial offer may fork resulting in more than one provisional answer, + * there is currently no easy/good way to to "fork" an offer generated + * by a peer connection. In particular, a WebRTC offer currently may only + * be matched with one answer and we have no good way to know which + * "provisional answer" is going to be the "final answer". So we have + * decided to punt and not create any "early media" sessions in this case. + * + * The upshot is that if you want "early media", you must not put the + * initial offer in the INVITE. Instead, force the UAS to provide the + * initial offer by sending an INVITE without an offer. In the WebRTC + * case this allows us to create a unique peer connection with a unique + * answer for every provisional offer with "early media" on all of them. + * + * + * 3) If "early media" and the initial offer is in an INVITE, no INVITE forking. + * + * The default behavior may be altered and "early media" utilized if the + * initial offer is in the an INVITE by setting the `earlyMedia` options. + * However in that case the INVITE request MUST NOT fork. This allows for + * "early media" in environments where the forking behavior of the SIP + * servers being utilized is configured to disallow forking. + */ + invite(options = {}) { + this.logger.log("Inviter.invite"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Initial) { + // re-invite + return super.invite(options); + } + // Modifiers and options for initial INVITE transaction + if (options.sessionDescriptionHandlerModifiers) { + this.sessionDescriptionHandlerModifiers = options.sessionDescriptionHandlerModifiers; + } + if (options.sessionDescriptionHandlerOptions) { + this.sessionDescriptionHandlerOptions = options.sessionDescriptionHandlerOptions; + } + // just send an INVITE with no sdp... + if (options.withoutSdp || this.inviteWithoutSdp) { + if (this._renderbody && this._rendertype) { + this.outgoingRequestMessage.body = { contentType: this._rendertype, body: this._renderbody }; + } + // transition state + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing); + return Promise.resolve(this.sendInvite(options)); + } + // get an offer and send it in an INVITE + const offerOptions = { + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers, + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions + }; + return this.getOffer(offerOptions) + .then((body) => { + this.outgoingRequestMessage.body = { body: body.content, contentType: body.contentType }; + // transition state + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing); + return this.sendInvite(options); + }) + .catch((error) => { + this.logger.log(error.message); + // apply fix from https://github.com/onsip/SIP.js/commit/f06939c119149a3e00ad8acf69f37360d3331a62 + // It's possible we are already terminated, + // so don't throw trying to transition again. + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated) { + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + } + throw error; + }); + } + /** + * 13.2.1 Creating the Initial INVITE + * + * Since the initial INVITE represents a request outside of a dialog, + * its construction follows the procedures of Section 8.1.1. Additional + * processing is required for the specific case of INVITE. + * + * An Allow header field (Section 20.5) SHOULD be present in the INVITE. + * It indicates what methods can be invoked within a dialog, on the UA + * sending the INVITE, for the duration of the dialog. For example, a + * UA capable of receiving INFO requests within a dialog [34] SHOULD + * include an Allow header field listing the INFO method. + * + * A Supported header field (Section 20.37) SHOULD be present in the + * INVITE. It enumerates all the extensions understood by the UAC. + * + * An Accept (Section 20.1) header field MAY be present in the INVITE. + * It indicates which Content-Types are acceptable to the UA, in both + * the response received by it, and in any subsequent requests sent to + * it within dialogs established by the INVITE. The Accept header field + * is especially useful for indicating support of various session + * description formats. + * + * The UAC MAY add an Expires header field (Section 20.19) to limit the + * validity of the invitation. If the time indicated in the Expires + * header field is reached and no final answer for the INVITE has been + * received, the UAC core SHOULD generate a CANCEL request for the + * INVITE, as per Section 9. + * + * A UAC MAY also find it useful to add, among others, Subject (Section + * 20.36), Organization (Section 20.25) and User-Agent (Section 20.41) + * header fields. They all contain information related to the INVITE. + * + * The UAC MAY choose to add a message body to the INVITE. Section + * 8.1.1.10 deals with how to construct the header fields -- Content- + * Type among others -- needed to describe the message body. + * + * https://tools.ietf.org/html/rfc3261#section-13.2.1 + */ + sendInvite(options = {}) { + // There are special rules for message bodies that contain a session + // description - their corresponding Content-Disposition is "session". + // SIP uses an offer/answer model where one UA sends a session + // description, called the offer, which contains a proposed description + // of the session. The offer indicates the desired communications means + // (audio, video, games), parameters of those means (such as codec + // types) and addresses for receiving media from the answerer. The + // other UA responds with another session description, called the + // answer, which indicates which communications means are accepted, the + // parameters that apply to those means, and addresses for receiving + // media from the offerer. An offer/answer exchange is within the + // context of a dialog, so that if a SIP INVITE results in multiple + // dialogs, each is a separate offer/answer exchange. The offer/answer + // model defines restrictions on when offers and answers can be made + // (for example, you cannot make a new offer while one is in progress). + // This results in restrictions on where the offers and answers can + // appear in SIP messages. In this specification, offers and answers + // can only appear in INVITE requests and responses, and ACK. The usage + // of offers and answers is further restricted. For the initial INVITE + // transaction, the rules are: + // + // o The initial offer MUST be in either an INVITE or, if not there, + // in the first reliable non-failure message from the UAS back to + // the UAC. In this specification, that is the final 2xx + // response. + // + // o If the initial offer is in an INVITE, the answer MUST be in a + // reliable non-failure message from UAS back to UAC which is + // correlated to that INVITE. For this specification, that is + // only the final 2xx response to that INVITE. That same exact + // answer MAY also be placed in any provisional responses sent + // prior to the answer. The UAC MUST treat the first session + // description it receives as the answer, and MUST ignore any + // session descriptions in subsequent responses to the initial + // INVITE. + // + // o If the initial offer is in the first reliable non-failure + // message from the UAS back to UAC, the answer MUST be in the + // acknowledgement for that message (in this specification, ACK + // for a 2xx response). + // + // o After having sent or received an answer to the first offer, the + // UAC MAY generate subsequent offers in requests based on rules + // specified for that method, but only if it has received answers + // to any previous offers, and has not sent any offers to which it + // hasn't gotten an answer. + // + // o Once the UAS has sent or received an answer to the initial + // offer, it MUST NOT generate subsequent offers in any responses + // to the initial INVITE. This means that a UAS based on this + // specification alone can never generate subsequent offers until + // completion of the initial transaction. + // + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // 5 The Offer/Answer Model and PRACK + // + // RFC 3261 describes guidelines for the sets of messages in which + // offers and answers [3] can appear. Based on those guidelines, this + // extension provides additional opportunities for offer/answer + // exchanges. + // If the INVITE contained an offer, the UAS MAY generate an answer in a + // reliable provisional response (assuming these are supported by the + // UAC). That results in the establishment of the session before + // completion of the call. Similarly, if a reliable provisional + // response is the first reliable message sent back to the UAC, and the + // INVITE did not contain an offer, one MUST appear in that reliable + // provisional response. + // If the UAC receives a reliable provisional response with an offer + // (this would occur if the UAC sent an INVITE without an offer, in + // which case the first reliable provisional response will contain the + // offer), it MUST generate an answer in the PRACK. If the UAC receives + // a reliable provisional response with an answer, it MAY generate an + // additional offer in the PRACK. If the UAS receives a PRACK with an + // offer, it MUST place the answer in the 2xx to the PRACK. + // Once an answer has been sent or received, the UA SHOULD establish the + // session based on the parameters of the offer and answer, even if the + // original INVITE itself has not been responded to. + // If the UAS had placed a session description in any reliable + // provisional response that is unacknowledged when the INVITE is + // accepted, the UAS MUST delay sending the 2xx until the provisional + // response is acknowledged. Otherwise, the reliability of the 1xx + // cannot be guaranteed, and reliability is needed for proper operation + // of the offer/answer exchange. + // All user agents that support this extension MUST support all + // offer/answer exchanges that are possible based on the rules in + // Section 13.2 of RFC 3261, based on the existence of INVITE and PRACK + // as requests, and 2xx and reliable 1xx as non-failure reliable + // responses. + // + // https://tools.ietf.org/html/rfc3262#section-5 + //// + // The Offer/Answer Model Implementation + // + // The offer/answer model is straight forward, but one MUST READ the specifications... + // + // 13.2.1 Creating the Initial INVITE (paragraph 8 in particular) + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // + // 5 The Offer/Answer Model and PRACK + // https://tools.ietf.org/html/rfc3262#section-5 + // + // Session Initiation Protocol (SIP) Usage of the Offer/Answer Model + // https://tools.ietf.org/html/rfc6337 + //// + //// + // TODO: The Offer/Answer Model Implementation + // + // Currently if `earlyMedia` is enabled and the INVITE request forks, + // the session is terminated if the early dialog does not match the + // confirmed dialog. This restriction make sense in a WebRTC environment, + // but there are other environments where this restriction does not hold. + // + // So while we currently cannot make the offer in INVITE+forking+webrtc + // case work, we propose doing the following... + // + // OPTION 1 + // - add a `earlyMediaForking` option and + // - require SDH.setDescription() to be callable multiple times. + // + // OPTION 2 + // 1) modify SDH Factory to provide an initial offer without giving us the SDH, and then... + // 2) stick that offer in the initial INVITE, and when 183 with initial answer is received... + // 3) ask SDH Factory if it supports "earlyRemoteAnswer" + // a) if true, ask SDH Factory to createSDH(localOffer).then((sdh) => sdh.setDescription(remoteAnswer) + // b) if false, defer getting a SDH until 2xx response is received + // + // Our supplied WebRTC SDH will default to behavior 3b which works in forking environment (without) + // early media if initial offer is in the INVITE). We will, however, provide an "inviteWillNotFork" + // option which if set to "true" will have our supplied WebRTC SDH behave in the 3a manner. + // That will result in + // - early media working with initial offer in the INVITE, and... + // - if the INVITE forks, the session terminating with an ERROR that reads like + // "You set 'inviteWillNotFork' to true but the INVITE forked. You can't eat your cake, and have it too." + // - furthermore, we accept that users will report that error to us as "bug" regardless + // + // So, SDH Factory is going to end up with a new interface along the lines of... + // + // interface SessionDescriptionHandlerFactory { + // makeLocalOffer(): Promise; + // makeSessionDescriptionHandler( + // initialOffer: ContentTypeAndBody, offerType: "local" | "remote" + // ): Promise; + // supportsEarlyRemoteAnswer: boolean; + // supportsContentType(contentType: string): boolean; + // getDescription(description: ContentTypeAndBody): Promise + // setDescription(description: ContentTypeAndBody): Promise + // } + //// + // Send the INVITE request. + this.outgoingInviteRequest = this.userAgent.userAgentCore.invite(this.outgoingRequestMessage, { + onAccept: (inviteResponse) => { + // Our transaction layer is "non-standard" in that it will only + // pass us a 2xx response once per branch, so there is no need to + // worry about dealing with 2xx retransmissions. However, we can + // and do still get 2xx responses for multiple branches (when an + // INVITE is forked) which may create multiple confirmed dialogs. + // Herein we are acking and sending a bye to any confirmed dialogs + // which arrive beyond the first one. This is the desired behavior + // for most applications (but certainly not all). + // If we already received a confirmed dialog, ack & bye this additional confirmed session. + if (this.dialog) { + this.logger.log("Additional confirmed dialog, sending ACK and BYE"); + this.ackAndBye(inviteResponse); + // We do NOT transition state in this case (this is an "extra" dialog) + return; + } + // If the user requested cancellation, ack & bye this session. + if (this.isCanceled) { + this.logger.log("Canceled session accepted, sending ACK and BYE"); + this.ackAndBye(inviteResponse); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + return; + } + this.notifyReferer(inviteResponse); + this.onAccept(inviteResponse) + .then(() => { + this.disposeEarlyMedia(); + }) + .catch(() => { + this.disposeEarlyMedia(); + }) + .then(() => { + if (options.requestDelegate && options.requestDelegate.onAccept) { + options.requestDelegate.onAccept(inviteResponse); + } + }); + }, + onProgress: (inviteResponse) => { + // If the user requested cancellation, ignore response. + if (this.isCanceled) { + return; + } + this.notifyReferer(inviteResponse); + this.onProgress(inviteResponse) + .catch(() => { + this.disposeEarlyMedia(); + }) + .then(() => { + if (options.requestDelegate && options.requestDelegate.onProgress) { + options.requestDelegate.onProgress(inviteResponse); + } + }); + }, + onRedirect: (inviteResponse) => { + this.notifyReferer(inviteResponse); + this.onRedirect(inviteResponse); + if (options.requestDelegate && options.requestDelegate.onRedirect) { + options.requestDelegate.onRedirect(inviteResponse); + } + }, + onReject: (inviteResponse) => { + this.notifyReferer(inviteResponse); + this.onReject(inviteResponse); + if (options.requestDelegate && options.requestDelegate.onReject) { + options.requestDelegate.onReject(inviteResponse); + } + }, + onTrying: (inviteResponse) => { + this.notifyReferer(inviteResponse); + this.onTrying(inviteResponse); + if (options.requestDelegate && options.requestDelegate.onTrying) { + options.requestDelegate.onTrying(inviteResponse); + } + } + }); + return this.outgoingInviteRequest; + } + disposeEarlyMedia() { + this.earlyMediaSessionDescriptionHandlers.forEach((sessionDescriptionHandler) => { + sessionDescriptionHandler.close(); + }); + this.earlyMediaSessionDescriptionHandlers.clear(); + } + notifyReferer(response) { + if (!this._referred) { + return; + } + if (!(this._referred instanceof _session__WEBPACK_IMPORTED_MODULE_0__.Session)) { + throw new Error("Referred session not instance of session"); + } + if (!this._referred.dialog) { + return; + } + if (!response.message.statusCode) { + throw new Error("Status code undefined."); + } + if (!response.message.reasonPhrase) { + throw new Error("Reason phrase undefined."); + } + const statusCode = response.message.statusCode; + const reasonPhrase = response.message.reasonPhrase; + const body = `SIP/2.0 ${statusCode} ${reasonPhrase}`.trim(); + const outgoingNotifyRequest = this._referred.dialog.notify(undefined, { + extraHeaders: ["Event: refer", "Subscription-State: terminated"], + body: { + contentDisposition: "render", + contentType: "message/sipfrag", + content: body + } + }); + // The implicit subscription created by a REFER is the same as a + // subscription created with a SUBSCRIBE request. The agent issuing the + // REFER can terminate this subscription prematurely by unsubscribing + // using the mechanisms described in [2]. Terminating a subscription, + // either by explicitly unsubscribing or rejecting NOTIFY, is not an + // indication that the referenced request should be withdrawn or + // abandoned. + // https://tools.ietf.org/html/rfc3515#section-2.4.4 + // FIXME: TODO: This should be done in a subscribe dialog to satisfy the above. + // If the notify is rejected, stop sending NOTIFY requests. + outgoingNotifyRequest.delegate = { + onReject: () => { + this._referred = undefined; + } + }; + } + /** + * Handle final response to initial INVITE. + * @param inviteResponse - 2xx response. + */ + onAccept(inviteResponse) { + this.logger.log("Inviter.onAccept"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing) { + this.logger.error(`Accept received while in state ${this.state}, dropping response`); + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + const response = inviteResponse.message; + const session = inviteResponse.session; + // Ported behavior. + if (response.hasHeader("P-Asserted-Identity")) { + this._assertedIdentity = _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.nameAddrHeaderParse(response.getHeader("P-Asserted-Identity")); + } + // We have a confirmed dialog. + session.delegate = { + onAck: (ackRequest) => this.onAckRequest(ackRequest), + onBye: (byeRequest) => this.onByeRequest(byeRequest), + onInfo: (infoRequest) => this.onInfoRequest(infoRequest), + onInvite: (inviteRequest) => this.onInviteRequest(inviteRequest), + onMessage: (messageRequest) => this.onMessageRequest(messageRequest), + onNotify: (notifyRequest) => this.onNotifyRequest(notifyRequest), + onPrack: (prackRequest) => this.onPrackRequest(prackRequest), + onRefer: (referRequest) => this.onReferRequest(referRequest) + }; + this._dialog = session; + switch (session.signalingState) { + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Initial: + // INVITE without offer, so MUST have offer at this point, so invalid state. + this.logger.error("Received 2xx response to INVITE without a session description"); + this.ackAndBye(inviteResponse, 400, "Missing session description"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + return Promise.reject(new Error("Bad Media Description")); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveLocalOffer: + // INVITE with offer, so MUST have answer at this point, so invalid state. + this.logger.error("Received 2xx response to INVITE without a session description"); + this.ackAndBye(inviteResponse, 400, "Missing session description"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + return Promise.reject(new Error("Bad Media Description")); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveRemoteOffer: { + // INVITE without offer, received offer in 2xx, so MUST send answer in ACK. + if (!this._dialog.offer) { + throw new Error(`Session offer undefined in signaling state ${this._dialog.signalingState}.`); + } + const options = { + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers, + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions + }; + return this.setOfferAndGetAnswer(this._dialog.offer, options) + .then((body) => { + inviteResponse.ack({ body }); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Established); + }) + .catch((error) => { + this.ackAndBye(inviteResponse, 488, "Invalid session description"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + throw error; + }); + } + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Stable: { + // If INVITE without offer and we have already completed the initial exchange. + if (this.earlyMediaSessionDescriptionHandlers.size > 0) { + const sdh = this.earlyMediaSessionDescriptionHandlers.get(session.id); + if (!sdh) { + throw new Error("Session description handler undefined."); + } + this.setSessionDescriptionHandler(sdh); + this.earlyMediaSessionDescriptionHandlers.delete(session.id); + inviteResponse.ack(); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Established); + return Promise.resolve(); + } + // If INVITE with offer and we used an "early" answer in a provisional response for media + if (this.earlyMediaDialog) { + // If early media dialog doesn't match confirmed dialog, we must unfortunately fail. + // This limitation stems from how WebRTC currently implements its offer/answer model. + // There are details elsewhere, but in short a WebRTC offer cannot be forked. + if (this.earlyMediaDialog !== session) { + if (this.earlyMedia) { + const message = "You have set the 'earlyMedia' option to 'true' which requires that your INVITE requests " + + "do not fork and yet this INVITE request did in fact fork. Consequentially and not surprisingly " + + "the end point which accepted the INVITE (confirmed dialog) does not match the end point with " + + "which early media has been setup (early dialog) and thus this session is unable to proceed. " + + "In accordance with the SIP specifications, the SIP servers your end point is connected to " + + "determine if an INVITE forks and the forking behavior of those servers cannot be controlled " + + "by this library. If you wish to use early media with this library you must configure those " + + "servers accordingly. Alternatively you may set the 'earlyMedia' to 'false' which will allow " + + "this library to function with any INVITE requests which do fork."; + this.logger.error(message); + } + const error = new Error("Early media dialog does not equal confirmed dialog, terminating session"); + this.logger.error(error.message); + this.ackAndBye(inviteResponse, 488, "Not Acceptable Here"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + return Promise.reject(error); + } + // Otherwise we are good to go. + inviteResponse.ack(); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Established); + return Promise.resolve(); + } + // If INVITE with offer and we have been waiting till now to apply the answer. + const answer = session.answer; + if (!answer) { + throw new Error("Answer is undefined."); + } + const options = { + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers, + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions + }; + return this.setAnswer(answer, options) + .then(() => { + // This session has completed an initial offer/answer exchange... + let ackOptions; + if (this._renderbody && this._rendertype) { + ackOptions = { + body: { contentDisposition: "render", contentType: this._rendertype, content: this._renderbody } + }; + } + inviteResponse.ack(ackOptions); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Established); + }) + .catch((error) => { + this.logger.error(error.message); + this.ackAndBye(inviteResponse, 488, "Not Acceptable Here"); + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + throw error; + }); + } + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Closed: + // Dialog has terminated. + return Promise.reject(new Error("Terminated.")); + default: + throw new Error("Unknown session signaling state."); + } + } + /** + * Handle provisional response to initial INVITE. + * @param inviteResponse - 1xx response. + */ + onProgress(inviteResponse) { + var _a; + this.logger.log("Inviter.onProgress"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing) { + this.logger.error(`Progress received while in state ${this.state}, dropping response`); + return Promise.reject(new Error(`Invalid session state ${this.state}`)); + } + if (!this.outgoingInviteRequest) { + throw new Error("Outgoing INVITE request undefined."); + } + const response = inviteResponse.message; + const session = inviteResponse.session; + // Ported - Set assertedIdentity. + if (response.hasHeader("P-Asserted-Identity")) { + this._assertedIdentity = _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.nameAddrHeaderParse(response.getHeader("P-Asserted-Identity")); + } + // If a provisional response is received for an initial request, and + // that response contains a Require header field containing the option + // tag 100rel, the response is to be sent reliably. If the response is + // a 100 (Trying) (as opposed to 101 to 199), this option tag MUST be + // ignored, and the procedures below MUST NOT be used. + // https://tools.ietf.org/html/rfc3262#section-4 + const requireHeader = response.getHeader("require"); + const rseqHeader = response.getHeader("rseq"); + const rseq = requireHeader && requireHeader.includes("100rel") && rseqHeader ? Number(rseqHeader) : undefined; + const responseReliable = !!rseq; + const extraHeaders = []; + if (responseReliable) { + extraHeaders.push("RAck: " + response.getHeader("rseq") + " " + response.getHeader("cseq")); + } + switch (session.signalingState) { + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Initial: + // INVITE without offer and session still has no offer (and no answer). + if (responseReliable) { + // Similarly, if a reliable provisional + // response is the first reliable message sent back to the UAC, and the + // INVITE did not contain an offer, one MUST appear in that reliable + // provisional response. + // https://tools.ietf.org/html/rfc3262#section-5 + this.logger.warn("First reliable provisional response received MUST contain an offer when INVITE does not contain an offer."); + // FIXME: Known popular UA's currently end up here... + inviteResponse.prack({ extraHeaders }); + } + return Promise.resolve(); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveLocalOffer: + // INVITE with offer and session only has that initial local offer. + if (responseReliable) { + inviteResponse.prack({ extraHeaders }); + } + return Promise.resolve(); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveRemoteOffer: + if (!responseReliable) { + // The initial offer MUST be in either an INVITE or, if not there, + // in the first reliable non-failure message from the UAS back to + // the UAC. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // According to Section 13.2.1 of [RFC3261], 'The first reliable + // non-failure message' must have an offer if there is no offer in the + // INVITE request. This means that the User Agent (UA) that receives + // the INVITE request without an offer must include an offer in the + // first reliable response with 100rel extension. If no reliable + // provisional response has been sent, the User Agent Server (UAS) must + // include an offer when sending 2xx response. + // https://tools.ietf.org/html/rfc6337#section-2.2 + this.logger.warn("Non-reliable provisional response MUST NOT contain an initial offer, discarding response."); + return Promise.resolve(); + } + { + // If the initial offer is in the first reliable non-failure + // message from the UAS back to UAC, the answer MUST be in the + // acknowledgement for that message + const sdh = this.sessionDescriptionHandlerFactory(this, this.userAgent.configuration.sessionDescriptionHandlerFactoryOptions || {}); + if ((_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onSessionDescriptionHandler) { + this.delegate.onSessionDescriptionHandler(sdh, true); + } + this.earlyMediaSessionDescriptionHandlers.set(session.id, sdh); + return sdh + .setDescription(response.body, this.sessionDescriptionHandlerOptions, this.sessionDescriptionHandlerModifiers) + .then(() => sdh.getDescription(this.sessionDescriptionHandlerOptions, this.sessionDescriptionHandlerModifiers)) + .then((description) => { + const body = { + contentDisposition: "session", + contentType: description.contentType, + content: description.body + }; + inviteResponse.prack({ extraHeaders, body }); + }) + .catch((error) => { + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + throw error; + }); + } + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Stable: + // This session has completed an initial offer/answer exchange, so... + // - INVITE with SDP and this provisional response MAY be reliable + // - INVITE without SDP and this provisional response MAY be reliable + if (responseReliable) { + inviteResponse.prack({ extraHeaders }); + } + if (this.earlyMedia && !this.earlyMediaDialog) { + this.earlyMediaDialog = session; + const answer = session.answer; + if (!answer) { + throw new Error("Answer is undefined."); + } + const options = { + sessionDescriptionHandlerModifiers: this.sessionDescriptionHandlerModifiers, + sessionDescriptionHandlerOptions: this.sessionDescriptionHandlerOptions + }; + return this.setAnswer(answer, options).catch((error) => { + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + throw error; + }); + } + return Promise.resolve(); + case _core__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Closed: + // Dialog has terminated. + return Promise.reject(new Error("Terminated.")); + default: + throw new Error("Unknown session signaling state."); + } + } + /** + * Handle final response to initial INVITE. + * @param inviteResponse - 3xx response. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onRedirect(inviteResponse) { + this.logger.log("Inviter.onRedirect"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing && this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminating) { + this.logger.error(`Redirect received while in state ${this.state}, dropping response`); + return; + } + // transition state + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + } + /** + * Handle final response to initial INVITE. + * @param inviteResponse - 4xx, 5xx, or 6xx response. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onReject(inviteResponse) { + this.logger.log("Inviter.onReject"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing && this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminating) { + this.logger.error(`Reject received while in state ${this.state}, dropping response`); + return; + } + // transition state + this.stateTransition(_session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Terminated); + } + /** + * Handle final response to initial INVITE. + * @param inviteResponse - 100 response. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onTrying(inviteResponse) { + this.logger.log("Inviter.onTrying"); + // validate state + if (this.state !== _session_state__WEBPACK_IMPORTED_MODULE_5__.SessionState.Establishing) { + this.logger.error(`Trying received while in state ${this.state}, dropping response`); + return; + } + } +} + + +/***/ }), +/* 38 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Messager": () => (/* binding */ Messager) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); + +/** + * A messager sends a {@link Message} (outgoing MESSAGE). + * @public + */ +class Messager { + /** + * Constructs a new instance of the `Messager` class. + * @param userAgent - User agent. See {@link UserAgent} for details. + * @param targetURI - Request URI identifying the target of the message. + * @param content - Content for the body of the message. + * @param contentType - Content type of the body of the message. + * @param options - Options bucket. See {@link MessagerOptions} for details. + */ + constructor(userAgent, targetURI, content, contentType = "text/plain", options = {}) { + // Logger + this.logger = userAgent.getLogger("sip.Messager"); + // Default options params + options.params = options.params || {}; + // URIs + let fromURI = userAgent.userAgentCore.configuration.aor; + if (options.params.fromUri) { + fromURI = + typeof options.params.fromUri === "string" ? _core__WEBPACK_IMPORTED_MODULE_0__.Grammar.URIParse(options.params.fromUri) : options.params.fromUri; + } + if (!fromURI) { + throw new TypeError("Invalid from URI: " + options.params.fromUri); + } + let toURI = targetURI; + if (options.params.toUri) { + toURI = typeof options.params.toUri === "string" ? _core__WEBPACK_IMPORTED_MODULE_0__.Grammar.URIParse(options.params.toUri) : options.params.toUri; + } + if (!toURI) { + throw new TypeError("Invalid to URI: " + options.params.toUri); + } + // Message params + const params = options.params ? Object.assign({}, options.params) : {}; + // Extra headers + const extraHeaders = (options.extraHeaders || []).slice(); + // Body + const contentDisposition = "render"; + const body = { + contentDisposition, + contentType, + content + }; + // Build the request + this.request = userAgent.userAgentCore.makeOutgoingRequestMessage(_core__WEBPACK_IMPORTED_MODULE_1__.C.MESSAGE, targetURI, fromURI, toURI, params, extraHeaders, body); + // User agent + this.userAgent = userAgent; + } + /** + * Send the message. + */ + message(options = {}) { + this.userAgent.userAgentCore.request(this.request, options.requestDelegate); + return Promise.resolve(); + } +} + + +/***/ }), +/* 39 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PublisherState": () => (/* binding */ PublisherState) +/* harmony export */ }); +/** + * {@link Publisher} state. + * @remarks + * The {@link Publisher} behaves in a deterministic manner according to the following + * Finite State Machine (FSM). + * ```txt + * __________________________________________ + * | __________________________ | + * Publisher | | v v + * Constructed -> Initial -> Published -> Unpublished -> Terminated + * | ^____________| ^ + * |______________________________| + * ``` + * @public + */ +var PublisherState; +(function (PublisherState) { + PublisherState["Initial"] = "Initial"; + PublisherState["Published"] = "Published"; + PublisherState["Unpublished"] = "Unpublished"; + PublisherState["Terminated"] = "Terminated"; +})(PublisherState || (PublisherState = {})); + + +/***/ }), +/* 40 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Publisher": () => (/* binding */ Publisher) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(17); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _publisher_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(39); + + + +/** + * A publisher publishes a publication (outgoing PUBLISH). + * @public + */ +class Publisher { + /** + * Constructs a new instance of the `Publisher` class. + * + * @param userAgent - User agent. See {@link UserAgent} for details. + * @param targetURI - Request URI identifying the target of the message. + * @param eventType - The event type identifying the published document. + * @param options - Options bucket. See {@link PublisherOptions} for details. + */ + constructor(userAgent, targetURI, eventType, options = {}) { + this.disposed = false; + /** The publication state. */ + this._state = _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Initial; + // state emitter + this._stateEventEmitter = new _emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + this.userAgent = userAgent; + options.extraHeaders = (options.extraHeaders || []).slice(); + options.contentType = options.contentType || "text/plain"; + if (typeof options.expires !== "number" || options.expires % 1 !== 0) { + options.expires = 3600; + } + else { + options.expires = Number(options.expires); + } + if (typeof options.unpublishOnClose !== "boolean") { + options.unpublishOnClose = true; + } + this.target = targetURI; + this.event = eventType; + this.options = options; + this.pubRequestExpires = options.expires; + this.logger = userAgent.getLogger("sip.Publisher"); + const params = options.params || {}; + const fromURI = params.fromUri ? params.fromUri : userAgent.userAgentCore.configuration.aor; + const toURI = params.toUri ? params.toUri : targetURI; + let body; + if (options.body && options.contentType) { + const contentDisposition = "render"; + const contentType = options.contentType; + const content = options.body; + body = { + contentDisposition, + contentType, + content + }; + } + const extraHeaders = (options.extraHeaders || []).slice(); + // Build the request + this.request = userAgent.userAgentCore.makeOutgoingRequestMessage(_core__WEBPACK_IMPORTED_MODULE_2__.C.PUBLISH, targetURI, fromURI, toURI, params, extraHeaders, body); + // Identifier + this.id = this.target.toString() + ":" + this.event; + // Add to the user agent's publisher collection. + this.userAgent._publishers[this.id] = this; + } + /** + * Destructor. + */ + dispose() { + if (this.disposed) { + return Promise.resolve(); + } + this.disposed = true; + this.logger.log(`Publisher ${this.id} in state ${this.state} is being disposed`); + // Remove from the user agent's publisher collection + delete this.userAgent._publishers[this.id]; + // Send unpublish, if requested + if (this.options.unpublishOnClose && this.state === _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Published) { + return this.unpublish(); + } + if (this.publishRefreshTimer) { + clearTimeout(this.publishRefreshTimer); + this.publishRefreshTimer = undefined; + } + this.pubRequestBody = undefined; + this.pubRequestExpires = 0; + this.pubRequestEtag = undefined; + return Promise.resolve(); + } + /** The publication state. */ + get state() { + return this._state; + } + /** Emits when the publisher state changes. */ + get stateChange() { + return this._stateEventEmitter; + } + /** + * Publish. + * @param content - Body to publish + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + publish(content, options = {}) { + // Clean up before the run + if (this.publishRefreshTimer) { + clearTimeout(this.publishRefreshTimer); + this.publishRefreshTimer = undefined; + } + // is Initial or Modify request + this.options.body = content; + this.pubRequestBody = this.options.body; + if (this.pubRequestExpires === 0) { + // This is Initial request after unpublish + if (this.options.expires === undefined) { + throw new Error("Expires undefined."); + } + this.pubRequestExpires = this.options.expires; + this.pubRequestEtag = undefined; + } + this.sendPublishRequest(); + return Promise.resolve(); + } + /** + * Unpublish. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + unpublish(options = {}) { + // Clean up before the run + if (this.publishRefreshTimer) { + clearTimeout(this.publishRefreshTimer); + this.publishRefreshTimer = undefined; + } + this.pubRequestBody = undefined; + this.pubRequestExpires = 0; + if (this.pubRequestEtag !== undefined) { + this.sendPublishRequest(); + } + return Promise.resolve(); + } + /** @internal */ + receiveResponse(response) { + const statusCode = response.statusCode || 0; + switch (true) { + case /^1[0-9]{2}$/.test(statusCode.toString()): + break; + case /^2[0-9]{2}$/.test(statusCode.toString()): + // Set SIP-Etag + if (response.hasHeader("SIP-ETag")) { + this.pubRequestEtag = response.getHeader("SIP-ETag"); + } + else { + this.logger.warn("SIP-ETag header missing in a 200-class response to PUBLISH"); + } + // Update Expire + if (response.hasHeader("Expires")) { + const expires = Number(response.getHeader("Expires")); + if (typeof expires === "number" && expires >= 0 && expires <= this.pubRequestExpires) { + this.pubRequestExpires = expires; + } + else { + this.logger.warn("Bad Expires header in a 200-class response to PUBLISH"); + } + } + else { + this.logger.warn("Expires header missing in a 200-class response to PUBLISH"); + } + if (this.pubRequestExpires !== 0) { + // Schedule refresh + this.publishRefreshTimer = setTimeout(() => this.refreshRequest(), this.pubRequestExpires * 900); + if (this._state !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Published) { + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Published); + } + } + else { + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished); + } + break; + case /^412$/.test(statusCode.toString()): + // 412 code means no matching ETag - possibly the PUBLISH expired + // Resubmit as new request, if the current request is not a "remove" + if (this.pubRequestEtag !== undefined && this.pubRequestExpires !== 0) { + this.logger.warn("412 response to PUBLISH, recovering"); + this.pubRequestEtag = undefined; + if (this.options.body === undefined) { + throw new Error("Body undefined."); + } + this.publish(this.options.body); + } + else { + this.logger.warn("412 response to PUBLISH, recovery failed"); + this.pubRequestExpires = 0; + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished); + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated); + } + break; + case /^423$/.test(statusCode.toString()): + // 423 code means we need to adjust the Expires interval up + if (this.pubRequestExpires !== 0 && response.hasHeader("Min-Expires")) { + const minExpires = Number(response.getHeader("Min-Expires")); + if (typeof minExpires === "number" || minExpires > this.pubRequestExpires) { + this.logger.warn("423 code in response to PUBLISH, adjusting the Expires value and trying to recover"); + this.pubRequestExpires = minExpires; + if (this.options.body === undefined) { + throw new Error("Body undefined."); + } + this.publish(this.options.body); + } + else { + this.logger.warn("Bad 423 response Min-Expires header received for PUBLISH"); + this.pubRequestExpires = 0; + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished); + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated); + } + } + else { + this.logger.warn("423 response to PUBLISH, recovery failed"); + this.pubRequestExpires = 0; + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished); + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated); + } + break; + default: + this.pubRequestExpires = 0; + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished); + this.stateTransition(_publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated); + break; + } + // Do the cleanup + if (this.pubRequestExpires === 0) { + if (this.publishRefreshTimer) { + clearTimeout(this.publishRefreshTimer); + this.publishRefreshTimer = undefined; + } + this.pubRequestBody = undefined; + this.pubRequestEtag = undefined; + } + } + /** @internal */ + send() { + return this.userAgent.userAgentCore.publish(this.request, { + onAccept: (response) => this.receiveResponse(response.message), + onProgress: (response) => this.receiveResponse(response.message), + onRedirect: (response) => this.receiveResponse(response.message), + onReject: (response) => this.receiveResponse(response.message), + onTrying: (response) => this.receiveResponse(response.message) + }); + } + refreshRequest() { + // Clean up before the run + if (this.publishRefreshTimer) { + clearTimeout(this.publishRefreshTimer); + this.publishRefreshTimer = undefined; + } + // This is Refresh request + this.pubRequestBody = undefined; + if (this.pubRequestEtag === undefined) { + throw new Error("Etag undefined"); + } + if (this.pubRequestExpires === 0) { + throw new Error("Expires zero"); + } + this.sendPublishRequest(); + } + sendPublishRequest() { + const reqOptions = Object.assign({}, this.options); + reqOptions.extraHeaders = (this.options.extraHeaders || []).slice(); + reqOptions.extraHeaders.push("Event: " + this.event); + reqOptions.extraHeaders.push("Expires: " + this.pubRequestExpires); + if (this.pubRequestEtag !== undefined) { + reqOptions.extraHeaders.push("SIP-If-Match: " + this.pubRequestEtag); + } + const ruri = this.target; + const params = this.options.params || {}; + let bodyAndContentType; + if (this.pubRequestBody !== undefined) { + if (this.options.contentType === undefined) { + throw new Error("Content type undefined."); + } + bodyAndContentType = { + body: this.pubRequestBody, + contentType: this.options.contentType + }; + } + let body; + if (bodyAndContentType) { + body = (0,_core__WEBPACK_IMPORTED_MODULE_3__.fromBodyLegacy)(bodyAndContentType); + } + this.request = this.userAgent.userAgentCore.makeOutgoingRequestMessage(_core__WEBPACK_IMPORTED_MODULE_2__.C.PUBLISH, ruri, params.fromUri ? params.fromUri : this.userAgent.userAgentCore.configuration.aor, params.toUri ? params.toUri : this.target, params, reqOptions.extraHeaders, body); + return this.send(); + } + /** + * Transition publication state. + */ + stateTransition(newState) { + const invalidTransition = () => { + throw new Error(`Invalid state transition from ${this._state} to ${newState}`); + }; + // Validate transition + switch (this._state) { + case _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Initial: + if (newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Published && + newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished && + newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated) { + invalidTransition(); + } + break; + case _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Published: + if (newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished && newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated) { + invalidTransition(); + } + break; + case _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Unpublished: + if (newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Published && newState !== _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated) { + invalidTransition(); + } + break; + case _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated: + invalidTransition(); + break; + default: + throw new Error("Unrecognized state."); + } + // Transition + this._state = newState; + this.logger.log(`Publication transitioned to state ${this._state}`); + this._stateEventEmitter.emit(this._state); + // Dispose + if (newState === _publisher_state__WEBPACK_IMPORTED_MODULE_0__.PublisherState.Terminated) { + this.dispose(); + } + } +} + + +/***/ }), +/* 41 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RegistererState": () => (/* binding */ RegistererState) +/* harmony export */ }); +/** + * {@link Registerer} state. + * @remarks + * The {@link Registerer} behaves in a deterministic manner according to the following + * Finite State Machine (FSM). + * ```txt + * __________________________________________ + * | __________________________ | + * Registerer | | v v + * Constructed -> Initial -> Registered -> Unregistered -> Terminated + * | ^____________| ^ + * |______________________________| + * ``` + * @public + */ +var RegistererState; +(function (RegistererState) { + RegistererState["Initial"] = "Initial"; + RegistererState["Registered"] = "Registered"; + RegistererState["Unregistered"] = "Unregistered"; + RegistererState["Terminated"] = "Terminated"; +})(RegistererState || (RegistererState = {})); + + +/***/ }), +/* 42 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Registerer": () => (/* binding */ Registerer) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(23); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6); +/* harmony import */ var _registerer_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41); + + + + +/** + * A registerer registers a contact for an address of record (outgoing REGISTER). + * @public + */ +class Registerer { + /** + * Constructs a new instance of the `Registerer` class. + * @param userAgent - User agent. See {@link UserAgent} for details. + * @param options - Options bucket. See {@link RegistererOptions} for details. + */ + constructor(userAgent, options = {}) { + this.disposed = false; + /** The contacts returned from the most recent accepted REGISTER request. */ + this._contacts = []; + /** The number of seconds to wait before retrying to register. */ + this._retryAfter = undefined; + /** The registration state. */ + this._state = _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Initial; + /** True is waiting for final response to outstanding REGISTER request. */ + this._waiting = false; + // state emitter + this._stateEventEmitter = new _emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + // waiting emitter + this._waitingEventEmitter = new _emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + // Set user agent + this.userAgent = userAgent; + // Default registrar is domain portion of user agent uri + const defaultUserAgentRegistrar = userAgent.configuration.uri.clone(); + defaultUserAgentRegistrar.user = undefined; + // Initialize configuration + this.options = Object.assign(Object.assign(Object.assign({}, Registerer.defaultOptions()), { registrar: defaultUserAgentRegistrar }), Registerer.stripUndefinedProperties(options)); + // Make sure we are not using references to array options + this.options.extraContactHeaderParams = (this.options.extraContactHeaderParams || []).slice(); + this.options.extraHeaders = (this.options.extraHeaders || []).slice(); + // Make sure we are not using references to registrar uri + if (!this.options.registrar) { + throw new Error("Registrar undefined."); + } + this.options.registrar = this.options.registrar.clone(); + // Set instanceId and regId conditional defaults and validate + if (this.options.regId && !this.options.instanceId) { + this.options.instanceId = Registerer.newUUID(); + } + else if (!this.options.regId && this.options.instanceId) { + this.options.regId = 1; + } + if (this.options.instanceId && _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.parse(this.options.instanceId, "uuid") === -1) { + throw new Error("Invalid instanceId."); + } + if (this.options.regId && this.options.regId < 0) { + throw new Error("Invalid regId."); + } + const registrar = this.options.registrar; + const fromURI = (this.options.params && this.options.params.fromUri) || userAgent.userAgentCore.configuration.aor; + const toURI = (this.options.params && this.options.params.toUri) || userAgent.configuration.uri; + const params = this.options.params || {}; + const extraHeaders = (options.extraHeaders || []).slice(); + // Build the request + this.request = userAgent.userAgentCore.makeOutgoingRequestMessage(_core__WEBPACK_IMPORTED_MODULE_3__.C.REGISTER, registrar, fromURI, toURI, params, extraHeaders, undefined); + // Registration expires + this.expires = this.options.expires || Registerer.defaultExpires; + if (this.expires < 0) { + throw new Error("Invalid expires."); + } + // Interval at which re-REGISTER requests are sent + this.refreshFrequency = this.options.refreshFrequency || Registerer.defaultRefreshFrequency; + if (this.refreshFrequency < 50 || this.refreshFrequency > 99) { + throw new Error("Invalid refresh frequency. The value represents a percentage of the expiration time and should be between 50 and 99."); + } + // initialize logger + this.logger = userAgent.getLogger("sip.Registerer"); + if (this.options.logConfiguration) { + this.logger.log("Configuration:"); + Object.keys(this.options).forEach((key) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const value = this.options[key]; + switch (key) { + case "registrar": + this.logger.log("· " + key + ": " + value); + break; + default: + this.logger.log("· " + key + ": " + JSON.stringify(value)); + } + }); + } + // Identifier + this.id = this.request.callId + this.request.from.parameters.tag; + // Add to the user agent's session collection. + this.userAgent._registerers[this.id] = this; + } + /** Default registerer options. */ + static defaultOptions() { + return { + expires: Registerer.defaultExpires, + extraContactHeaderParams: [], + extraHeaders: [], + logConfiguration: true, + instanceId: "", + params: {}, + regId: 0, + registrar: new _core__WEBPACK_IMPORTED_MODULE_4__.URI("sip", "anonymous", "anonymous.invalid"), + refreshFrequency: Registerer.defaultRefreshFrequency + }; + } + // http://stackoverflow.com/users/109538/broofa + static newUUID() { + const UUID = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => { + const r = Math.floor(Math.random() * 16); + const v = c === "x" ? r : (r % 4) + 8; + return v.toString(16); + }); + return UUID; + } + /** + * Strip properties with undefined values from options. + * This is a work around while waiting for missing vs undefined to be addressed (or not)... + * https://github.com/Microsoft/TypeScript/issues/13195 + * @param options - Options to reduce + */ + static stripUndefinedProperties(options) { + return Object.keys(options).reduce((object, key) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (options[key] !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + object[key] = options[key]; + } + return object; + }, {}); + } + /** The registered contacts. */ + get contacts() { + return this._contacts.slice(); + } + /** + * The number of seconds to wait before retrying to register. + * @defaultValue `undefined` + * @remarks + * When the server rejects a registration request, if it provides a suggested + * duration to wait before retrying, that value is available here when and if + * the state transitions to `Unsubscribed`. It is also available during the + * callback to `onReject` after a call to `register`. (Note that if the state + * if already `Unsubscribed`, a rejected request created by `register` will + * not cause the state to transition to `Unsubscribed`. One way to avoid this + * case is to dispose of `Registerer` when unregistered and create a new + * `Registerer` for any attempts to retry registering.) + * @example + * ```ts + * // Checking for retry after on state change + * registerer.stateChange.addListener((newState) => { + * switch (newState) { + * case RegistererState.Unregistered: + * const retryAfter = registerer.retryAfter; + * break; + * } + * }); + * + * // Checking for retry after on request rejection + * registerer.register({ + * requestDelegate: { + * onReject: () => { + * const retryAfter = registerer.retryAfter; + * } + * } + * }); + * ``` + */ + get retryAfter() { + return this._retryAfter; + } + /** The registration state. */ + get state() { + return this._state; + } + /** Emits when the registerer state changes. */ + get stateChange() { + return this._stateEventEmitter; + } + /** Destructor. */ + dispose() { + if (this.disposed) { + return Promise.resolve(); + } + this.disposed = true; + this.logger.log(`Registerer ${this.id} in state ${this.state} is being disposed`); + // Remove from the user agent's registerer collection + delete this.userAgent._registerers[this.id]; + // If registered, unregisters and resolves after final response received. + return new Promise((resolve) => { + const doClose = () => { + // If we are registered, unregister and resolve after our state changes + if (!this.waiting && this._state === _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered) { + this.stateChange.addListener(() => { + this.terminated(); + resolve(); + }, { once: true }); + this.unregister(); + return; + } + // Otherwise just resolve + this.terminated(); + resolve(); + }; + // If we are waiting for an outstanding request, wait for it to finish and then try closing. + // Otherwise just try closing. + if (this.waiting) { + this.waitingChange.addListener(() => { + doClose(); + }, { once: true }); + } + else { + doClose(); + } + }); + } + /** + * Sends the REGISTER request. + * @remarks + * If successful, sends re-REGISTER requests prior to registration expiration until `unsubscribe()` is called. + * Rejects with `RequestPendingError` if a REGISTER request is already in progress. + */ + register(options = {}) { + if (this.state === _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + this.stateError(); + throw new Error("Registerer terminated. Unable to register."); + } + if (this.disposed) { + this.stateError(); + throw new Error("Registerer disposed. Unable to register."); + } + // UAs MUST NOT send a new registration (that is, containing new Contact + // header field values, as opposed to a retransmission) until they have + // received a final response from the registrar for the previous one or + // the previous REGISTER request has timed out. + // https://tools.ietf.org/html/rfc3261#section-10.2 + if (this.waiting) { + this.waitingWarning(); + const error = new _exceptions__WEBPACK_IMPORTED_MODULE_5__.RequestPendingError("REGISTER request already in progress, waiting for final response"); + return Promise.reject(error); + } + // Options + if (options.requestOptions) { + this.options = Object.assign(Object.assign({}, this.options), options.requestOptions); + } + // Extra headers + const extraHeaders = (this.options.extraHeaders || []).slice(); + extraHeaders.push("Contact: " + this.generateContactHeader(this.expires)); + // this is UA.C.ALLOWED_METHODS, removed to get around circular dependency + extraHeaders.push("Allow: " + ["ACK", "CANCEL", "INVITE", "MESSAGE", "BYE", "OPTIONS", "INFO", "NOTIFY", "REFER"].toString()); + // Call-ID: All registrations from a UAC SHOULD use the same Call-ID + // header field value for registrations sent to a particular + // registrar. + // + // CSeq: The CSeq value guarantees proper ordering of REGISTER + // requests. A UA MUST increment the CSeq value by one for each + // REGISTER request with the same Call-ID. + // https://tools.ietf.org/html/rfc3261#section-10.2 + this.request.cseq++; + this.request.setHeader("cseq", this.request.cseq + " REGISTER"); + this.request.extraHeaders = extraHeaders; + this.waitingToggle(true); + const outgoingRegisterRequest = this.userAgent.userAgentCore.register(this.request, { + onAccept: (response) => { + let expires; + // FIXME: This does NOT appear to be to spec and should be removed. + // I haven't found anywhere that an Expires header may be used in a response. + if (response.message.hasHeader("expires")) { + expires = Number(response.message.getHeader("expires")); + } + // 8. The registrar returns a 200 (OK) response. The response MUST + // contain Contact header field values enumerating all current + // bindings. Each Contact value MUST feature an "expires" + // parameter indicating its expiration interval chosen by the + // registrar. The response SHOULD include a Date header field. + // https://tools.ietf.org/html/rfc3261#section-10.3 + this._contacts = response.message.getHeaders("contact"); + let contacts = this._contacts.length; + if (!contacts) { + this.logger.error("No Contact header in response to REGISTER, dropping response."); + this.unregistered(); + return; + } + // The 200 (OK) response from the registrar contains a list of Contact + // fields enumerating all current bindings. The UA compares each + // contact address to see if it created the contact address, using + // comparison rules in Section 19.1.4. If so, it updates the expiration + // time interval according to the expires parameter or, if absent, the + // Expires field value. The UA then issues a REGISTER request for each + // of its bindings before the expiration interval has elapsed. + // https://tools.ietf.org/html/rfc3261#section-10.2.4 + let contact; + while (contacts--) { + contact = response.message.parseHeader("contact", contacts); + if (!contact) { + throw new Error("Contact undefined"); + } + if (this.userAgent.contact.pubGruu && (0,_core__WEBPACK_IMPORTED_MODULE_4__.equivalentURI)(contact.uri, this.userAgent.contact.pubGruu)) { + expires = Number(contact.getParam("expires")); + break; + } + // If we are using a randomly generated user name (which is the default behavior) + if (this.userAgent.configuration.contactName === "") { + // compare the user portion of the URI under the assumption that it will be unique + if (contact.uri.user === this.userAgent.contact.uri.user) { + expires = Number(contact.getParam("expires")); + break; + } + } + else { + // otherwise use comparision rules in Section 19.1.4 + if ((0,_core__WEBPACK_IMPORTED_MODULE_4__.equivalentURI)(contact.uri, this.userAgent.contact.uri)) { + expires = Number(contact.getParam("expires")); + break; + } + } + contact = undefined; + } + // There must be a matching contact. + if (contact === undefined) { + this.logger.error("No Contact header pointing to us, dropping response"); + this.unregistered(); + this.waitingToggle(false); + return; + } + // The contact must have an expires. + if (expires === undefined) { + this.logger.error("Contact pointing to us is missing expires parameter, dropping response"); + this.unregistered(); + this.waitingToggle(false); + return; + } + // Save gruu values + if (contact.hasParam("temp-gruu")) { + const gruu = contact.getParam("temp-gruu"); + if (gruu) { + this.userAgent.contact.tempGruu = _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.URIParse(gruu.replace(/"/g, "")); + } + } + if (contact.hasParam("pub-gruu")) { + const gruu = contact.getParam("pub-gruu"); + if (gruu) { + this.userAgent.contact.pubGruu = _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.URIParse(gruu.replace(/"/g, "")); + } + } + this.registered(expires); + if (options.requestDelegate && options.requestDelegate.onAccept) { + options.requestDelegate.onAccept(response); + } + this.waitingToggle(false); + }, + onProgress: (response) => { + if (options.requestDelegate && options.requestDelegate.onProgress) { + options.requestDelegate.onProgress(response); + } + }, + onRedirect: (response) => { + this.logger.error("Redirect received. Not supported."); + this.unregistered(); + if (options.requestDelegate && options.requestDelegate.onRedirect) { + options.requestDelegate.onRedirect(response); + } + this.waitingToggle(false); + }, + onReject: (response) => { + if (response.message.statusCode === 423) { + // If a UA receives a 423 (Interval Too Brief) response, it MAY retry + // the registration after making the expiration interval of all contact + // addresses in the REGISTER request equal to or greater than the + // expiration interval within the Min-Expires header field of the 423 + // (Interval Too Brief) response. + // https://tools.ietf.org/html/rfc3261#section-10.2.8 + // + // The registrar MAY choose an expiration less than the requested + // expiration interval. If and only if the requested expiration + // interval is greater than zero AND smaller than one hour AND + // less than a registrar-configured minimum, the registrar MAY + // reject the registration with a response of 423 (Interval Too + // Brief). This response MUST contain a Min-Expires header field + // that states the minimum expiration interval the registrar is + // willing to honor. It then skips the remaining steps. + // https://tools.ietf.org/html/rfc3261#section-10.3 + if (!response.message.hasHeader("min-expires")) { + // This response MUST contain a Min-Expires header field + this.logger.error("423 response received for REGISTER without Min-Expires, dropping response"); + this.unregistered(); + this.waitingToggle(false); + return; + } + // Increase our registration interval to the suggested minimum + this.expires = Number(response.message.getHeader("min-expires")); + // Attempt the registration again immediately + this.waitingToggle(false); + this.register(); + return; + } + this.logger.warn(`Failed to register, status code ${response.message.statusCode}`); + // The Retry-After header field can be used with a 500 (Server Internal + // Error) or 503 (Service Unavailable) response to indicate how long the + // service is expected to be unavailable to the requesting client... + // https://tools.ietf.org/html/rfc3261#section-20.33 + let retryAfterDuration = NaN; + if (response.message.statusCode === 500 || response.message.statusCode === 503) { + const header = response.message.getHeader("retry-after"); + if (header) { + retryAfterDuration = Number.parseInt(header, undefined); + } + } + // Set for the state change (if any) and the delegate callback (if any) + this._retryAfter = isNaN(retryAfterDuration) ? undefined : retryAfterDuration; + this.unregistered(); + if (options.requestDelegate && options.requestDelegate.onReject) { + options.requestDelegate.onReject(response); + } + this._retryAfter = undefined; + this.waitingToggle(false); + }, + onTrying: (response) => { + if (options.requestDelegate && options.requestDelegate.onTrying) { + options.requestDelegate.onTrying(response); + } + } + }); + return Promise.resolve(outgoingRegisterRequest); + } + /** + * Sends the REGISTER request with expires equal to zero. + * @remarks + * Rejects with `RequestPendingError` if a REGISTER request is already in progress. + */ + unregister(options = {}) { + if (this.state === _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + this.stateError(); + throw new Error("Registerer terminated. Unable to register."); + } + if (this.disposed) { + if (this.state !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered) { + // allows unregister while disposing and registered + this.stateError(); + throw new Error("Registerer disposed. Unable to register."); + } + } + // UAs MUST NOT send a new registration (that is, containing new Contact + // header field values, as opposed to a retransmission) until they have + // received a final response from the registrar for the previous one or + // the previous REGISTER request has timed out. + // https://tools.ietf.org/html/rfc3261#section-10.2 + if (this.waiting) { + this.waitingWarning(); + const error = new _exceptions__WEBPACK_IMPORTED_MODULE_5__.RequestPendingError("REGISTER request already in progress, waiting for final response"); + return Promise.reject(error); + } + if (this._state !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered && !options.all) { + this.logger.warn("Not currently registered, but sending an unregister anyway."); + } + // Extra headers + const extraHeaders = ((options.requestOptions && options.requestOptions.extraHeaders) || []).slice(); + this.request.extraHeaders = extraHeaders; + // Registrations are soft state and expire unless refreshed, but can + // also be explicitly removed. A client can attempt to influence the + // expiration interval selected by the registrar as described in Section + // 10.2.1. A UA requests the immediate removal of a binding by + // specifying an expiration interval of "0" for that contact address in + // a REGISTER request. UAs SHOULD support this mechanism so that + // bindings can be removed before their expiration interval has passed. + // + // The REGISTER-specific Contact header field value of "*" applies to + // all registrations, but it MUST NOT be used unless the Expires header + // field is present with a value of "0". + // https://tools.ietf.org/html/rfc3261#section-10.2.2 + if (options.all) { + extraHeaders.push("Contact: *"); + extraHeaders.push("Expires: 0"); + } + else { + extraHeaders.push("Contact: " + this.generateContactHeader(0)); + } + // Call-ID: All registrations from a UAC SHOULD use the same Call-ID + // header field value for registrations sent to a particular + // registrar. + // + // CSeq: The CSeq value guarantees proper ordering of REGISTER + // requests. A UA MUST increment the CSeq value by one for each + // REGISTER request with the same Call-ID. + // https://tools.ietf.org/html/rfc3261#section-10.2 + this.request.cseq++; + this.request.setHeader("cseq", this.request.cseq + " REGISTER"); + // Pre-emptive clear the registration timer to avoid a race condition where + // this timer fires while waiting for a final response to the unsubscribe. + if (this.registrationTimer !== undefined) { + clearTimeout(this.registrationTimer); + this.registrationTimer = undefined; + } + this.waitingToggle(true); + const outgoingRegisterRequest = this.userAgent.userAgentCore.register(this.request, { + onAccept: (response) => { + this._contacts = response.message.getHeaders("contact"); // Update contacts + this.unregistered(); + if (options.requestDelegate && options.requestDelegate.onAccept) { + options.requestDelegate.onAccept(response); + } + this.waitingToggle(false); + }, + onProgress: (response) => { + if (options.requestDelegate && options.requestDelegate.onProgress) { + options.requestDelegate.onProgress(response); + } + }, + onRedirect: (response) => { + this.logger.error("Unregister redirected. Not currently supported."); + this.unregistered(); + if (options.requestDelegate && options.requestDelegate.onRedirect) { + options.requestDelegate.onRedirect(response); + } + this.waitingToggle(false); + }, + onReject: (response) => { + this.logger.error(`Unregister rejected with status code ${response.message.statusCode}`); + this.unregistered(); + if (options.requestDelegate && options.requestDelegate.onReject) { + options.requestDelegate.onReject(response); + } + this.waitingToggle(false); + }, + onTrying: (response) => { + if (options.requestDelegate && options.requestDelegate.onTrying) { + options.requestDelegate.onTrying(response); + } + } + }); + return Promise.resolve(outgoingRegisterRequest); + } + /** + * Clear registration timers. + */ + clearTimers() { + if (this.registrationTimer !== undefined) { + clearTimeout(this.registrationTimer); + this.registrationTimer = undefined; + } + if (this.registrationExpiredTimer !== undefined) { + clearTimeout(this.registrationExpiredTimer); + this.registrationExpiredTimer = undefined; + } + } + /** + * Generate Contact Header + */ + generateContactHeader(expires) { + let contact = this.userAgent.contact.toString(); + if (this.options.regId && this.options.instanceId) { + contact += ";reg-id=" + this.options.regId; + contact += ';+sip.instance=""'; + } + if (this.options.extraContactHeaderParams) { + this.options.extraContactHeaderParams.forEach((header) => { + contact += ";" + header; + }); + } + contact += ";expires=" + expires; + return contact; + } + /** + * Helper function, called when registered. + */ + registered(expires) { + this.clearTimers(); + // Re-Register before the expiration interval has elapsed. + // For that, calculate the delay as a percentage of the expiration time + this.registrationTimer = setTimeout(() => { + this.registrationTimer = undefined; + this.register(); + }, (this.refreshFrequency / 100) * expires * 1000); + // We are unregistered if the registration expires. + this.registrationExpiredTimer = setTimeout(() => { + this.logger.warn("Registration expired"); + this.unregistered(); + }, expires * 1000); + if (this._state !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered) { + this.stateTransition(_registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered); + } + } + /** + * Helper function, called when unregistered. + */ + unregistered() { + this.clearTimers(); + if (this._state !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Unregistered) { + this.stateTransition(_registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Unregistered); + } + } + /** + * Helper function, called when terminated. + */ + terminated() { + this.clearTimers(); + if (this._state !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + this.stateTransition(_registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated); + } + } + /** + * Transition registration state. + */ + stateTransition(newState) { + const invalidTransition = () => { + throw new Error(`Invalid state transition from ${this._state} to ${newState}`); + }; + // Validate transition + switch (this._state) { + case _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Initial: + if (newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered && + newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Unregistered && + newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + invalidTransition(); + } + break; + case _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered: + if (newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Unregistered && newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + invalidTransition(); + } + break; + case _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Unregistered: + if (newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Registered && newState !== _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + invalidTransition(); + } + break; + case _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated: + invalidTransition(); + break; + default: + throw new Error("Unrecognized state."); + } + // Transition + this._state = newState; + this.logger.log(`Registration transitioned to state ${this._state}`); + this._stateEventEmitter.emit(this._state); + // Dispose + if (newState === _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated) { + this.dispose(); + } + } + /** True if the registerer is currently waiting for final response to a REGISTER request. */ + get waiting() { + return this._waiting; + } + /** Emits when the registerer waiting state changes. */ + get waitingChange() { + return this._waitingEventEmitter; + } + /** + * Toggle waiting. + */ + waitingToggle(waiting) { + if (this._waiting === waiting) { + throw new Error(`Invalid waiting transition from ${this._waiting} to ${waiting}`); + } + this._waiting = waiting; + this.logger.log(`Waiting toggled to ${this._waiting}`); + this._waitingEventEmitter.emit(this._waiting); + } + /** Hopefully helpful as the standard behavior has been found to be unexpected. */ + waitingWarning() { + let message = "An attempt was made to send a REGISTER request while a prior one was still in progress."; + message += " RFC 3261 requires UAs MUST NOT send a new registration until they have received a final response"; + message += " from the registrar for the previous one or the previous REGISTER request has timed out."; + message += " Note that if the transport disconnects, you still must wait for the prior request to time out before"; + message += + " sending a new REGISTER request or alternatively dispose of the current Registerer and create a new Registerer."; + this.logger.warn(message); + } + /** Hopefully helpful as the standard behavior has been found to be unexpected. */ + stateError() { + const reason = this.state === _registerer_state__WEBPACK_IMPORTED_MODULE_0__.RegistererState.Terminated ? "is in 'Terminated' state" : "has been disposed"; + let message = `An attempt was made to send a REGISTER request when the Registerer ${reason}.`; + message += " The Registerer transitions to 'Terminated' when Registerer.dispose() is called."; + message += " Perhaps you called UserAgent.stop() which dipsoses of all Registerers?"; + this.logger.error(message); + } +} +Registerer.defaultExpires = 600; +Registerer.defaultRefreshFrequency = 99; + + +/***/ }), +/* 43 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Subscriber": () => (/* binding */ Subscriber) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(17); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(29); +/* harmony import */ var _core_user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28); +/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(32); +/* harmony import */ var _subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(44); +/* harmony import */ var _subscription_state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45); + + + + + +/** + * A subscriber establishes a {@link Subscription} (outgoing SUBSCRIBE). + * + * @remarks + * This is (more or less) an implementation of a "subscriber" as + * defined in RFC 6665 "SIP-Specific Event Notifications". + * https://tools.ietf.org/html/rfc6665 + * + * @example + * ```ts + * // Create a new subscriber. + * const targetURI = new URI("sip", "alice", "example.com"); + * const eventType = "example-name"; // https://www.iana.org/assignments/sip-events/sip-events.xhtml + * const subscriber = new Subscriber(userAgent, targetURI, eventType); + * + * // Add delegate to handle event notifications. + * subscriber.delegate = { + * onNotify: (notification: Notification) => { + * // handle notification here + * } + * }; + * + * // Monitor subscription state changes. + * subscriber.stateChange.addListener((newState: SubscriptionState) => { + * if (newState === SubscriptionState.Terminated) { + * // handle state change here + * } + * }); + * + * // Attempt to establish the subscription + * subscriber.subscribe(); + * + * // Sometime later when done with subscription + * subscriber.unsubscribe(); + * ``` + * + * @public + */ +class Subscriber extends _subscription__WEBPACK_IMPORTED_MODULE_0__.Subscription { + /** + * Constructor. + * @param userAgent - User agent. See {@link UserAgent} for details. + * @param targetURI - The request URI identifying the subscribed event. + * @param eventType - The event type identifying the subscribed event. + * @param options - Options bucket. See {@link SubscriberOptions} for details. + */ + constructor(userAgent, targetURI, eventType, options = {}) { + super(userAgent, options); + this.body = undefined; + this.logger = userAgent.getLogger("sip.Subscriber"); + if (options.body) { + this.body = { + body: options.body, + contentType: options.contentType ? options.contentType : "application/sdp" + }; + } + this.targetURI = targetURI; + // Subscription event + this.event = eventType; + // Subscription expires + if (options.expires === undefined) { + this.expires = 3600; + } + else if (typeof options.expires !== "number") { + // pre-typescript type guard + this.logger.warn(`Option "expires" must be a number. Using default of 3600.`); + this.expires = 3600; + } + else { + this.expires = options.expires; + } + // Subscription extra headers + this.extraHeaders = (options.extraHeaders || []).slice(); + // Subscription context. + this.subscriberRequest = this.initSubscriberRequest(); + this.outgoingRequestMessage = this.subscriberRequest.message; + // Add to UserAgent's collection + this.id = this.outgoingRequestMessage.callId + this.outgoingRequestMessage.from.parameters.tag + this.event; + this._userAgent._subscriptions[this.id] = this; + } + /** + * Destructor. + * @internal + */ + dispose() { + if (this.disposed) { + return Promise.resolve(); + } + this.logger.log(`Subscription ${this.id} in state ${this.state} is being disposed`); + // Remove from the user agent's subscription collection + delete this._userAgent._subscriptions[this.id]; + // Clear timers + if (this.retryAfterTimer) { + clearTimeout(this.retryAfterTimer); + this.retryAfterTimer = undefined; + } + // Dispose subscriber request + this.subscriberRequest.dispose(); + // Make sure to dispose of our parent, then unsubscribe the + // subscription dialog (if need be) and resolve when it has terminated. + return super.dispose().then(() => { + // If we have never subscribed there is nothing to wait on. + // If we are already transitioned to terminated there is no need to unsubscribe again. + if (this.state !== _subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Subscribed) { + return; + } + if (!this._dialog) { + throw new Error("Dialog undefined."); + } + if (this._dialog.subscriptionState === _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Pending || + this._dialog.subscriptionState === _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Active) { + const dialog = this._dialog; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + return new Promise((resolve, reject) => { + dialog.delegate = { + onTerminated: () => resolve() + }; + dialog.unsubscribe(); + }); + } + }); + } + /** + * Subscribe to event notifications. + * + * @remarks + * Send an initial SUBSCRIBE request if no subscription as been established. + * Sends a re-SUBSCRIBE request if the subscription is "active". + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + subscribe(options = {}) { + switch (this.subscriberRequest.state) { + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Initial: + // we can end up here when retrying so only state transition if in SubscriptionState.Initial state + if (this.state === _subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Initial) { + this.stateTransition(_subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.NotifyWait); + } + this.subscriberRequest.subscribe().then((result) => { + if (result.success) { + if (result.success.subscription) { + this._dialog = result.success.subscription; + this._dialog.delegate = { + onNotify: (request) => this.onNotify(request), + onRefresh: (request) => this.onRefresh(request), + onTerminated: () => { + // If a call to unsubscribe will state transition to SubscriptionState.Terminated, + // but we can end up here after that if the NOTIFY never arrives and timer N fires. + if (this.state !== _subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Terminated) { + this.stateTransition(_subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Terminated); + } + } + }; + } + this.onNotify(result.success.request); + } + else if (result.failure) { + this.unsubscribe(); + } + }); + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.NotifyWait: + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Pending: + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Active: + if (this._dialog) { + const request = this._dialog.refresh(); + request.delegate = { + onAccept: (response) => this.onAccepted(response), + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onRedirect: (response) => this.unsubscribe(), + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onReject: (response) => this.unsubscribe() + }; + } + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Terminated: + break; + default: + break; + } + return Promise.resolve(); + } + /** + * {@inheritDoc Subscription.unsubscribe} + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + unsubscribe(options = {}) { + if (this.disposed) { + return Promise.resolve(); + } + switch (this.subscriberRequest.state) { + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Initial: + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.NotifyWait: + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Pending: + if (this._dialog) { + this._dialog.unsubscribe(); + // responses intentionally ignored + } + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Active: + if (this._dialog) { + this._dialog.unsubscribe(); + // responses intentionally ignored + } + break; + case _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Terminated: + break; + default: + throw new Error("Unknown state."); + } + this.stateTransition(_subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Terminated); + return Promise.resolve(); + } + /** + * Sends a re-SUBSCRIBE request if the subscription is "active". + * @deprecated Use `subscribe` instead. + * @internal + */ + _refresh() { + if (this.subscriberRequest.state === _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Active) { + return this.subscribe(); + } + return Promise.resolve(); + } + /** @internal */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onAccepted(response) { + // NOTE: If you think you should do something with this response, + // please make sure you understand what it is you are doing and why. + // Per the RFC, the first NOTIFY is all that actually matters. + } + /** @internal */ + onNotify(request) { + // If we've set state to done, no further processing should take place + // and we are only interested in cleaning up after the appropriate NOTIFY. + if (this.disposed) { + request.accept(); + return; + } + // State transition if needed. + if (this.state !== _subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Subscribed) { + this.stateTransition(_subscription_state__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState.Subscribed); + } + // Delegate notification. + if (this.delegate && this.delegate.onNotify) { + const notification = new _notification__WEBPACK_IMPORTED_MODULE_3__.Notification(request); + this.delegate.onNotify(notification); + } + else { + request.accept(); + } + // If the "Subscription-State" value is SubscriptionState.Terminated, the subscriber + // MUST consider the subscription terminated. The "expires" parameter + // has no semantics for SubscriptionState.Terminated -- notifiers SHOULD NOT include an + // "expires" parameter on a "Subscription-State" header field with a + // value of SubscriptionState.Terminated, and subscribers MUST ignore any such + // parameter, if present. If a reason code is present, the client + // should behave as described below. If no reason code or an unknown + // reason code is present, the client MAY attempt to re-subscribe at any + // time (unless a "retry-after" parameter is present, in which case the + // client SHOULD NOT attempt re-subscription until after the number of + // seconds specified by the "retry-after" parameter). The reason codes + // defined by this document are: + // https://tools.ietf.org/html/rfc6665#section-4.1.3 + const subscriptionState = request.message.parseHeader("Subscription-State"); + if (subscriptionState && subscriptionState.state) { + switch (subscriptionState.state) { + case "terminated": + if (subscriptionState.reason) { + this.logger.log(`Terminated subscription with reason ${subscriptionState.reason}`); + switch (subscriptionState.reason) { + case "deactivated": + case "timeout": + this.initSubscriberRequest(); + this.subscribe(); + return; + case "probation": + case "giveup": + this.initSubscriberRequest(); + if (subscriptionState.params && subscriptionState.params["retry-after"]) { + this.retryAfterTimer = setTimeout(() => { + this.subscribe(); + }, subscriptionState.params["retry-after"]); + } + else { + this.subscribe(); + } + return; + case "rejected": + case "noresource": + case "invariant": + break; + } + } + this.unsubscribe(); + break; + default: + break; + } + } + } + /** @internal */ + onRefresh(request) { + request.delegate = { + onAccept: (response) => this.onAccepted(response) + }; + } + initSubscriberRequest() { + const options = { + extraHeaders: this.extraHeaders, + body: this.body ? (0,_core__WEBPACK_IMPORTED_MODULE_4__.fromBodyLegacy)(this.body) : undefined + }; + // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.subscriberRequest = new SubscriberRequest(this._userAgent.userAgentCore, this.targetURI, this.event, this.expires, options); + this.subscriberRequest.delegate = { + onAccept: (response) => this.onAccepted(response) + }; + return this.subscriberRequest; + } +} +class SubscriberRequest { + constructor(core, target, event, expires, options, delegate) { + this.core = core; + this.target = target; + this.event = event; + this.expires = expires; + this.subscribed = false; + this.logger = core.loggerFactory.getLogger("sip.Subscriber"); + this.delegate = delegate; + const allowHeader = "Allow: " + _core_user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_5__.AllowedMethods.toString(); + const extraHeaders = ((options && options.extraHeaders) || []).slice(); + extraHeaders.push(allowHeader); + extraHeaders.push("Event: " + this.event); + extraHeaders.push("Expires: " + this.expires); + extraHeaders.push("Contact: " + this.core.configuration.contact.toString()); + const body = options && options.body; + this.message = core.makeOutgoingRequestMessage(_core__WEBPACK_IMPORTED_MODULE_6__.C.SUBSCRIBE, this.target, this.core.configuration.aor, this.target, {}, extraHeaders, body); + } + /** Destructor. */ + dispose() { + if (this.request) { + this.request.waitNotifyStop(); + this.request.dispose(); + this.request = undefined; + } + } + /** Subscription state. */ + get state() { + if (this.subscription) { + return this.subscription.subscriptionState; + } + else if (this.subscribed) { + return _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.NotifyWait; + } + else { + return _core__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Initial; + } + } + /** + * Establish subscription. + * @param options Options bucket. + */ + subscribe() { + if (this.subscribed) { + return Promise.reject(new Error("Not in initial state. Did you call subscribe more than once?")); + } + this.subscribed = true; + return new Promise((resolve) => { + if (!this.message) { + throw new Error("Message undefined."); + } + this.request = this.core.subscribe(this.message, { + // This SUBSCRIBE request will be confirmed with a final response. + // 200-class responses indicate that the subscription has been accepted + // and that a NOTIFY request will be sent immediately. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.1 + onAccept: (response) => { + if (this.delegate && this.delegate.onAccept) { + this.delegate.onAccept(response); + } + }, + // Due to the potential for out-of-order messages, packet loss, and + // forking, the subscriber MUST be prepared to receive NOTIFY requests + // before the SUBSCRIBE transaction has completed. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.4 + onNotify: (requestWithSubscription) => { + this.subscription = requestWithSubscription.subscription; + if (this.subscription) { + this.subscription.autoRefresh = true; + } + resolve({ success: requestWithSubscription }); + }, + // If this Timer N expires prior to the receipt of a NOTIFY request, + // the subscriber considers the subscription failed, and cleans up + // any state associated with the subscription attempt. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.4 + onNotifyTimeout: () => { + resolve({ failure: {} }); + }, + // This SUBSCRIBE request will be confirmed with a final response. + // Non-200-class final responses indicate that no subscription or new + // dialog usage has been created, and no subsequent NOTIFY request will + // be sent. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.1 + onRedirect: (response) => { + resolve({ failure: { response } }); + }, + // This SUBSCRIBE request will be confirmed with a final response. + // Non-200-class final responses indicate that no subscription or new + // dialog usage has been created, and no subsequent NOTIFY request will + // be sent. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.1 + onReject: (response) => { + resolve({ failure: { response } }); + } + }); + }); + } +} + + +/***/ }), +/* 44 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Subscription": () => (/* binding */ Subscription) +/* harmony export */ }); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _subscription_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(45); + + +/** + * A subscription provides {@link Notification} of events. + * + * @remarks + * See {@link Subscriber} for details on establishing a subscription. + * + * @public + */ +class Subscription { + /** + * Constructor. + * @param userAgent - User agent. See {@link UserAgent} for details. + * @internal + */ + constructor(userAgent, options = {}) { + this._disposed = false; + this._state = _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Initial; + this._logger = userAgent.getLogger("sip.Subscription"); + this._stateEventEmitter = new _emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + this._userAgent = userAgent; + this.delegate = options.delegate; + } + /** + * Destructor. + */ + dispose() { + if (this._disposed) { + return Promise.resolve(); + } + this._disposed = true; + this._stateEventEmitter.removeAllListeners(); + return Promise.resolve(); + } + /** + * The subscribed subscription dialog. + */ + get dialog() { + return this._dialog; + } + /** + * True if disposed. + * @internal + */ + get disposed() { + return this._disposed; + } + /** + * Subscription state. See {@link SubscriptionState} for details. + */ + get state() { + return this._state; + } + /** + * Emits when the subscription `state` property changes. + */ + get stateChange() { + return this._stateEventEmitter; + } + /** @internal */ + stateTransition(newState) { + const invalidTransition = () => { + throw new Error(`Invalid state transition from ${this._state} to ${newState}`); + }; + // Validate transition + switch (this._state) { + case _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Initial: + if (newState !== _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.NotifyWait && newState !== _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Terminated) { + invalidTransition(); + } + break; + case _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.NotifyWait: + if (newState !== _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Subscribed && newState !== _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Terminated) { + invalidTransition(); + } + break; + case _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Subscribed: + if (newState !== _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Terminated) { + invalidTransition(); + } + break; + case _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Terminated: + invalidTransition(); + break; + default: + throw new Error("Unrecognized state."); + } + // Guard against duplicate transition + if (this._state === newState) { + return; + } + // Transition + this._state = newState; + this._logger.log(`Subscription ${this._dialog ? this._dialog.id : undefined} transitioned to ${this._state}`); + this._stateEventEmitter.emit(this._state); + // Dispose + if (newState === _subscription_state__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState.Terminated) { + this.dispose(); + } + } +} + + +/***/ }), +/* 45 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SubscriptionState": () => (/* binding */ SubscriptionState) +/* harmony export */ }); +/** + * {@link Subscription} state. + * @remarks + * The {@link Subscription} behaves in a deterministic manner according to the following + * Finite State Machine (FSM). + * ```txt + * _______________________________________ + * Subscription | v + * Constructed -> Initial -> NotifyWait -> Subscribed -> Terminated + * |____________________________^ + * ``` + * @public + */ +var SubscriptionState; +(function (SubscriptionState) { + SubscriptionState["Initial"] = "Initial"; + SubscriptionState["NotifyWait"] = "NotifyWait"; + SubscriptionState["Subscribed"] = "Subscribed"; + SubscriptionState["Terminated"] = "Terminated"; +})(SubscriptionState || (SubscriptionState = {})); + + +/***/ }), +/* 46 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SubscriptionState": () => (/* binding */ SubscriptionState) +/* harmony export */ }); +/** + * Subscription state. + * @remarks + * https://tools.ietf.org/html/rfc6665#section-4.1.2 + * @public + */ +var SubscriptionState; +(function (SubscriptionState) { + SubscriptionState["Initial"] = "Initial"; + SubscriptionState["NotifyWait"] = "NotifyWait"; + SubscriptionState["Pending"] = "Pending"; + SubscriptionState["Active"] = "Active"; + SubscriptionState["Terminated"] = "Terminated"; +})(SubscriptionState || (SubscriptionState = {})); + + +/***/ }), +/* 47 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TransportState": () => (/* binding */ TransportState) +/* harmony export */ }); +/** + * {@link Transport} state. + * + * @remarks + * The {@link Transport} behaves in a deterministic manner according to the following + * Finite State Machine (FSM). + * ```txt + * ______________________________ + * | ____________ | + * Transport v v | | + * Constructed -> Disconnected -> Connecting -> Connected -> Disconnecting + * ^ ^ |_____________________^ | | + * | |_____________________________| | + * |_____________________________________________| + * ``` + * @public + */ +var TransportState; +(function (TransportState) { + /** + * The `connect()` method was called. + */ + TransportState["Connecting"] = "Connecting"; + /** + * The `connect()` method resolved. + */ + TransportState["Connected"] = "Connected"; + /** + * The `disconnect()` method was called. + */ + TransportState["Disconnecting"] = "Disconnecting"; + /** + * The `connect()` method was rejected, or + * the `disconnect()` method completed, or + * network connectivity was lost. + */ + TransportState["Disconnected"] = "Disconnected"; +})(TransportState || (TransportState = {})); + + +/***/ }), +/* 48 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UserAgentState": () => (/* binding */ UserAgentState) +/* harmony export */ }); +/** + * {@link UserAgent} state. + * @remarks + * Valid state transitions: + * ``` + * 1. "Started" --> "Stopped" + * 2. "Stopped" --> "Started" + * ``` + * @public + */ +var UserAgentState; +(function (UserAgentState) { + UserAgentState["Started"] = "Started"; + UserAgentState["Stopped"] = "Stopped"; +})(UserAgentState || (UserAgentState = {})); + + +/***/ }), +/* 49 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UserAgent": () => (/* binding */ UserAgent) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(51); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(21); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(58); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(60); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(98); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(18); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(26); +/* harmony import */ var _core_messages_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20); +/* harmony import */ var _platform_web_session_description_handler__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(53); +/* harmony import */ var _platform_web_transport__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(57); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1); +/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _invitation__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(14); +/* harmony import */ var _inviter__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(37); +/* harmony import */ var _message__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(31); +/* harmony import */ var _notification__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(32); +/* harmony import */ var _user_agent_options__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(34); +/* harmony import */ var _user_agent_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(48); + + + + + + + + + + + + +/** + * A user agent sends and receives requests using a `Transport`. + * + * @remarks + * A user agent (UA) is associated with a user via the user's SIP address of record (AOR) + * and acts on behalf of that user to send and receive SIP requests. The user agent can + * register to receive incoming requests, as well as create and send outbound messages. + * The user agent also maintains the Transport over which its signaling travels. + * + * @public + */ +class UserAgent { + /** + * Constructs a new instance of the `UserAgent` class. + * @param options - Options bucket. See {@link UserAgentOptions} for details. + */ + constructor(options = {}) { + /** @internal */ + this._publishers = {}; + /** @internal */ + this._registerers = {}; + /** @internal */ + this._sessions = {}; + /** @internal */ + this._subscriptions = {}; + this._state = _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped; + /** Unload listener. */ + this.unloadListener = () => { + this.stop(); + }; + // state emitter + this._stateEventEmitter = new _emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + // initialize delegate + this.delegate = options.delegate; + // initialize configuration + this.options = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, UserAgent.defaultOptions()), { sipjsId: (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_2__.createRandomToken)(5) }), { uri: new _core__WEBPACK_IMPORTED_MODULE_3__.URI("sip", "anonymous." + (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_2__.createRandomToken)(6), "anonymous.invalid") }), { viaHost: (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_2__.createRandomToken)(12) + ".invalid" }), UserAgent.stripUndefinedProperties(options)); + // viaHost is hack + if (this.options.hackIpInContact) { + if (typeof this.options.hackIpInContact === "boolean" && this.options.hackIpInContact) { + const from = 1; + const to = 254; + const octet = Math.floor(Math.random() * (to - from + 1) + from); + // random Test-Net IP (http://tools.ietf.org/html/rfc5735) + this.options.viaHost = "192.0.2." + octet; + } + else if (this.options.hackIpInContact) { + this.options.viaHost = this.options.hackIpInContact; + } + } + // initialize logger & logger factory + this.loggerFactory = new _core__WEBPACK_IMPORTED_MODULE_4__.LoggerFactory(); + this.logger = this.loggerFactory.getLogger("sip.UserAgent"); + this.loggerFactory.builtinEnabled = this.options.logBuiltinEnabled; + this.loggerFactory.connector = this.options.logConnector; + switch (this.options.logLevel) { + case "error": + this.loggerFactory.level = _core__WEBPACK_IMPORTED_MODULE_5__.Levels.error; + break; + case "warn": + this.loggerFactory.level = _core__WEBPACK_IMPORTED_MODULE_5__.Levels.warn; + break; + case "log": + this.loggerFactory.level = _core__WEBPACK_IMPORTED_MODULE_5__.Levels.log; + break; + case "debug": + this.loggerFactory.level = _core__WEBPACK_IMPORTED_MODULE_5__.Levels.debug; + break; + default: + break; + } + if (this.options.logConfiguration) { + this.logger.log("Configuration:"); + Object.keys(this.options).forEach((key) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const value = this.options[key]; + switch (key) { + case "uri": + case "sessionDescriptionHandlerFactory": + this.logger.log("· " + key + ": " + value); + break; + case "authorizationPassword": + this.logger.log("· " + key + ": " + "NOT SHOWN"); + break; + case "transportConstructor": + this.logger.log("· " + key + ": " + value.name); + break; + default: + this.logger.log("· " + key + ": " + JSON.stringify(value)); + } + }); + } + // guard deprecated transport options (remove this in version 16.x) + if (this.options.transportOptions) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const optionsDeprecated = this.options.transportOptions; + const maxReconnectionAttemptsDeprecated = optionsDeprecated.maxReconnectionAttempts; + const reconnectionTimeoutDeprecated = optionsDeprecated.reconnectionTimeout; + if (maxReconnectionAttemptsDeprecated !== undefined) { + const deprecatedMessage = `The transport option "maxReconnectionAttempts" as has apparently been specified and has been deprecated. ` + + "It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly."; + this.logger.warn(deprecatedMessage); + } + if (reconnectionTimeoutDeprecated !== undefined) { + const deprecatedMessage = `The transport option "reconnectionTimeout" as has apparently been specified and has been deprecated. ` + + "It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly."; + this.logger.warn(deprecatedMessage); + } + // hack + if (options.reconnectionDelay === undefined && reconnectionTimeoutDeprecated !== undefined) { + this.options.reconnectionDelay = reconnectionTimeoutDeprecated; + } + if (options.reconnectionAttempts === undefined && maxReconnectionAttemptsDeprecated !== undefined) { + this.options.reconnectionAttempts = maxReconnectionAttemptsDeprecated; + } + } + // guard deprecated user agent options (remove this in version 16.x) + if (options.reconnectionDelay !== undefined) { + const deprecatedMessage = `The user agent option "reconnectionDelay" as has apparently been specified and has been deprecated. ` + + "It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly."; + this.logger.warn(deprecatedMessage); + } + if (options.reconnectionAttempts !== undefined) { + const deprecatedMessage = `The user agent option "reconnectionAttempts" as has apparently been specified and has been deprecated. ` + + "It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly."; + this.logger.warn(deprecatedMessage); + } + // Initialize Transport + this._transport = new this.options.transportConstructor(this.getLogger("sip.Transport"), this.options.transportOptions); + this.initTransportCallbacks(); + // Initialize Contact + this._contact = this.initContact(); + // Initialize UserAgentCore + this._userAgentCore = this.initCore(); + if (this.options.autoStart) { + this.start(); + } + } + /** + * Create a URI instance from a string. + * @param uri - The string to parse. + * + * @example + * ```ts + * const uri = UserAgent.makeURI("sip:edgar@example.com"); + * ``` + */ + static makeURI(uri) { + return _core__WEBPACK_IMPORTED_MODULE_6__.Grammar.URIParse(uri); + } + /** Default user agent options. */ + static defaultOptions() { + return { + allowLegacyNotifications: false, + authorizationHa1: "", + authorizationPassword: "", + authorizationUsername: "", + autoStart: false, + autoStop: true, + delegate: {}, + contactName: "", + contactParams: { transport: "ws" }, + displayName: "", + forceRport: false, + hackAllowUnregisteredOptionTags: false, + hackIpInContact: false, + hackViaTcp: false, + logBuiltinEnabled: true, + logConfiguration: true, + logConnector: () => { + /* noop */ + }, + logLevel: "log", + noAnswerTimeout: 60, + preloadedRouteSet: [], + reconnectionAttempts: 0, + reconnectionDelay: 4, + sendInitialProvisionalResponse: true, + sessionDescriptionHandlerFactory: (0,_platform_web_session_description_handler__WEBPACK_IMPORTED_MODULE_7__.defaultSessionDescriptionHandlerFactory)(), + sessionDescriptionHandlerFactoryOptions: {}, + sipExtension100rel: _user_agent_options__WEBPACK_IMPORTED_MODULE_8__.SIPExtension.Unsupported, + sipExtensionReplaces: _user_agent_options__WEBPACK_IMPORTED_MODULE_8__.SIPExtension.Unsupported, + sipExtensionExtraSupported: [], + sipjsId: "", + transportConstructor: _platform_web_transport__WEBPACK_IMPORTED_MODULE_9__.Transport, + transportOptions: {}, + uri: new _core__WEBPACK_IMPORTED_MODULE_3__.URI("sip", "anonymous", "anonymous.invalid"), + userAgentString: "SIP.js/" + _version__WEBPACK_IMPORTED_MODULE_10__.LIBRARY_VERSION, + viaHost: "" + }; + } + /** + * Strip properties with undefined values from options. + * This is a work around while waiting for missing vs undefined to be addressed (or not)... + * https://github.com/Microsoft/TypeScript/issues/13195 + * @param options - Options to reduce + */ + static stripUndefinedProperties(options) { + return Object.keys(options).reduce((object, key) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if (options[key] !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + object[key] = options[key]; + } + return object; + }, {}); + } + /** + * User agent configuration. + */ + get configuration() { + return this.options; + } + /** + * User agent contact. + */ + get contact() { + return this._contact; + } + /** + * User agent state. + */ + get state() { + return this._state; + } + /** + * User agent state change emitter. + */ + get stateChange() { + return this._stateEventEmitter; + } + /** + * User agent transport. + */ + get transport() { + return this._transport; + } + /** + * User agent core. + */ + get userAgentCore() { + return this._userAgentCore; + } + /** + * The logger. + */ + getLogger(category, label) { + return this.loggerFactory.getLogger(category, label); + } + /** + * The logger factory. + */ + getLoggerFactory() { + return this.loggerFactory; + } + /** + * True if transport is connected. + */ + isConnected() { + return this.transport.isConnected(); + } + /** + * Reconnect the transport. + */ + reconnect() { + if (this.state === _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped) { + return Promise.reject(new Error("User agent stopped.")); + } + // Make sure we don't call synchronously + return Promise.resolve().then(() => this.transport.connect()); + } + /** + * Start the user agent. + * + * @remarks + * Resolves if transport connects, otherwise rejects. + * + * @example + * ```ts + * userAgent.start() + * .then(() => { + * // userAgent.isConnected() === true + * }) + * .catch((error: Error) => { + * // userAgent.isConnected() === false + * }); + * ``` + */ + start() { + if (this.state === _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Started) { + this.logger.warn(`User agent already started`); + return Promise.resolve(); + } + this.logger.log(`Starting ${this.configuration.uri}`); + // Transition state + this.transitionState(_user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Started); + // TODO: Review this as it is not clear it has any benefit and at worst causes additional load the server. + // On unload it may be best to simply in most scenarios to do nothing. Furthermore and regardless, this + // kind of behavior seems more appropriate to be managed by the consumer of the API than the API itself. + // Should this perhaps be deprecated? + // + // Add window unload event listener + if (this.options.autoStop) { + // Google Chrome Packaged Apps don't allow 'unload' listeners: unload is not available in packaged apps + const googleChromePackagedApp = typeof chrome !== "undefined" && chrome.app && chrome.app.runtime ? true : false; + if (typeof window !== "undefined" && typeof window.addEventListener === "function" && !googleChromePackagedApp) { + window.addEventListener("unload", this.unloadListener); + } + } + return this.transport.connect(); + } + /** + * Stop the user agent. + * + * @remarks + * Resolves when the user agent has completed a graceful shutdown. + * ```txt + * 1) Sessions terminate. + * 2) Registerers unregister. + * 3) Subscribers unsubscribe. + * 4) Publishers unpublish. + * 5) Transport disconnects. + * 6) User Agent Core resets. + * ``` + * NOTE: While this is a "graceful shutdown", it can also be very slow one if you + * are waiting for the returned Promise to resolve. The disposal of the clients and + * dialogs is done serially - waiting on one to finish before moving on to the next. + * This can be slow if there are lot of subscriptions to unsubscribe for example. + * + * THE SLOW PACE IS INTENTIONAL! + * While one could spin them all down in parallel, this could slam the remote server. + * It is bad practice to denial of service attack (DoS attack) servers!!! + * Moreover, production servers will automatically blacklist clients which send too + * many requests in too short a period of time - dropping any additional requests. + * + * If a different approach to disposing is needed, one can implement whatever is + * needed and execute that prior to calling `stop()`. Alternatively one may simply + * not wait for the Promise returned by `stop()` to complete. + */ + async stop() { + if (this.state === _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped) { + this.logger.warn(`User agent already stopped`); + return Promise.resolve(); + } + this.logger.log(`Stopping ${this.configuration.uri}`); + // Transition state + this.transitionState(_user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped); + // TODO: See comments with associated complimentary code in start(). Should this perhaps be deprecated? + // Remove window unload event listener + if (this.options.autoStop) { + // Google Chrome Packaged Apps don't allow 'unload' listeners: unload is not available in packaged apps + const googleChromePackagedApp = typeof chrome !== "undefined" && chrome.app && chrome.app.runtime ? true : false; + if (typeof window !== "undefined" && window.removeEventListener && !googleChromePackagedApp) { + window.removeEventListener("unload", this.unloadListener); + } + } + // Be careful here to use a local references as start() can be called + // again before we complete and we don't want to touch new clients + // and we don't want to step on the new instances (or vice versa). + const publishers = Object.assign({}, this._publishers); + const registerers = Object.assign({}, this._registerers); + const sessions = Object.assign({}, this._sessions); + const subscriptions = Object.assign({}, this._subscriptions); + const transport = this.transport; + const userAgentCore = this.userAgentCore; + // + // At this point we have completed the state transition and everything + // following will effectively run async and MUST NOT cause any issues + // if UserAgent.start() is called while the following code continues. + // + // TODO: Minor optimization. + // The disposal in all cases involves, in part, sending messages which + // is not worth doing if the transport is not connected as we know attempting + // to send messages will be futile. But none of these disposal methods check + // if that's is the case and it would be easy for them to do so at this point. + // Dispose of Registerers + this.logger.log(`Dispose of registerers`); + for (const id in registerers) { + if (registerers[id]) { + await registerers[id].dispose().catch((error) => { + this.logger.error(error.message); + delete this._registerers[id]; + throw error; + }); + } + } + // Dispose of Sessions + this.logger.log(`Dispose of sessions`); + for (const id in sessions) { + if (sessions[id]) { + await sessions[id].dispose().catch((error) => { + this.logger.error(error.message); + delete this._sessions[id]; + throw error; + }); + } + } + // Dispose of Subscriptions + this.logger.log(`Dispose of subscriptions`); + for (const id in subscriptions) { + if (subscriptions[id]) { + await subscriptions[id].dispose().catch((error) => { + this.logger.error(error.message); + delete this._subscriptions[id]; + throw error; + }); + } + } + // Dispose of Publishers + this.logger.log(`Dispose of publishers`); + for (const id in publishers) { + if (publishers[id]) { + await publishers[id].dispose().catch((error) => { + this.logger.error(error.message); + delete this._publishers[id]; + throw error; + }); + } + } + // Dispose of the transport (disconnecting) + this.logger.log(`Dispose of transport`); + await transport.dispose().catch((error) => { + this.logger.error(error.message); + throw error; + }); + // Dispose of the user agent core (resetting) + this.logger.log(`Dispose of core`); + userAgentCore.dispose(); + } + /** + * Used to avoid circular references. + * @internal + */ + _makeInviter(targetURI, options) { + return new _inviter__WEBPACK_IMPORTED_MODULE_11__.Inviter(this, targetURI, options); + } + /** + * Attempt reconnection up to `maxReconnectionAttempts` times. + * @param reconnectionAttempt - Current attempt number. + */ + attemptReconnection(reconnectionAttempt = 1) { + const reconnectionAttempts = this.options.reconnectionAttempts; + const reconnectionDelay = this.options.reconnectionDelay; + if (reconnectionAttempt > reconnectionAttempts) { + this.logger.log(`Maximum reconnection attempts reached`); + return; + } + this.logger.log(`Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - trying`); + setTimeout(() => { + this.reconnect() + .then(() => { + this.logger.log(`Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - succeeded`); + }) + .catch((error) => { + this.logger.error(error.message); + this.logger.log(`Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - failed`); + this.attemptReconnection(++reconnectionAttempt); + }); + }, reconnectionAttempt === 1 ? 0 : reconnectionDelay * 1000); + } + /** + * Initialize contact. + */ + initContact() { + const contactName = this.options.contactName !== "" ? this.options.contactName : (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_2__.createRandomToken)(8); + const contactParams = this.options.contactParams; + const contact = { + pubGruu: undefined, + tempGruu: undefined, + uri: new _core__WEBPACK_IMPORTED_MODULE_3__.URI("sip", contactName, this.options.viaHost, undefined, contactParams), + toString: (contactToStringOptions = {}) => { + const anonymous = contactToStringOptions.anonymous || false; + const outbound = contactToStringOptions.outbound || false; + let contactString = "<"; + if (anonymous) { + contactString += + this.contact.tempGruu || + `sip:anonymous@anonymous.invalid;transport=${contactParams.transport ? contactParams.transport : "ws"}`; + } + else { + contactString += this.contact.pubGruu || this.contact.uri; + } + if (outbound) { + contactString += ";ob"; + } + contactString += ">"; + return contactString; + } + }; + return contact; + } + /** + * Initialize user agent core. + */ + initCore() { + // supported options + let supportedOptionTags = []; + supportedOptionTags.push("outbound"); // TODO: is this really supported? + if (this.options.sipExtension100rel === _user_agent_options__WEBPACK_IMPORTED_MODULE_8__.SIPExtension.Supported) { + supportedOptionTags.push("100rel"); + } + if (this.options.sipExtensionReplaces === _user_agent_options__WEBPACK_IMPORTED_MODULE_8__.SIPExtension.Supported) { + supportedOptionTags.push("replaces"); + } + if (this.options.sipExtensionExtraSupported) { + supportedOptionTags.push(...this.options.sipExtensionExtraSupported); + } + if (!this.options.hackAllowUnregisteredOptionTags) { + supportedOptionTags = supportedOptionTags.filter((optionTag) => _user_agent_options__WEBPACK_IMPORTED_MODULE_8__.UserAgentRegisteredOptionTags[optionTag]); + } + supportedOptionTags = Array.from(new Set(supportedOptionTags)); // array of unique values + // FIXME: TODO: This was ported, but this is and was just plain broken. + const supportedOptionTagsResponse = supportedOptionTags.slice(); + if (this.contact.pubGruu || this.contact.tempGruu) { + supportedOptionTagsResponse.push("gruu"); + } + // core configuration + const userAgentCoreConfiguration = { + aor: this.options.uri, + contact: this.contact, + displayName: this.options.displayName, + loggerFactory: this.loggerFactory, + hackViaTcp: this.options.hackViaTcp, + routeSet: this.options.preloadedRouteSet, + supportedOptionTags, + supportedOptionTagsResponse, + sipjsId: this.options.sipjsId, + userAgentHeaderFieldValue: this.options.userAgentString, + viaForceRport: this.options.forceRport, + viaHost: this.options.viaHost, + authenticationFactory: () => { + const username = this.options.authorizationUsername + ? this.options.authorizationUsername + : this.options.uri.user; // if authorization username not provided, use uri user as username + const password = this.options.authorizationPassword ? this.options.authorizationPassword : undefined; + const ha1 = this.options.authorizationHa1 ? this.options.authorizationHa1 : undefined; + return new _core__WEBPACK_IMPORTED_MODULE_12__.DigestAuthentication(this.getLoggerFactory(), ha1, username, password); + }, + transportAccessor: () => this.transport + }; + const userAgentCoreDelegate = { + onInvite: (incomingInviteRequest) => { + var _a; + const invitation = new _invitation__WEBPACK_IMPORTED_MODULE_13__.Invitation(this, incomingInviteRequest); + incomingInviteRequest.delegate = { + onCancel: (cancel) => { + invitation._onCancel(cancel); + }, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + onTransportError: (error) => { + // A server transaction MUST NOT discard transaction state based only on + // encountering a non-recoverable transport error when sending a + // response. Instead, the associated INVITE server transaction state + // machine MUST remain in its current state. (Timers will eventually + // cause it to transition to the "Terminated" state). + // https://tools.ietf.org/html/rfc6026#section-7.1 + // As noted in the comment above, we are to leaving it to the transaction + // timers to eventually cause the transaction to sort itself out in the case + // of a transport failure in an invite server transaction. This delegate method + // is here simply here for completeness and to make it clear that it provides + // nothing more than informational hook into the core. That is, if you think + // you should be trying to deal with a transport error here, you are likely wrong. + this.logger.error("A transport error has occurred while handling an incoming INVITE request."); + } + }; + // FIXME: Ported - 100 Trying send should be configurable. + // Only required if TU will not respond in 200ms. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + incomingInviteRequest.trying(); + // The Replaces header contains information used to match an existing + // SIP dialog (call-id, to-tag, and from-tag). Upon receiving an INVITE + // with a Replaces header, the User Agent (UA) attempts to match this + // information with a confirmed or early dialog. + // https://tools.ietf.org/html/rfc3891#section-3 + if (this.options.sipExtensionReplaces !== _user_agent_options__WEBPACK_IMPORTED_MODULE_8__.SIPExtension.Unsupported) { + const message = incomingInviteRequest.message; + const replaces = message.parseHeader("replaces"); + if (replaces) { + const callId = replaces.call_id; + if (typeof callId !== "string") { + throw new Error("Type of call id is not string"); + } + const toTag = replaces.replaces_to_tag; + if (typeof toTag !== "string") { + throw new Error("Type of to tag is not string"); + } + const fromTag = replaces.replaces_from_tag; + if (typeof fromTag !== "string") { + throw new Error("type of from tag is not string"); + } + const targetDialogId = callId + toTag + fromTag; + const targetDialog = this.userAgentCore.dialogs.get(targetDialogId); + // If no match is found, the UAS rejects the INVITE and returns a 481 + // Call/Transaction Does Not Exist response. Likewise, if the Replaces + // header field matches a dialog which was not created with an INVITE, + // the UAS MUST reject the request with a 481 response. + // https://tools.ietf.org/html/rfc3891#section-3 + if (!targetDialog) { + invitation.reject({ statusCode: 481 }); + return; + } + // If the Replaces header field matches a confirmed dialog, it checks + // for the presence of the "early-only" flag in the Replaces header + // field. (This flag allows the UAC to prevent a potentially + // undesirable race condition described in Section 7.1.) If the flag is + // present, the UA rejects the request with a 486 Busy response. + // https://tools.ietf.org/html/rfc3891#section-3 + if (!targetDialog.early && replaces.early_only === true) { + invitation.reject({ statusCode: 486 }); + return; + } + // Provide a handle on the session being replaced. + const targetSession = this._sessions[callId + fromTag] || this._sessions[callId + toTag] || undefined; + if (!targetSession) { + throw new Error("Session does not exist."); + } + invitation._replacee = targetSession; + } + } + // Delegate invitation handling. + if ((_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onInvite) { + if (invitation.autoSendAnInitialProvisionalResponse) { + invitation.progress().then(() => { + var _a; + if (((_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onInvite) === undefined) { + throw new Error("onInvite undefined."); + } + this.delegate.onInvite(invitation); + }); + return; + } + this.delegate.onInvite(invitation); + return; + } + // A common scenario occurs when the callee is currently not willing or + // able to take additional calls at this end system. A 486 (Busy Here) + // SHOULD be returned in such a scenario. + // https://tools.ietf.org/html/rfc3261#section-13.3.1.3 + invitation.reject({ statusCode: 486 }); + }, + onMessage: (incomingMessageRequest) => { + if (this.delegate && this.delegate.onMessage) { + const message = new _message__WEBPACK_IMPORTED_MODULE_14__.Message(incomingMessageRequest); + this.delegate.onMessage(message); + } + else { + // Accept the MESSAGE request, but do nothing with it. + incomingMessageRequest.accept(); + } + }, + onNotify: (incomingNotifyRequest) => { + // NOTIFY requests are sent to inform subscribers of changes in state to + // which the subscriber has a subscription. Subscriptions are created + // using the SUBSCRIBE method. In legacy implementations, it is + // possible that other means of subscription creation have been used. + // However, this specification does not allow the creation of + // subscriptions except through SUBSCRIBE requests and (for backwards- + // compatibility) REFER requests [RFC3515]. + // https://tools.ietf.org/html/rfc6665#section-3.2 + if (this.delegate && this.delegate.onNotify) { + const notification = new _notification__WEBPACK_IMPORTED_MODULE_15__.Notification(incomingNotifyRequest); + this.delegate.onNotify(notification); + } + else { + // Per the above which obsoletes https://tools.ietf.org/html/rfc3265, + // the use of out of dialog NOTIFY is obsolete, but... + if (this.options.allowLegacyNotifications) { + incomingNotifyRequest.accept(); // Accept the NOTIFY request, but do nothing with it. + } + else { + incomingNotifyRequest.reject({ statusCode: 481 }); + } + } + }, + onRefer: (incomingReferRequest) => { + this.logger.warn("Received an out of dialog REFER request"); + // TOOD: this.delegate.onRefer(...) + if (this.delegate && this.delegate.onReferRequest) { + this.delegate.onReferRequest(incomingReferRequest); + } + else { + incomingReferRequest.reject({ statusCode: 405 }); + } + }, + onRegister: (incomingRegisterRequest) => { + this.logger.warn("Received an out of dialog REGISTER request"); + // TOOD: this.delegate.onRegister(...) + if (this.delegate && this.delegate.onRegisterRequest) { + this.delegate.onRegisterRequest(incomingRegisterRequest); + } + else { + incomingRegisterRequest.reject({ statusCode: 405 }); + } + }, + onSubscribe: (incomingSubscribeRequest) => { + this.logger.warn("Received an out of dialog SUBSCRIBE request"); + // TOOD: this.delegate.onSubscribe(...) + if (this.delegate && this.delegate.onSubscribeRequest) { + this.delegate.onSubscribeRequest(incomingSubscribeRequest); + } + else { + incomingSubscribeRequest.reject({ statusCode: 405 }); + } + } + }; + return new _core__WEBPACK_IMPORTED_MODULE_16__.UserAgentCore(userAgentCoreConfiguration, userAgentCoreDelegate); + } + initTransportCallbacks() { + this.transport.onConnect = () => this.onTransportConnect(); + this.transport.onDisconnect = (error) => this.onTransportDisconnect(error); + this.transport.onMessage = (message) => this.onTransportMessage(message); + } + onTransportConnect() { + if (this.state === _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped) { + return; + } + if (this.delegate && this.delegate.onConnect) { + this.delegate.onConnect(); + } + } + onTransportDisconnect(error) { + if (this.state === _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped) { + return; + } + if (this.delegate && this.delegate.onDisconnect) { + this.delegate.onDisconnect(error); + } + // Only attempt to reconnect if network/server dropped the connection. + if (error && this.options.reconnectionAttempts > 0) { + this.attemptReconnection(); + } + } + onTransportMessage(messageString) { + const message = _core__WEBPACK_IMPORTED_MODULE_17__.Parser.parseMessage(messageString, this.getLogger("sip.Parser")); + if (!message) { + this.logger.warn("Failed to parse incoming message. Dropping."); + return; + } + if (this.state === _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped && message instanceof _core__WEBPACK_IMPORTED_MODULE_18__.IncomingRequestMessage) { + this.logger.warn(`Received ${message.method} request while stopped. Dropping.`); + return; + } + // A valid SIP request formulated by a UAC MUST, at a minimum, contain + // the following header fields: To, From, CSeq, Call-ID, Max-Forwards, + // and Via; all of these header fields are mandatory in all SIP + // requests. + // https://tools.ietf.org/html/rfc3261#section-8.1.1 + const hasMinimumHeaders = () => { + const mandatoryHeaders = ["from", "to", "call_id", "cseq", "via"]; + for (const header of mandatoryHeaders) { + if (!message.hasHeader(header)) { + this.logger.warn(`Missing mandatory header field : ${header}.`); + return false; + } + } + return true; + }; + // Request Checks + if (message instanceof _core__WEBPACK_IMPORTED_MODULE_18__.IncomingRequestMessage) { + // This is port of SanityCheck.minimumHeaders(). + if (!hasMinimumHeaders()) { + this.logger.warn(`Request missing mandatory header field. Dropping.`); + return; + } + // FIXME: This is non-standard and should be a configurable behavior (desirable regardless). + // Custom SIP.js check to reject request from ourself (this instance of SIP.js). + // This is port of SanityCheck.rfc3261_16_3_4(). + if (!message.toTag && message.callId.substr(0, 5) === this.options.sipjsId) { + this.userAgentCore.replyStateless(message, { statusCode: 482 }); + return; + } + // FIXME: This should be Transport check before we get here (Section 18). + // Custom SIP.js check to reject requests if body length wrong. + // This is port of SanityCheck.rfc3261_18_3_request(). + const len = (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_2__.utf8Length)(message.body); + const contentLength = message.getHeader("content-length"); + if (contentLength && len < Number(contentLength)) { + this.userAgentCore.replyStateless(message, { statusCode: 400 }); + return; + } + } + // Response Checks + if (message instanceof _core__WEBPACK_IMPORTED_MODULE_19__.IncomingResponseMessage) { + // This is port of SanityCheck.minimumHeaders(). + if (!hasMinimumHeaders()) { + this.logger.warn(`Response missing mandatory header field. Dropping.`); + return; + } + // Custom SIP.js check to drop responses if multiple Via headers. + // This is port of SanityCheck.rfc3261_8_1_3_3(). + if (message.getHeaders("via").length > 1) { + this.logger.warn("More than one Via header field present in the response. Dropping."); + return; + } + // FIXME: This should be Transport check before we get here (Section 18). + // Custom SIP.js check to drop responses if bad Via header. + // This is port of SanityCheck.rfc3261_18_1_2(). + if (message.via.host !== this.options.viaHost || message.via.port !== undefined) { + this.logger.warn("Via sent-by in the response does not match UA Via host value. Dropping."); + return; + } + // FIXME: This should be Transport check before we get here (Section 18). + // Custom SIP.js check to reject requests if body length wrong. + // This is port of SanityCheck.rfc3261_18_3_response(). + const len = (0,_core_messages_utils__WEBPACK_IMPORTED_MODULE_2__.utf8Length)(message.body); + const contentLength = message.getHeader("content-length"); + if (contentLength && len < Number(contentLength)) { + this.logger.warn("Message body length is lower than the value in Content-Length header field. Dropping."); + return; + } + } + // Handle Request + if (message instanceof _core__WEBPACK_IMPORTED_MODULE_18__.IncomingRequestMessage) { + this.userAgentCore.receiveIncomingRequestFromTransport(message); + return; + } + // Handle Response + if (message instanceof _core__WEBPACK_IMPORTED_MODULE_19__.IncomingResponseMessage) { + this.userAgentCore.receiveIncomingResponseFromTransport(message); + return; + } + throw new Error("Invalid message type."); + } + /** + * Transition state. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + transitionState(newState, error) { + const invalidTransition = () => { + throw new Error(`Invalid state transition from ${this._state} to ${newState}`); + }; + // Validate state transition + switch (this._state) { + case _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Started: + if (newState !== _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped) { + invalidTransition(); + } + break; + case _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Stopped: + if (newState !== _user_agent_state__WEBPACK_IMPORTED_MODULE_0__.UserAgentState.Started) { + invalidTransition(); + } + break; + default: + throw new Error("Unknown state."); + } + // Update state + this.logger.log(`Transitioned from ${this._state} to ${newState}`); + this._state = newState; + this._stateEventEmitter.emit(this._state); + } +} + + +/***/ }), +/* 50 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "LoggerFactory": () => (/* binding */ LoggerFactory) +/* harmony export */ }); +/* harmony import */ var _levels__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51); +/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(52); + + +/** + * Logger. + * @public + */ +class LoggerFactory { + constructor() { + this.builtinEnabled = true; + this._level = _levels__WEBPACK_IMPORTED_MODULE_0__.Levels.log; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.loggers = {}; + this.logger = this.getLogger("sip:loggerfactory"); + } + get level() { + return this._level; + } + set level(newLevel) { + if (newLevel >= 0 && newLevel <= 3) { + this._level = newLevel; + } + else if (newLevel > 3) { + this._level = 3; + // eslint-disable-next-line no-prototype-builtins + } + else if (_levels__WEBPACK_IMPORTED_MODULE_0__.Levels.hasOwnProperty(newLevel)) { + this._level = newLevel; + } + else { + this.logger.error("invalid 'level' parameter value: " + JSON.stringify(newLevel)); + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + get connector() { + return this._connector; + } + set connector(value) { + if (!value) { + this._connector = undefined; + } + else if (typeof value === "function") { + this._connector = value; + } + else { + this.logger.error("invalid 'connector' parameter value: " + JSON.stringify(value)); + } + } + getLogger(category, label) { + if (label && this.level === 3) { + return new _logger__WEBPACK_IMPORTED_MODULE_1__.Logger(this, category, label); + } + else if (this.loggers[category]) { + return this.loggers[category]; + } + else { + const logger = new _logger__WEBPACK_IMPORTED_MODULE_1__.Logger(this, category); + this.loggers[category] = logger; + return logger; + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + genericLog(levelToLog, category, label, content) { + if (this.level >= levelToLog) { + if (this.builtinEnabled) { + this.print(levelToLog, category, label, content); + } + } + if (this.connector) { + this.connector(_levels__WEBPACK_IMPORTED_MODULE_0__.Levels[levelToLog], category, label, content); + } + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + print(levelToLog, category, label, content) { + if (typeof content === "string") { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const prefix = [new Date(), category]; + if (label) { + prefix.push(label); + } + content = prefix.concat(content).join(" | "); + } + switch (levelToLog) { + case _levels__WEBPACK_IMPORTED_MODULE_0__.Levels.error: + // eslint-disable-next-line no-console + console.error(content); + break; + case _levels__WEBPACK_IMPORTED_MODULE_0__.Levels.warn: + // eslint-disable-next-line no-console + console.warn(content); + break; + case _levels__WEBPACK_IMPORTED_MODULE_0__.Levels.log: + // eslint-disable-next-line no-console + console.log(content); + break; + case _levels__WEBPACK_IMPORTED_MODULE_0__.Levels.debug: + // eslint-disable-next-line no-console + console.debug(content); + break; + default: + break; + } + } +} + + +/***/ }), +/* 51 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Levels": () => (/* binding */ Levels) +/* harmony export */ }); +/** + * Log levels. + * @public + */ +var Levels; +(function (Levels) { + Levels[Levels["error"] = 0] = "error"; + Levels[Levels["warn"] = 1] = "warn"; + Levels[Levels["log"] = 2] = "log"; + Levels[Levels["debug"] = 3] = "debug"; +})(Levels || (Levels = {})); + + +/***/ }), +/* 52 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Logger": () => (/* binding */ Logger) +/* harmony export */ }); +/* harmony import */ var _levels__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51); + +/** + * Logger. + * @public + */ +class Logger { + constructor(logger, category, label) { + this.logger = logger; + this.category = category; + this.label = label; + } + error(content) { + this.genericLog(_levels__WEBPACK_IMPORTED_MODULE_0__.Levels.error, content); + } + warn(content) { + this.genericLog(_levels__WEBPACK_IMPORTED_MODULE_0__.Levels.warn, content); + } + log(content) { + this.genericLog(_levels__WEBPACK_IMPORTED_MODULE_0__.Levels.log, content); + } + debug(content) { + this.genericLog(_levels__WEBPACK_IMPORTED_MODULE_0__.Levels.debug, content); + } + genericLog(level, content) { + this.logger.genericLog(level, this.category, this.label, content); + } + get level() { + return this.logger.level; + } + set level(newLevel) { + this.logger.level = newLevel; + } +} + + +/***/ }), +/* 53 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "defaultSessionDescriptionHandlerFactory": () => (/* binding */ defaultSessionDescriptionHandlerFactory) +/* harmony export */ }); +/* harmony import */ var _media_stream_factory_default__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54); +/* harmony import */ var _peer_connection_configuration_default__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55); +/* harmony import */ var _session_description_handler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56); + + + +/** + * Function which returns a SessionDescriptionHandlerFactory. + * @remarks + * See {@link defaultPeerConnectionConfiguration} for the default peer connection configuration. + * The ICE gathering timeout defaults to 5000ms. + * @param mediaStreamFactory - MediaStream factory. + * @public + */ +function defaultSessionDescriptionHandlerFactory(mediaStreamFactory) { + return (session, options) => { + // provide a default media stream factory if need be + if (mediaStreamFactory === undefined) { + mediaStreamFactory = (0,_media_stream_factory_default__WEBPACK_IMPORTED_MODULE_0__.defaultMediaStreamFactory)(); + } + // make sure we allow `0` to be passed in so timeout can be disabled + const iceGatheringTimeout = (options === null || options === void 0 ? void 0 : options.iceGatheringTimeout) !== undefined ? options === null || options === void 0 ? void 0 : options.iceGatheringTimeout : 5000; + // merge passed factory options into default session description configuration + const sessionDescriptionHandlerConfiguration = { + iceGatheringTimeout, + peerConnectionConfiguration: Object.assign(Object.assign({}, (0,_peer_connection_configuration_default__WEBPACK_IMPORTED_MODULE_1__.defaultPeerConnectionConfiguration)()), options === null || options === void 0 ? void 0 : options.peerConnectionConfiguration) + }; + const logger = session.userAgent.getLogger("sip.SessionDescriptionHandler"); + return new _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandler(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration); + }; +} + + +/***/ }), +/* 54 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "defaultMediaStreamFactory": () => (/* binding */ defaultMediaStreamFactory) +/* harmony export */ }); +/** + * Function which returns a MediaStreamFactory. + * @public + */ +function defaultMediaStreamFactory() { + return (constraints) => { + // if no audio or video, return a media stream without tracks + if (!constraints.audio && !constraints.video) { + return Promise.resolve(new MediaStream()); + } + // getUserMedia() is a powerful feature which can only be used in secure contexts; in insecure contexts, + // navigator.mediaDevices is undefined, preventing access to getUserMedia(). A secure context is, in short, + // a page loaded using HTTPS or the file:/// URL scheme, or a page loaded from localhost. + // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Privacy_and_security + if (navigator.mediaDevices === undefined) { + return Promise.reject(new Error("Media devices not available in insecure contexts.")); + } + return navigator.mediaDevices.getUserMedia.call(navigator.mediaDevices, constraints); + }; +} + + +/***/ }), +/* 55 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "defaultPeerConnectionConfiguration": () => (/* binding */ defaultPeerConnectionConfiguration) +/* harmony export */ }); +/** + * Function which returns an RTCConfiguration. + * @public + */ +function defaultPeerConnectionConfiguration() { + const configuration = { + bundlePolicy: "balanced", + certificates: undefined, + iceCandidatePoolSize: 0, + iceServers: [{ urls: "stun:stun.l.google.com:19302" }], + iceTransportPolicy: "all", + peerIdentity: undefined, + rtcpMuxPolicy: "require" + }; + return configuration; +} + + +/***/ }), +/* 56 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionDescriptionHandler": () => (/* binding */ SessionDescriptionHandler) +/* harmony export */ }); +/** + * A base class implementing a WebRTC session description handler for sip.js. + * @remarks + * It is expected/intended to be extended by specific WebRTC based applications. + * @privateRemarks + * So do not put application specific implementation in here. + * @public + */ +class SessionDescriptionHandler { + /** + * Constructor + * @param logger - A logger + * @param mediaStreamFactory - A factory to provide a MediaStream + * @param options - Options passed from the SessionDescriptionHandleFactory + */ + constructor(logger, mediaStreamFactory, sessionDescriptionHandlerConfiguration) { + logger.debug("SessionDescriptionHandler.constructor"); + this.logger = logger; + this.mediaStreamFactory = mediaStreamFactory; + this.sessionDescriptionHandlerConfiguration = sessionDescriptionHandlerConfiguration; + this._localMediaStream = new MediaStream(); + this._remoteMediaStream = new MediaStream(); + this._peerConnection = new RTCPeerConnection(sessionDescriptionHandlerConfiguration === null || sessionDescriptionHandlerConfiguration === void 0 ? void 0 : sessionDescriptionHandlerConfiguration.peerConnectionConfiguration); + this.initPeerConnectionEventHandlers(); + } + /** + * The local media stream currently being sent. + * + * @remarks + * The local media stream initially has no tracks, so the presence of tracks + * should not be assumed. Furthermore, tracks may be added or removed if the + * local media changes - for example, on upgrade from audio only to a video session. + * At any given time there will be at most one audio track and one video track + * (it's possible that this restriction may not apply to sub-classes). + * Use `MediaStream.onaddtrack` or add a listener for the `addtrack` event + * to detect when a new track becomes available: + * https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/onaddtrack + */ + get localMediaStream() { + return this._localMediaStream; + } + /** + * The remote media stream currently being received. + * + * @remarks + * The remote media stream initially has no tracks, so the presence of tracks + * should not be assumed. Furthermore, tracks may be added or removed if the + * remote media changes - for example, on upgrade from audio only to a video session. + * At any given time there will be at most one audio track and one video track + * (it's possible that this restriction may not apply to sub-classes). + * Use `MediaStream.onaddtrack` or add a listener for the `addtrack` event + * to detect when a new track becomes available: + * https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/onaddtrack + */ + get remoteMediaStream() { + return this._remoteMediaStream; + } + /** + * The data channel. Undefined before it is created. + */ + get dataChannel() { + return this._dataChannel; + } + /** + * The peer connection. Undefined if peer connection has closed. + * + * @remarks + * While access to the underlying `RTCPeerConnection` is provided, note that + * using methods with modify it may break the operation of this class. + * In particular, this class depends on exclusive access to the + * event handler properties. If you need access to the peer connection + * events, either register for events using `addEventListener()` on + * the `RTCPeerConnection` or set the `peerConnectionDelegate` on + * this `SessionDescriptionHandler`. + */ + get peerConnection() { + return this._peerConnection; + } + /** + * A delegate which provides access to the peer connection event handlers. + * + * @remarks + * Setting the peer connection event handlers directly is not supported + * and may break this class. As this class depends on exclusive access + * to them, a delegate may be set which provides alternative access to + * the event handlers in a fashion which is supported. + */ + get peerConnectionDelegate() { + return this._peerConnectionDelegate; + } + set peerConnectionDelegate(delegate) { + this._peerConnectionDelegate = delegate; + } + // The addtrack event does not get fired when JavaScript code explicitly adds tracks to the stream (by calling addTrack()). + // https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/onaddtrack + static dispatchAddTrackEvent(stream, track) { + stream.dispatchEvent(new MediaStreamTrackEvent("addtrack", { track })); + } + // The removetrack event does not get fired when JavaScript code explicitly removes tracks from the stream (by calling removeTrack()). + // https://developer.mozilla.org/en-US/docs/Web/API/MediaStream/onremovetrack + static dispatchRemoveTrackEvent(stream, track) { + stream.dispatchEvent(new MediaStreamTrackEvent("removetrack", { track })); + } + /** + * Stop tracks and close peer connection. + */ + close() { + this.logger.debug("SessionDescriptionHandler.close"); + if (this._peerConnection === undefined) { + return; + } + this._peerConnection.getReceivers().forEach((receiver) => { + receiver.track && receiver.track.stop(); + }); + this._peerConnection.getSenders().forEach((sender) => { + sender.track && sender.track.stop(); + }); + if (this._dataChannel) { + this._dataChannel.close(); + } + this._peerConnection.close(); + this._peerConnection = undefined; + } + /** + * Creates an offer or answer. + * @param options - Options bucket. + * @param modifiers - Modifiers. + */ + getDescription(options, modifiers) { + var _a, _b; + this.logger.debug("SessionDescriptionHandler.getDescription"); + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + // Callback on data channel creation + this.onDataChannel = options === null || options === void 0 ? void 0 : options.onDataChannel; + // ICE will restart upon applying an offer created with the iceRestart option + const iceRestart = (_a = options === null || options === void 0 ? void 0 : options.offerOptions) === null || _a === void 0 ? void 0 : _a.iceRestart; + // ICE gathering timeout may be set on a per call basis, otherwise the configured default is used + const iceTimeout = (options === null || options === void 0 ? void 0 : options.iceGatheringTimeout) === undefined + ? (_b = this.sessionDescriptionHandlerConfiguration) === null || _b === void 0 ? void 0 : _b.iceGatheringTimeout + : options === null || options === void 0 ? void 0 : options.iceGatheringTimeout; + return this.getLocalMediaStream(options) + .then(() => this.updateDirection(options)) + .then(() => this.createDataChannel(options)) + .then(() => this.createLocalOfferOrAnswer(options)) + .then((sessionDescription) => this.applyModifiers(sessionDescription, modifiers)) + .then((sessionDescription) => this.setLocalSessionDescription(sessionDescription)) + .then(() => this.waitForIceGatheringComplete(iceRestart, iceTimeout)) + .then(() => this.getLocalSessionDescription()) + .then((sessionDescription) => { + return { + body: sessionDescription.sdp, + contentType: "application/sdp" + }; + }) + .catch((error) => { + this.logger.error("SessionDescriptionHandler.getDescription failed - " + error); + throw error; + }); + } + /** + * Returns true if the SessionDescriptionHandler can handle the Content-Type described by a SIP message. + * @param contentType - The content type that is in the SIP Message. + */ + hasDescription(contentType) { + this.logger.debug("SessionDescriptionHandler.hasDescription"); + return contentType === "application/sdp"; + } + /** + * Send DTMF via RTP (RFC 4733). + * Returns true if DTMF send is successful, false otherwise. + * @param tones - A string containing DTMF digits. + * @param options - Options object to be used by sendDtmf. + */ + sendDtmf(tones, options) { + this.logger.debug("SessionDescriptionHandler.sendDtmf"); + if (this._peerConnection === undefined) { + this.logger.error("SessionDescriptionHandler.sendDtmf failed - peer connection closed"); + return false; + } + const senders = this._peerConnection.getSenders(); + if (senders.length === 0) { + this.logger.error("SessionDescriptionHandler.sendDtmf failed - no senders"); + return false; + } + const dtmfSender = senders[0].dtmf; + if (!dtmfSender) { + this.logger.error("SessionDescriptionHandler.sendDtmf failed - no DTMF sender"); + return false; + } + const duration = options === null || options === void 0 ? void 0 : options.duration; + const interToneGap = options === null || options === void 0 ? void 0 : options.interToneGap; + try { + dtmfSender.insertDTMF(tones, duration, interToneGap); + } + catch (e) { + this.logger.error(e); + return false; + } + this.logger.log("SessionDescriptionHandler.sendDtmf sent via RTP: " + tones.toString()); + return true; + } + /** + * Sets an offer or answer. + * @param sdp - The session description. + * @param options - Options bucket. + * @param modifiers - Modifiers. + */ + setDescription(sdp, options, modifiers) { + this.logger.debug("SessionDescriptionHandler.setDescription"); + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + // Callback on data channel creation + this.onDataChannel = options === null || options === void 0 ? void 0 : options.onDataChannel; + // SDP type + const type = this._peerConnection.signalingState === "have-local-offer" ? "answer" : "offer"; + return this.getLocalMediaStream(options) + .then(() => this.applyModifiers({ sdp, type }, modifiers)) + .then((sessionDescription) => this.setRemoteSessionDescription(sessionDescription)) + .catch((error) => { + this.logger.error("SessionDescriptionHandler.setDescription failed - " + error); + throw error; + }); + } + /** + * Applies modifiers to SDP prior to setting the local or remote description. + * @param sdp - SDP to modify. + * @param modifiers - Modifiers to apply. + */ + applyModifiers(sdp, modifiers) { + this.logger.debug("SessionDescriptionHandler.applyModifiers"); + if (!modifiers || modifiers.length === 0) { + return Promise.resolve(sdp); + } + return modifiers + .reduce((cur, next) => cur.then(next), Promise.resolve(sdp)) + .then((modified) => { + this.logger.debug("SessionDescriptionHandler.applyModifiers - modified sdp"); + if (!modified.sdp || !modified.type) { + throw new Error("Invalid SDP."); + } + return { sdp: modified.sdp, type: modified.type }; + }); + } + /** + * Create a data channel. + * @remarks + * Only creates a data channel if SessionDescriptionHandlerOptions.dataChannel is true. + * Only creates a data channel if creating a local offer. + * Only if one does not already exist. + * @param options - Session description handler options. + */ + createDataChannel(options) { + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + // only create a data channel if requested + if ((options === null || options === void 0 ? void 0 : options.dataChannel) !== true) { + return Promise.resolve(); + } + // do not create a data channel if we already have one + if (this._dataChannel) { + return Promise.resolve(); + } + switch (this._peerConnection.signalingState) { + case "stable": + // if we are stable, assume we are creating a local offer so create a data channel + this.logger.debug("SessionDescriptionHandler.createDataChannel - creating data channel"); + try { + this._dataChannel = this._peerConnection.createDataChannel((options === null || options === void 0 ? void 0 : options.dataChannelLabel) || "", options === null || options === void 0 ? void 0 : options.dataChannelOptions); + if (this.onDataChannel) { + this.onDataChannel(this._dataChannel); + } + return Promise.resolve(); + } + catch (error) { + return Promise.reject(error); + } + case "have-remote-offer": + return Promise.resolve(); + case "have-local-offer": + case "have-local-pranswer": + case "have-remote-pranswer": + case "closed": + default: + return Promise.reject(new Error("Invalid signaling state " + this._peerConnection.signalingState)); + } + } + /** + * Depending on current signaling state, create a local offer or answer. + * @param options - Session description handler options. + */ + createLocalOfferOrAnswer(options) { + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + switch (this._peerConnection.signalingState) { + case "stable": + // if we are stable, assume we are creating a local offer + this.logger.debug("SessionDescriptionHandler.createLocalOfferOrAnswer - creating SDP offer"); + return this._peerConnection.createOffer(options === null || options === void 0 ? void 0 : options.offerOptions); + case "have-remote-offer": + // if we have a remote offer, assume we are creating a local answer + this.logger.debug("SessionDescriptionHandler.createLocalOfferOrAnswer - creating SDP answer"); + return this._peerConnection.createAnswer(options === null || options === void 0 ? void 0 : options.answerOptions); + case "have-local-offer": + case "have-local-pranswer": + case "have-remote-pranswer": + case "closed": + default: + return Promise.reject(new Error("Invalid signaling state " + this._peerConnection.signalingState)); + } + } + /** + * Get a media stream from the media stream factory and set the local media stream. + * @param options - Session description handler options. + */ + getLocalMediaStream(options) { + this.logger.debug("SessionDescriptionHandler.getLocalMediaStream"); + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + let constraints = Object.assign({}, options === null || options === void 0 ? void 0 : options.constraints); + // if we already have a local media stream... + if (this.localMediaStreamConstraints) { + // ignore constraint "downgrades" + constraints.audio = constraints.audio || this.localMediaStreamConstraints.audio; + constraints.video = constraints.video || this.localMediaStreamConstraints.video; + // if constraints have not changed, do not get a new media stream + if (JSON.stringify(this.localMediaStreamConstraints.audio) === JSON.stringify(constraints.audio) && + JSON.stringify(this.localMediaStreamConstraints.video) === JSON.stringify(constraints.video)) { + return Promise.resolve(); + } + } + else { + // if no constraints have been specified, default to audio for initial media stream + if (constraints.audio === undefined && constraints.video === undefined) { + constraints = { audio: true }; + } + } + this.localMediaStreamConstraints = constraints; + return this.mediaStreamFactory(constraints, this).then((mediaStream) => this.setLocalMediaStream(mediaStream)); + } + /** + * Sets the peer connection's sender tracks and local media stream tracks. + * + * @remarks + * Only the first audio and video tracks of the provided MediaStream are utilized. + * Adds tracks if audio and/or video tracks are not already present, otherwise replaces tracks. + * + * @param stream - Media stream containing tracks to be utilized. + */ + setLocalMediaStream(stream) { + this.logger.debug("SessionDescriptionHandler.setLocalMediaStream"); + if (!this._peerConnection) { + throw new Error("Peer connection undefined."); + } + const pc = this._peerConnection; + const localStream = this._localMediaStream; + const trackUpdates = []; + const updateTrack = (newTrack) => { + const kind = newTrack.kind; + if (kind !== "audio" && kind !== "video") { + throw new Error(`Unknown new track kind ${kind}.`); + } + const sender = pc.getSenders().find((sender) => sender.track && sender.track.kind === kind); + if (sender) { + trackUpdates.push(new Promise((resolve) => { + this.logger.debug(`SessionDescriptionHandler.setLocalMediaStream - replacing sender ${kind} track`); + resolve(); + }).then(() => sender + .replaceTrack(newTrack) + .then(() => { + const oldTrack = localStream.getTracks().find((localTrack) => localTrack.kind === kind); + if (oldTrack) { + oldTrack.stop(); + localStream.removeTrack(oldTrack); + SessionDescriptionHandler.dispatchRemoveTrackEvent(localStream, oldTrack); + } + localStream.addTrack(newTrack); + SessionDescriptionHandler.dispatchAddTrackEvent(localStream, newTrack); + }) + .catch((error) => { + this.logger.error(`SessionDescriptionHandler.setLocalMediaStream - failed to replace sender ${kind} track`); + throw error; + }))); + } + else { + trackUpdates.push(new Promise((resolve) => { + this.logger.debug(`SessionDescriptionHandler.setLocalMediaStream - adding sender ${kind} track`); + resolve(); + }).then(() => { + // Review: could make streamless tracks a configurable option? + // https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/addTrack#Usage_notes + try { + pc.addTrack(newTrack, localStream); + } + catch (error) { + this.logger.error(`SessionDescriptionHandler.setLocalMediaStream - failed to add sender ${kind} track`); + throw error; + } + localStream.addTrack(newTrack); + SessionDescriptionHandler.dispatchAddTrackEvent(localStream, newTrack); + })); + } + }; + // update peer connection audio tracks + const audioTracks = stream.getAudioTracks(); + if (audioTracks.length) { + updateTrack(audioTracks[0]); + } + // update peer connection video tracks + const videoTracks = stream.getVideoTracks(); + if (videoTracks.length) { + updateTrack(videoTracks[0]); + } + return trackUpdates.reduce((p, x) => p.then(() => x), Promise.resolve()); + } + /** + * Gets the peer connection's local session description. + */ + getLocalSessionDescription() { + this.logger.debug("SessionDescriptionHandler.getLocalSessionDescription"); + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + const sdp = this._peerConnection.localDescription; + if (!sdp) { + return Promise.reject(new Error("Failed to get local session description")); + } + return Promise.resolve(sdp); + } + /** + * Sets the peer connection's local session description. + * @param sessionDescription - sessionDescription The session description. + */ + setLocalSessionDescription(sessionDescription) { + this.logger.debug("SessionDescriptionHandler.setLocalSessionDescription"); + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + return this._peerConnection.setLocalDescription(sessionDescription); + } + /** + * Sets the peer connection's remote session description. + * @param sessionDescription - The session description. + */ + setRemoteSessionDescription(sessionDescription) { + this.logger.debug("SessionDescriptionHandler.setRemoteSessionDescription"); + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + const sdp = sessionDescription.sdp; + let type; + switch (this._peerConnection.signalingState) { + case "stable": + // if we are stable assume this is a remote offer + type = "offer"; + break; + case "have-local-offer": + // if we made an offer, assume this is a remote answer + type = "answer"; + break; + case "have-local-pranswer": + case "have-remote-offer": + case "have-remote-pranswer": + case "closed": + default: + return Promise.reject(new Error("Invalid signaling state " + this._peerConnection.signalingState)); + } + if (!sdp) { + this.logger.error("SessionDescriptionHandler.setRemoteSessionDescription failed - cannot set null sdp"); + return Promise.reject(new Error("SDP is undefined")); + } + return this._peerConnection.setRemoteDescription({ sdp, type }); + } + /** + * Sets a remote media stream track. + * + * @remarks + * Adds tracks if audio and/or video tracks are not already present, otherwise replaces tracks. + * + * @param track - Media stream track to be utilized. + */ + setRemoteTrack(track) { + this.logger.debug("SessionDescriptionHandler.setRemoteTrack"); + const remoteStream = this._remoteMediaStream; + if (remoteStream.getTrackById(track.id)) { + this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - have remote ${track.kind} track`); + } + else if (track.kind === "audio") { + this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - adding remote ${track.kind} track`); + remoteStream.getAudioTracks().forEach((track) => { + track.stop(); + remoteStream.removeTrack(track); + SessionDescriptionHandler.dispatchRemoveTrackEvent(remoteStream, track); + }); + remoteStream.addTrack(track); + SessionDescriptionHandler.dispatchAddTrackEvent(remoteStream, track); + } + else if (track.kind === "video") { + this.logger.debug(`SessionDescriptionHandler.setRemoteTrack - adding remote ${track.kind} track`); + remoteStream.getVideoTracks().forEach((track) => { + track.stop(); + remoteStream.removeTrack(track); + SessionDescriptionHandler.dispatchRemoveTrackEvent(remoteStream, track); + }); + remoteStream.addTrack(track); + SessionDescriptionHandler.dispatchAddTrackEvent(remoteStream, track); + } + } + /** + * Depending on the current signaling state and the session hold state, update transceiver direction. + * @param options - Session description handler options. + */ + updateDirection(options) { + if (this._peerConnection === undefined) { + return Promise.reject(new Error("Peer connection closed.")); + } + // 4.2.3. setDirection + // + // The setDirection method sets the direction of a transceiver, which + // affects the direction property of the associated "m=" section on + // future calls to createOffer and createAnswer. The permitted values + // for direction are "recvonly", "sendrecv", "sendonly", and "inactive", + // mirroring the identically named direction attributes defined in + // [RFC4566], Section 6. + // + // When creating offers, the transceiver direction is directly reflected + // in the output, even for re-offers. When creating answers, the + // transceiver direction is intersected with the offered direction, as + // explained in Section 5.3 below. + // + // Note that while setDirection sets the direction property of the + // transceiver immediately (Section 4.2.4), this property does not + // immediately affect whether the transceiver's RtpSender will send or + // its RtpReceiver will receive. The direction in effect is represented + // by the currentDirection property, which is only updated when an + // answer is applied. + // + // 4.2.4. direction + // + // The direction property indicates the last value passed into + // setDirection. If setDirection has never been called, it is set to + // the direction the transceiver was initialized with. + // + // 4.2.5. currentDirection + // + // The currentDirection property indicates the last negotiated direction + // for the transceiver's associated "m=" section. More specifically, it + // indicates the direction attribute [RFC3264] of the associated "m=" + // section in the last applied answer (including provisional answers), + // with "send" and "recv" directions reversed if it was a remote answer. + // For example, if the direction attribute for the associated "m=" + // section in a remote answer is "recvonly", currentDirection is set to + // "sendonly". + // + // If an answer that references this transceiver has not yet been + // applied or if the transceiver is stopped, currentDirection is set to + // "null". + // https://tools.ietf.org/html/rfc8829#section-4.2.3 + // + // * A direction attribute, determined by applying the rules regarding + // the offered direction specified in [RFC3264], Section 6.1, and + // then intersecting with the direction of the associated + // RtpTransceiver. For example, in the case where an "m=" section is + // offered as "sendonly" and the local transceiver is set to + // "sendrecv", the result in the answer is a "recvonly" direction. + // https://tools.ietf.org/html/rfc8829#section-5.3.1 + // + // If a stream is offered as sendonly, the corresponding stream MUST be + // marked as recvonly or inactive in the answer. If a media stream is + // listed as recvonly in the offer, the answer MUST be marked as + // sendonly or inactive in the answer. If an offered media stream is + // listed as sendrecv (or if there is no direction attribute at the + // media or session level, in which case the stream is sendrecv by + // default), the corresponding stream in the answer MAY be marked as + // sendonly, recvonly, sendrecv, or inactive. If an offered media + // stream is listed as inactive, it MUST be marked as inactive in the + // answer. + // https://tools.ietf.org/html/rfc3264#section-6.1 + switch (this._peerConnection.signalingState) { + case "stable": + // if we are stable, assume we are creating a local offer + this.logger.debug("SessionDescriptionHandler.updateDirection - setting offer direction"); + { + // determine the direction to offer given the current direction and hold state + const directionToOffer = (currentDirection) => { + switch (currentDirection) { + case "inactive": + return (options === null || options === void 0 ? void 0 : options.hold) ? "inactive" : "recvonly"; + case "recvonly": + return (options === null || options === void 0 ? void 0 : options.hold) ? "inactive" : "recvonly"; + case "sendonly": + return (options === null || options === void 0 ? void 0 : options.hold) ? "sendonly" : "sendrecv"; + case "sendrecv": + return (options === null || options === void 0 ? void 0 : options.hold) ? "sendonly" : "sendrecv"; + case "stopped": + return "stopped"; + default: + throw new Error("Should never happen"); + } + }; + // set the transceiver direction to the offer direction + this._peerConnection.getTransceivers().forEach((transceiver) => { + if (transceiver.direction /* guarding, but should always be true */) { + const offerDirection = directionToOffer(transceiver.direction); + if (transceiver.direction !== offerDirection) { + transceiver.direction = offerDirection; + } + } + }); + } + break; + case "have-remote-offer": + // if we have a remote offer, assume we are creating a local answer + this.logger.debug("SessionDescriptionHandler.updateDirection - setting answer direction"); + // FIXME: This is not the correct way to determine the answer direction as it is only + // considering first match in the offered SDP and using that to determine the answer direction. + // While that may be fine for our current use cases, it is not a generally correct approach. + { + // determine the offered direction + const offeredDirection = (() => { + const description = this._peerConnection.remoteDescription; + if (!description) { + throw new Error("Failed to read remote offer"); + } + const searchResult = /a=sendrecv\r\n|a=sendonly\r\n|a=recvonly\r\n|a=inactive\r\n/.exec(description.sdp); + if (searchResult) { + switch (searchResult[0]) { + case "a=inactive\r\n": + return "inactive"; + case "a=recvonly\r\n": + return "recvonly"; + case "a=sendonly\r\n": + return "sendonly"; + case "a=sendrecv\r\n": + return "sendrecv"; + default: + throw new Error("Should never happen"); + } + } + return "sendrecv"; + })(); + // determine the answer direction based on the offered direction and our hold state + const answerDirection = (() => { + switch (offeredDirection) { + case "inactive": + return "inactive"; + case "recvonly": + return "sendonly"; + case "sendonly": + return (options === null || options === void 0 ? void 0 : options.hold) ? "inactive" : "recvonly"; + case "sendrecv": + return (options === null || options === void 0 ? void 0 : options.hold) ? "sendonly" : "sendrecv"; + default: + throw new Error("Should never happen"); + } + })(); + // set the transceiver direction to the answer direction + this._peerConnection.getTransceivers().forEach((transceiver) => { + if (transceiver.direction /* guarding, but should always be true */) { + if (transceiver.direction !== "stopped" && transceiver.direction !== answerDirection) { + transceiver.direction = answerDirection; + } + } + }); + } + break; + case "have-local-offer": + case "have-local-pranswer": + case "have-remote-pranswer": + case "closed": + default: + return Promise.reject(new Error("Invalid signaling state " + this._peerConnection.signalingState)); + } + return Promise.resolve(); + } + /** + * Called when ICE gathering completes and resolves any waiting promise. + */ + iceGatheringComplete() { + this.logger.debug("SessionDescriptionHandler.iceGatheringComplete"); + // clear timer if need be + if (this.iceGatheringCompleteTimeoutId !== undefined) { + this.logger.debug("SessionDescriptionHandler.iceGatheringComplete - clearing timeout"); + clearTimeout(this.iceGatheringCompleteTimeoutId); + this.iceGatheringCompleteTimeoutId = undefined; + } + // resolve and cleanup promise if need be + if (this.iceGatheringCompletePromise !== undefined) { + this.logger.debug("SessionDescriptionHandler.iceGatheringComplete - resolving promise"); + this.iceGatheringCompleteResolve && this.iceGatheringCompleteResolve(); + this.iceGatheringCompletePromise = undefined; + this.iceGatheringCompleteResolve = undefined; + this.iceGatheringCompleteReject = undefined; + } + } + /** + * Wait for ICE gathering to complete. + * @param restart - If true, waits if current state is "complete" (waits for transition to "complete"). + * @param timeout - Milliseconds after which waiting times out. No timeout if 0. + */ + waitForIceGatheringComplete(restart = false, timeout = 0) { + this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete"); + if (this._peerConnection === undefined) { + return Promise.reject("Peer connection closed."); + } + // guard already complete + if (!restart && this._peerConnection.iceGatheringState === "complete") { + this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - already complete"); + return Promise.resolve(); + } + // only one may be waiting, reject any prior + if (this.iceGatheringCompletePromise !== undefined) { + this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - rejecting prior waiting promise"); + this.iceGatheringCompleteReject && this.iceGatheringCompleteReject(new Error("Promise superseded.")); + this.iceGatheringCompletePromise = undefined; + this.iceGatheringCompleteResolve = undefined; + this.iceGatheringCompleteReject = undefined; + } + this.iceGatheringCompletePromise = new Promise((resolve, reject) => { + this.iceGatheringCompleteResolve = resolve; + this.iceGatheringCompleteReject = reject; + if (timeout > 0) { + this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - timeout in " + timeout); + this.iceGatheringCompleteTimeoutId = setTimeout(() => { + this.logger.debug("SessionDescriptionHandler.waitForIceGatheringToComplete - timeout"); + this.iceGatheringComplete(); + }, timeout); + } + }); + return this.iceGatheringCompletePromise; + } + /** + * Initializes the peer connection event handlers + */ + initPeerConnectionEventHandlers() { + this.logger.debug("SessionDescriptionHandler.initPeerConnectionEventHandlers"); + if (!this._peerConnection) + throw new Error("Peer connection undefined."); + const peerConnection = this._peerConnection; + peerConnection.onconnectionstatechange = (event) => { + var _a; + const newState = peerConnection.connectionState; + this.logger.debug(`SessionDescriptionHandler.onconnectionstatechange ${newState}`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onconnectionstatechange) { + this._peerConnectionDelegate.onconnectionstatechange(event); + } + }; + peerConnection.ondatachannel = (event) => { + var _a; + this.logger.debug(`SessionDescriptionHandler.ondatachannel`); + this._dataChannel = event.channel; + if (this.onDataChannel) { + this.onDataChannel(this._dataChannel); + } + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.ondatachannel) { + this._peerConnectionDelegate.ondatachannel(event); + } + }; + peerConnection.onicecandidate = (event) => { + var _a; + this.logger.debug(`SessionDescriptionHandler.onicecandidate`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onicecandidate) { + this._peerConnectionDelegate.onicecandidate(event); + } + }; + peerConnection.onicecandidateerror = (event) => { + var _a; + this.logger.debug(`SessionDescriptionHandler.onicecandidateerror`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onicecandidateerror) { + this._peerConnectionDelegate.onicecandidateerror(event); + } + }; + peerConnection.oniceconnectionstatechange = (event) => { + var _a; + const newState = peerConnection.iceConnectionState; + this.logger.debug(`SessionDescriptionHandler.oniceconnectionstatechange ${newState}`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.oniceconnectionstatechange) { + this._peerConnectionDelegate.oniceconnectionstatechange(event); + } + }; + peerConnection.onicegatheringstatechange = (event) => { + var _a; + const newState = peerConnection.iceGatheringState; + this.logger.debug(`SessionDescriptionHandler.onicegatheringstatechange ${newState}`); + if (newState === "complete") { + this.iceGatheringComplete(); // complete waiting for ICE gathering to complete + } + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onicegatheringstatechange) { + this._peerConnectionDelegate.onicegatheringstatechange(event); + } + }; + peerConnection.onnegotiationneeded = (event) => { + var _a; + this.logger.debug(`SessionDescriptionHandler.onnegotiationneeded`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onnegotiationneeded) { + this._peerConnectionDelegate.onnegotiationneeded(event); + } + }; + peerConnection.onsignalingstatechange = (event) => { + var _a; + const newState = peerConnection.signalingState; + this.logger.debug(`SessionDescriptionHandler.onsignalingstatechange ${newState}`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onsignalingstatechange) { + this._peerConnectionDelegate.onsignalingstatechange(event); + } + }; + peerConnection.onstatsended = (event) => { + var _a; + this.logger.debug(`SessionDescriptionHandler.onstatsended`); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.onstatsended) { + this._peerConnectionDelegate.onstatsended(event); + } + }; + peerConnection.ontrack = (event) => { + var _a; + const kind = event.track.kind; + const enabled = event.track.enabled ? "enabled" : "disabled"; + this.logger.debug(`SessionDescriptionHandler.ontrack ${kind} ${enabled}`); + this.setRemoteTrack(event.track); + if ((_a = this._peerConnectionDelegate) === null || _a === void 0 ? void 0 : _a.ontrack) { + this._peerConnectionDelegate.ontrack(event); + } + }; + } +} + + +/***/ }), +/* 57 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Transport": () => (/* binding */ Transport) +/* harmony export */ }); +/* harmony import */ var _api_emitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12); +/* harmony import */ var _api_exceptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); +/* harmony import */ var _api_transport_state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21); + + + + +/** + * Transport for SIP over secure WebSocket (WSS). + * @public + */ +class Transport { + constructor(logger, options) { + this._state = _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected; + this.transitioningState = false; + // state emitter + this._stateEventEmitter = new _api_emitter__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl(); + // logger + this.logger = logger; + // guard deprecated options (remove this in version 16.x) + if (options) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const optionsDeprecated = options; + const wsServersDeprecated = optionsDeprecated === null || optionsDeprecated === void 0 ? void 0 : optionsDeprecated.wsServers; + const maxReconnectionAttemptsDeprecated = optionsDeprecated === null || optionsDeprecated === void 0 ? void 0 : optionsDeprecated.maxReconnectionAttempts; + if (wsServersDeprecated !== undefined) { + const deprecatedMessage = `The transport option "wsServers" as has apparently been specified and has been deprecated. ` + + "It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly."; + this.logger.warn(deprecatedMessage); + } + if (maxReconnectionAttemptsDeprecated !== undefined) { + const deprecatedMessage = `The transport option "maxReconnectionAttempts" as has apparently been specified and has been deprecated. ` + + "It will no longer be available starting with SIP.js release 0.16.0. Please update accordingly."; + this.logger.warn(deprecatedMessage); + } + // hack + if (wsServersDeprecated && !options.server) { + if (typeof wsServersDeprecated === "string") { + options.server = wsServersDeprecated; + } + if (wsServersDeprecated instanceof Array) { + options.server = wsServersDeprecated[0]; + } + } + } + // initialize configuration + this.configuration = Object.assign(Object.assign({}, Transport.defaultOptions), options); + // validate server URL + const url = this.configuration.server; + const parsed = _core__WEBPACK_IMPORTED_MODULE_2__.Grammar.parse(url, "absoluteURI"); + if (parsed === -1) { + this.logger.error(`Invalid WebSocket Server URL "${url}"`); + throw new Error("Invalid WebSocket Server URL"); + } + if (!["wss", "ws", "udp"].includes(parsed.scheme)) { + this.logger.error(`Invalid scheme in WebSocket Server URL "${url}"`); + throw new Error("Invalid scheme in WebSocket Server URL"); + } + this._protocol = parsed.scheme.toUpperCase(); + } + dispose() { + return this.disconnect(); + } + /** + * The protocol. + * + * @remarks + * Formatted as defined for the Via header sent-protocol transport. + * https://tools.ietf.org/html/rfc3261#section-20.42 + */ + get protocol() { + return this._protocol; + } + /** + * The URL of the WebSocket Server. + */ + get server() { + return this.configuration.server; + } + /** + * Transport state. + */ + get state() { + return this._state; + } + /** + * Transport state change emitter. + */ + get stateChange() { + return this._stateEventEmitter; + } + /** + * The WebSocket. + */ + get ws() { + return this._ws; + } + /** + * Connect to network. + * Resolves once connected. Otherwise rejects with an Error. + */ + connect() { + return this._connect(); + } + /** + * Disconnect from network. + * Resolves once disconnected. Otherwise rejects with an Error. + */ + disconnect() { + return this._disconnect(); + } + /** + * Returns true if the `state` equals "Connected". + * @remarks + * This is equivalent to `state === TransportState.Connected`. + */ + isConnected() { + return this.state === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected; + } + /** + * Sends a message. + * Resolves once message is sent. Otherwise rejects with an Error. + * @param message - Message to send. + */ + send(message) { + // Error handling is independent of whether the message was a request or + // response. + // + // If the transport user asks for a message to be sent over an + // unreliable transport, and the result is an ICMP error, the behavior + // depends on the type of ICMP error. Host, network, port or protocol + // unreachable errors, or parameter problem errors SHOULD cause the + // transport layer to inform the transport user of a failure in sending. + // Source quench and TTL exceeded ICMP errors SHOULD be ignored. + // + // If the transport user asks for a request to be sent over a reliable + // transport, and the result is a connection failure, the transport + // layer SHOULD inform the transport user of a failure in sending. + // https://tools.ietf.org/html/rfc3261#section-18.4 + return this._send(message); + } + _connect() { + this.logger.log(`Connecting ${this.server}`); + switch (this.state) { + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting: + // If `state` is "Connecting", `state` MUST NOT transition before returning. + if (this.transitioningState) { + return Promise.reject(this.transitionLoopDetectedError(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting)); + } + if (!this.connectPromise) { + throw new Error("Connect promise must be defined."); + } + return this.connectPromise; // Already connecting + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected: + // If `state` is "Connected", `state` MUST NOT transition before returning. + if (this.transitioningState) { + return Promise.reject(this.transitionLoopDetectedError(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting)); + } + if (this.connectPromise) { + throw new Error("Connect promise must not be defined."); + } + return Promise.resolve(); // Already connected + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting: + // If `state` is "Disconnecting", `state` MUST transition to "Connecting" before returning + if (this.connectPromise) { + throw new Error("Connect promise must not be defined."); + } + try { + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting); + } + catch (e) { + if (e instanceof _api_exceptions__WEBPACK_IMPORTED_MODULE_3__.StateTransitionError) { + return Promise.reject(e); // Loop detected + } + throw e; + } + break; + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected: + // If `state` is "Disconnected" `state` MUST transition to "Connecting" before returning + if (this.connectPromise) { + throw new Error("Connect promise must not be defined."); + } + try { + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting); + } + catch (e) { + if (e instanceof _api_exceptions__WEBPACK_IMPORTED_MODULE_3__.StateTransitionError) { + return Promise.reject(e); // Loop detected + } + throw e; + } + break; + default: + throw new Error("Unknown state"); + } + let ws; + try { + // WebSocket() + // https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/WebSocket + ws = new WebSocket(this.server, "sip"); + ws.binaryType = "arraybuffer"; // set data type of received binary messages + ws.addEventListener("close", (ev) => this.onWebSocketClose(ev, ws)); + ws.addEventListener("error", (ev) => this.onWebSocketError(ev, ws)); + ws.addEventListener("open", (ev) => this.onWebSocketOpen(ev, ws)); + ws.addEventListener("message", (ev) => this.onWebSocketMessage(ev, ws)); + this._ws = ws; + } + catch (error) { + this._ws = undefined; + this.logger.error("WebSocket construction failed."); + this.logger.error(error); + return new Promise((resolve, reject) => { + this.connectResolve = resolve; + this.connectReject = reject; + // The `state` MUST transition to "Disconnecting" or "Disconnected" before rejecting + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected, error); + }); + } + this.connectPromise = new Promise((resolve, reject) => { + this.connectResolve = resolve; + this.connectReject = reject; + this.connectTimeout = setTimeout(() => { + this.logger.warn("Connect timed out. " + + "Exceeded time set in configuration.connectionTimeout: " + + this.configuration.connectionTimeout + + "s."); + ws.close(1000); // careful here to use a local reference instead of this._ws + }, this.configuration.connectionTimeout * 1000); + }); + return this.connectPromise; + } + _disconnect() { + this.logger.log(`Disconnecting ${this.server}`); + switch (this.state) { + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting: + // If `state` is "Connecting", `state` MUST transition to "Disconnecting" before returning. + if (this.disconnectPromise) { + throw new Error("Disconnect promise must not be defined."); + } + try { + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting); + } + catch (e) { + if (e instanceof _api_exceptions__WEBPACK_IMPORTED_MODULE_3__.StateTransitionError) { + return Promise.reject(e); // Loop detected + } + throw e; + } + break; + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected: + // If `state` is "Connected", `state` MUST transition to "Disconnecting" before returning. + if (this.disconnectPromise) { + throw new Error("Disconnect promise must not be defined."); + } + try { + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting); + } + catch (e) { + if (e instanceof _api_exceptions__WEBPACK_IMPORTED_MODULE_3__.StateTransitionError) { + return Promise.reject(e); // Loop detected + } + throw e; + } + break; + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting: + // If `state` is "Disconnecting", `state` MUST NOT transition before returning. + if (this.transitioningState) { + return Promise.reject(this.transitionLoopDetectedError(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting)); + } + if (!this.disconnectPromise) { + throw new Error("Disconnect promise must be defined."); + } + return this.disconnectPromise; // Already disconnecting + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected: + // If `state` is "Disconnected", `state` MUST NOT transition before returning. + if (this.transitioningState) { + return Promise.reject(this.transitionLoopDetectedError(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting)); + } + if (this.disconnectPromise) { + throw new Error("Disconnect promise must not be defined."); + } + return Promise.resolve(); // Already disconnected + default: + throw new Error("Unknown state"); + } + if (!this._ws) { + throw new Error("WebSocket must be defined."); + } + const ws = this._ws; + this.disconnectPromise = new Promise((resolve, reject) => { + this.disconnectResolve = resolve; + this.disconnectReject = reject; + try { + // WebSocket.close() + // https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close + ws.close(1000); // careful here to use a local reference instead of this._ws + } + catch (error) { + // Treating this as a coding error as it apparently can only happen + // if you pass close() invalid parameters (so it should never happen) + this.logger.error("WebSocket close failed."); + this.logger.error(error); + throw error; + } + }); + return this.disconnectPromise; + } + _send(message) { + if (this.configuration.traceSip === true) { + this.logger.log("Sending WebSocket message:\n\n" + message + "\n"); + } + if (this._state !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected) { + return Promise.reject(new Error("Not connected.")); + } + if (!this._ws) { + throw new Error("WebSocket undefined."); + } + try { + // WebSocket.send() + // https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send + this._ws.send(message); + } + catch (error) { + if (error instanceof Error) { + return Promise.reject(error); + } + return Promise.reject(new Error("WebSocket send failed.")); + } + return Promise.resolve(); + } + /** + * WebSocket "onclose" event handler. + * @param ev - Event. + */ + onWebSocketClose(ev, ws) { + if (ws !== this._ws) { + return; + } + const message = `WebSocket closed ${this.server} (code: ${ev.code})`; + const error = !this.disconnectPromise ? new Error(message) : undefined; + if (error) { + this.logger.warn("WebSocket closed unexpectedly"); + } + this.logger.log(message); + // We are about to transition to disconnected, so clear our web socket + this._ws = undefined; + // The `state` MUST transition to "Disconnected" before resolving (assuming `state` is not already "Disconnected"). + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected, error); + } + /** + * WebSocket "onerror" event handler. + * @param ev - Event. + */ + onWebSocketError(ev, ws) { + if (ws !== this._ws) { + return; + } + this.logger.error("WebSocket error occurred."); + } + /** + * WebSocket "onmessage" event handler. + * @param ev - Event. + */ + onWebSocketMessage(ev, ws) { + if (ws !== this._ws) { + return; + } + const data = ev.data; + let finishedData; + // CRLF Keep Alive response from server. Clear our keep alive timeout. + if (/^(\r\n)+$/.test(data)) { + this.clearKeepAliveTimeout(); + if (this.configuration.traceSip === true) { + this.logger.log("Received WebSocket message with CRLF Keep Alive response"); + } + return; + } + if (!data) { + this.logger.warn("Received empty message, discarding..."); + return; + } + if (typeof data !== "string") { + // WebSocket binary message. + try { + finishedData = new TextDecoder().decode(new Uint8Array(data)); + // TextDecoder (above) is not supported by old browsers, but it correctly decodes UTF-8. + // The line below is an ISO 8859-1 (Latin 1) decoder, so just UTF-8 code points that are 1 byte. + // It's old code and works in old browsers (IE), so leaving it here in a comment in case someone needs it. + // finishedData = String.fromCharCode.apply(null, (new Uint8Array(data) as unknown as Array)); + } + catch (err) { + this.logger.error(err); + this.logger.error("Received WebSocket binary message failed to be converted into string, message discarded"); + return; + } + if (this.configuration.traceSip === true) { + this.logger.log("Received WebSocket binary message:\n\n" + finishedData + "\n"); + } + } + else { + // WebSocket text message. + finishedData = data; + if (this.configuration.traceSip === true) { + this.logger.log("Received WebSocket text message:\n\n" + finishedData + "\n"); + } + } + if (this.state !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected) { + this.logger.warn("Received message while not connected, discarding..."); + return; + } + if (this.onMessage) { + try { + this.onMessage(finishedData); + } + catch (e) { + this.logger.error(e); + this.logger.error("Exception thrown by onMessage callback"); + throw e; // rethrow unhandled exception + } + } + } + /** + * WebSocket "onopen" event handler. + * @param ev - Event. + */ + onWebSocketOpen(ev, ws) { + if (ws !== this._ws) { + return; + } + if (this._state === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting) { + this.logger.log(`WebSocket opened ${this.server}`); + this.transitionState(_api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected); + } + } + /** + * Helper function to generate an Error. + * @param state - State transitioning to. + */ + transitionLoopDetectedError(state) { + let message = `A state transition loop has been detected.`; + message += ` An attempt to transition from ${this._state} to ${state} before the prior transition completed.`; + message += ` Perhaps you are synchronously calling connect() or disconnect() from a callback or state change handler?`; + this.logger.error(message); + return new _api_exceptions__WEBPACK_IMPORTED_MODULE_3__.StateTransitionError("Loop detected."); + } + /** + * Transition transport state. + * @internal + */ + transitionState(newState, error) { + const invalidTransition = () => { + throw new Error(`Invalid state transition from ${this._state} to ${newState}`); + }; + if (this.transitioningState) { + throw this.transitionLoopDetectedError(newState); + } + this.transitioningState = true; + // Validate state transition + switch (this._state) { + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting: + if (newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected && + newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting && + newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected) { + invalidTransition(); + } + break; + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected: + if (newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting && newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected) { + invalidTransition(); + } + break; + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting: + if (newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting && newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected) { + invalidTransition(); + } + break; + case _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected: + if (newState !== _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting) { + invalidTransition(); + } + break; + default: + throw new Error("Unknown state."); + } + // Update state + const oldState = this._state; + this._state = newState; + // Local copies of connect promises (guarding against callbacks changing them indirectly) + // const connectPromise = this.connectPromise; + const connectResolve = this.connectResolve; + const connectReject = this.connectReject; + // Reset connect promises if no longer connecting + if (oldState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting) { + this.connectPromise = undefined; + this.connectResolve = undefined; + this.connectReject = undefined; + } + // Local copies of disconnect promises (guarding against callbacks changing them indirectly) + // const disconnectPromise = this.disconnectPromise; + const disconnectResolve = this.disconnectResolve; + const disconnectReject = this.disconnectReject; + // Reset disconnect promises if no longer disconnecting + if (oldState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting) { + this.disconnectPromise = undefined; + this.disconnectResolve = undefined; + this.disconnectReject = undefined; + } + // Clear any outstanding connect timeout + if (this.connectTimeout) { + clearTimeout(this.connectTimeout); + this.connectTimeout = undefined; + } + this.logger.log(`Transitioned from ${oldState} to ${this._state}`); + this._stateEventEmitter.emit(this._state); + // Transition to Connected + if (newState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected) { + this.startSendingKeepAlives(); + if (this.onConnect) { + try { + this.onConnect(); + } + catch (e) { + this.logger.error(e); + this.logger.error("Exception thrown by onConnect callback"); + throw e; // rethrow unhandled exception + } + } + } + // Transition from Connected + if (oldState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected) { + this.stopSendingKeepAlives(); + if (this.onDisconnect) { + try { + if (error) { + this.onDisconnect(error); + } + else { + this.onDisconnect(); + } + } + catch (e) { + this.logger.error(e); + this.logger.error("Exception thrown by onDisconnect callback"); + throw e; // rethrow unhandled exception + } + } + } + // Complete connect promise + if (oldState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connecting) { + if (!connectResolve) { + throw new Error("Connect resolve undefined."); + } + if (!connectReject) { + throw new Error("Connect reject undefined."); + } + newState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Connected ? connectResolve() : connectReject(error || new Error("Connect aborted.")); + } + // Complete disconnect promise + if (oldState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnecting) { + if (!disconnectResolve) { + throw new Error("Disconnect resolve undefined."); + } + if (!disconnectReject) { + throw new Error("Disconnect reject undefined."); + } + newState === _api_transport_state__WEBPACK_IMPORTED_MODULE_0__.TransportState.Disconnected + ? disconnectResolve() + : disconnectReject(error || new Error("Disconnect aborted.")); + } + this.transitioningState = false; + } + // TODO: Review "KeepAlive Stuff". + // It is not clear if it works and there are no tests for it. + // It was blindly lifted the keep alive code unchanged from earlier transport code. + // + // From the RFC... + // + // SIP WebSocket Clients and Servers may keep their WebSocket + // connections open by sending periodic WebSocket "Ping" frames as + // described in [RFC6455], Section 5.5.2. + // ... + // The indication and use of the CRLF NAT keep-alive mechanism defined + // for SIP connection-oriented transports in [RFC5626], Section 3.5.1 or + // [RFC6223] are, of course, usable over the transport defined in this + // specification. + // https://tools.ietf.org/html/rfc7118#section-6 + // + // and... + // + // The Ping frame contains an opcode of 0x9. + // https://tools.ietf.org/html/rfc6455#section-5.5.2 + // + // ============================== + // KeepAlive Stuff + // ============================== + clearKeepAliveTimeout() { + if (this.keepAliveDebounceTimeout) { + clearTimeout(this.keepAliveDebounceTimeout); + } + this.keepAliveDebounceTimeout = undefined; + } + /** + * Send a keep-alive (a double-CRLF sequence). + */ + sendKeepAlive() { + if (this.keepAliveDebounceTimeout) { + // We already have an outstanding keep alive, do not send another. + return Promise.resolve(); + } + this.keepAliveDebounceTimeout = setTimeout(() => { + this.clearKeepAliveTimeout(); + }, this.configuration.keepAliveDebounce * 1000); + return this.send("\r\n\r\n"); + } + /** + * Start sending keep-alives. + */ + startSendingKeepAlives() { + // Compute an amount of time in seconds to wait before sending another keep-alive. + const computeKeepAliveTimeout = (upperBound) => { + const lowerBound = upperBound * 0.8; + return 1000 * (Math.random() * (upperBound - lowerBound) + lowerBound); + }; + if (this.configuration.keepAliveInterval && !this.keepAliveInterval) { + this.keepAliveInterval = setInterval(() => { + this.sendKeepAlive(); + this.startSendingKeepAlives(); + }, computeKeepAliveTimeout(this.configuration.keepAliveInterval)); + } + } + /** + * Stop sending keep-alives. + */ + stopSendingKeepAlives() { + if (this.keepAliveInterval) { + clearInterval(this.keepAliveInterval); + } + if (this.keepAliveDebounceTimeout) { + clearTimeout(this.keepAliveDebounceTimeout); + } + this.keepAliveInterval = undefined; + this.keepAliveDebounceTimeout = undefined; + } +} +Transport.defaultOptions = { + server: "", + connectionTimeout: 5, + keepAliveInterval: 0, + keepAliveDebounce: 10, + traceSip: true +}; + + +/***/ }), +/* 58 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "DigestAuthentication": () => (/* binding */ DigestAuthentication) +/* harmony export */ }); +/* harmony import */ var _md5__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(59); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(20); + + +function MD5(s) { + return _md5__WEBPACK_IMPORTED_MODULE_0__.Md5.hashStr(s); +} +/** + * Digest Authentication. + * @internal + */ +class DigestAuthentication { + /** + * Constructor. + * @param loggerFactory - LoggerFactory. + * @param username - Username. + * @param password - Password. + */ + constructor(loggerFactory, ha1, username, password) { + this.logger = loggerFactory.getLogger("sipjs.digestauthentication"); + this.username = username; + this.password = password; + this.ha1 = ha1; + this.nc = 0; + this.ncHex = "00000000"; + } + /** + * Performs Digest authentication given a SIP request and the challenge + * received in a response to that request. + * @param request - + * @param challenge - + * @returns true if credentials were successfully generated, false otherwise. + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + authenticate(request, challenge, body) { + // Inspect and validate the challenge. + this.algorithm = challenge.algorithm; + this.realm = challenge.realm; + this.nonce = challenge.nonce; + this.opaque = challenge.opaque; + this.stale = challenge.stale; + if (this.algorithm) { + if (this.algorithm !== "MD5") { + this.logger.warn("challenge with Digest algorithm different than 'MD5', authentication aborted"); + return false; + } + } + else { + this.algorithm = "MD5"; + } + if (!this.realm) { + this.logger.warn("challenge without Digest realm, authentication aborted"); + return false; + } + if (!this.nonce) { + this.logger.warn("challenge without Digest nonce, authentication aborted"); + return false; + } + // 'qop' can contain a list of values (Array). Let's choose just one. + if (challenge.qop) { + if (challenge.qop.indexOf("auth") > -1) { + this.qop = "auth"; + } + else if (challenge.qop.indexOf("auth-int") > -1) { + this.qop = "auth-int"; + } + else { + // Otherwise 'qop' is present but does not contain 'auth' or 'auth-int', so abort here. + this.logger.warn("challenge without Digest qop different than 'auth' or 'auth-int', authentication aborted"); + return false; + } + } + else { + this.qop = undefined; + } + // Fill other attributes. + this.method = request.method; + this.uri = request.ruri; + this.cnonce = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.createRandomToken)(12); + this.nc += 1; + this.updateNcHex(); + // nc-value = 8LHEX. Max value = 'FFFFFFFF'. + if (this.nc === 4294967296) { + this.nc = 1; + this.ncHex = "00000001"; + } + // Calculate the Digest "response" value. + this.calculateResponse(body); + return true; + } + /** + * Return the Proxy-Authorization or WWW-Authorization header value. + */ + toString() { + const authParams = []; + if (!this.response) { + throw new Error("response field does not exist, cannot generate Authorization header"); + } + authParams.push("algorithm=" + this.algorithm); + authParams.push('username="' + this.username + '"'); + authParams.push('realm="' + this.realm + '"'); + authParams.push('nonce="' + this.nonce + '"'); + authParams.push('uri="' + this.uri + '"'); + authParams.push('response="' + this.response + '"'); + if (this.opaque) { + authParams.push('opaque="' + this.opaque + '"'); + } + if (this.qop) { + authParams.push("qop=" + this.qop); + authParams.push('cnonce="' + this.cnonce + '"'); + authParams.push("nc=" + this.ncHex); + } + return "Digest " + authParams.join(", "); + } + /** + * Generate the 'nc' value as required by Digest in this.ncHex by reading this.nc. + */ + updateNcHex() { + const hex = Number(this.nc).toString(16); + this.ncHex = "00000000".substr(0, 8 - hex.length) + hex; + } + /** + * Generate Digest 'response' value. + */ + calculateResponse(body) { + let ha1, ha2; + // HA1 = MD5(A1) = MD5(username:realm:password) + ha1 = this.ha1; + if (ha1 === "" || ha1 === undefined) { + ha1 = MD5(this.username + ":" + this.realm + ":" + this.password); + } + if (this.qop === "auth") { + // HA2 = MD5(A2) = MD5(method:digestURI) + ha2 = MD5(this.method + ":" + this.uri); + // response = MD5(HA1:nonce:nonceCount:credentialsNonce:qop:HA2)` + this.response = MD5(ha1 + ":" + this.nonce + ":" + this.ncHex + ":" + this.cnonce + ":auth:" + ha2); + } + else if (this.qop === "auth-int") { + // HA2 = MD5(A2) = MD5(method:digestURI:MD5(entityBody)) + ha2 = MD5(this.method + ":" + this.uri + ":" + MD5(body ? body : "")); + // response = MD5(HA1:nonce:nonceCount:credentialsNonce:qop:HA2) + this.response = MD5(ha1 + ":" + this.nonce + ":" + this.ncHex + ":" + this.cnonce + ":auth-int:" + ha2); + } + else if (this.qop === undefined) { + // HA2 = MD5(A2) = MD5(method:digestURI) + ha2 = MD5(this.method + ":" + this.uri); + // response = MD5(HA1:nonce:HA2) + this.response = MD5(ha1 + ":" + this.nonce + ":" + ha2); + } + } +} + + +/***/ }), +/* 59 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Md5": () => (/* binding */ Md5) +/* harmony export */ }); +/* eslint-disable */ +// +// Scoped from: https://github.com/cotag/ts-md5 +// +/* + +TypeScript Md5 +============== + +Based on work by +* Joseph Myers: http://www.myersdaily.org/joseph/javascript/md5-text.html +* André Cruz: https://github.com/satazor/SparkMD5 +* Raymond Hill: https://github.com/gorhill/yamd5.js + +Effectively a TypeScrypt re-write of Raymond Hill JS Library + +The MIT License (MIT) + +Copyright (C) 2014 Raymond Hill + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2015 André Cruz + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. + + +*/ +class Md5 { + constructor() { + this._dataLength = 0; + this._bufferLength = 0; + this._state = new Int32Array(4); + this._buffer = new ArrayBuffer(68); + this._buffer8 = new Uint8Array(this._buffer, 0, 68); + this._buffer32 = new Uint32Array(this._buffer, 0, 17); + this.start(); + } + static hashStr(str, raw = false) { + return this.onePassHasher + .start() + .appendStr(str) + .end(raw); + } + static hashAsciiStr(str, raw = false) { + return this.onePassHasher + .start() + .appendAsciiStr(str) + .end(raw); + } + static _hex(x) { + const hc = Md5.hexChars; + const ho = Md5.hexOut; + let n; + let offset; + let j; + let i; + for (i = 0; i < 4; i += 1) { + offset = i * 8; + n = x[i]; + for (j = 0; j < 8; j += 2) { + ho[offset + 1 + j] = hc.charAt(n & 0x0F); + n >>>= 4; + ho[offset + 0 + j] = hc.charAt(n & 0x0F); + n >>>= 4; + } + } + return ho.join(''); + } + static _md5cycle(x, k) { + let a = x[0]; + let b = x[1]; + let c = x[2]; + let d = x[3]; + // ff() + a += (b & c | ~b & d) + k[0] - 680876936 | 0; + a = (a << 7 | a >>> 25) + b | 0; + d += (a & b | ~a & c) + k[1] - 389564586 | 0; + d = (d << 12 | d >>> 20) + a | 0; + c += (d & a | ~d & b) + k[2] + 606105819 | 0; + c = (c << 17 | c >>> 15) + d | 0; + b += (c & d | ~c & a) + k[3] - 1044525330 | 0; + b = (b << 22 | b >>> 10) + c | 0; + a += (b & c | ~b & d) + k[4] - 176418897 | 0; + a = (a << 7 | a >>> 25) + b | 0; + d += (a & b | ~a & c) + k[5] + 1200080426 | 0; + d = (d << 12 | d >>> 20) + a | 0; + c += (d & a | ~d & b) + k[6] - 1473231341 | 0; + c = (c << 17 | c >>> 15) + d | 0; + b += (c & d | ~c & a) + k[7] - 45705983 | 0; + b = (b << 22 | b >>> 10) + c | 0; + a += (b & c | ~b & d) + k[8] + 1770035416 | 0; + a = (a << 7 | a >>> 25) + b | 0; + d += (a & b | ~a & c) + k[9] - 1958414417 | 0; + d = (d << 12 | d >>> 20) + a | 0; + c += (d & a | ~d & b) + k[10] - 42063 | 0; + c = (c << 17 | c >>> 15) + d | 0; + b += (c & d | ~c & a) + k[11] - 1990404162 | 0; + b = (b << 22 | b >>> 10) + c | 0; + a += (b & c | ~b & d) + k[12] + 1804603682 | 0; + a = (a << 7 | a >>> 25) + b | 0; + d += (a & b | ~a & c) + k[13] - 40341101 | 0; + d = (d << 12 | d >>> 20) + a | 0; + c += (d & a | ~d & b) + k[14] - 1502002290 | 0; + c = (c << 17 | c >>> 15) + d | 0; + b += (c & d | ~c & a) + k[15] + 1236535329 | 0; + b = (b << 22 | b >>> 10) + c | 0; + // gg() + a += (b & d | c & ~d) + k[1] - 165796510 | 0; + a = (a << 5 | a >>> 27) + b | 0; + d += (a & c | b & ~c) + k[6] - 1069501632 | 0; + d = (d << 9 | d >>> 23) + a | 0; + c += (d & b | a & ~b) + k[11] + 643717713 | 0; + c = (c << 14 | c >>> 18) + d | 0; + b += (c & a | d & ~a) + k[0] - 373897302 | 0; + b = (b << 20 | b >>> 12) + c | 0; + a += (b & d | c & ~d) + k[5] - 701558691 | 0; + a = (a << 5 | a >>> 27) + b | 0; + d += (a & c | b & ~c) + k[10] + 38016083 | 0; + d = (d << 9 | d >>> 23) + a | 0; + c += (d & b | a & ~b) + k[15] - 660478335 | 0; + c = (c << 14 | c >>> 18) + d | 0; + b += (c & a | d & ~a) + k[4] - 405537848 | 0; + b = (b << 20 | b >>> 12) + c | 0; + a += (b & d | c & ~d) + k[9] + 568446438 | 0; + a = (a << 5 | a >>> 27) + b | 0; + d += (a & c | b & ~c) + k[14] - 1019803690 | 0; + d = (d << 9 | d >>> 23) + a | 0; + c += (d & b | a & ~b) + k[3] - 187363961 | 0; + c = (c << 14 | c >>> 18) + d | 0; + b += (c & a | d & ~a) + k[8] + 1163531501 | 0; + b = (b << 20 | b >>> 12) + c | 0; + a += (b & d | c & ~d) + k[13] - 1444681467 | 0; + a = (a << 5 | a >>> 27) + b | 0; + d += (a & c | b & ~c) + k[2] - 51403784 | 0; + d = (d << 9 | d >>> 23) + a | 0; + c += (d & b | a & ~b) + k[7] + 1735328473 | 0; + c = (c << 14 | c >>> 18) + d | 0; + b += (c & a | d & ~a) + k[12] - 1926607734 | 0; + b = (b << 20 | b >>> 12) + c | 0; + // hh() + a += (b ^ c ^ d) + k[5] - 378558 | 0; + a = (a << 4 | a >>> 28) + b | 0; + d += (a ^ b ^ c) + k[8] - 2022574463 | 0; + d = (d << 11 | d >>> 21) + a | 0; + c += (d ^ a ^ b) + k[11] + 1839030562 | 0; + c = (c << 16 | c >>> 16) + d | 0; + b += (c ^ d ^ a) + k[14] - 35309556 | 0; + b = (b << 23 | b >>> 9) + c | 0; + a += (b ^ c ^ d) + k[1] - 1530992060 | 0; + a = (a << 4 | a >>> 28) + b | 0; + d += (a ^ b ^ c) + k[4] + 1272893353 | 0; + d = (d << 11 | d >>> 21) + a | 0; + c += (d ^ a ^ b) + k[7] - 155497632 | 0; + c = (c << 16 | c >>> 16) + d | 0; + b += (c ^ d ^ a) + k[10] - 1094730640 | 0; + b = (b << 23 | b >>> 9) + c | 0; + a += (b ^ c ^ d) + k[13] + 681279174 | 0; + a = (a << 4 | a >>> 28) + b | 0; + d += (a ^ b ^ c) + k[0] - 358537222 | 0; + d = (d << 11 | d >>> 21) + a | 0; + c += (d ^ a ^ b) + k[3] - 722521979 | 0; + c = (c << 16 | c >>> 16) + d | 0; + b += (c ^ d ^ a) + k[6] + 76029189 | 0; + b = (b << 23 | b >>> 9) + c | 0; + a += (b ^ c ^ d) + k[9] - 640364487 | 0; + a = (a << 4 | a >>> 28) + b | 0; + d += (a ^ b ^ c) + k[12] - 421815835 | 0; + d = (d << 11 | d >>> 21) + a | 0; + c += (d ^ a ^ b) + k[15] + 530742520 | 0; + c = (c << 16 | c >>> 16) + d | 0; + b += (c ^ d ^ a) + k[2] - 995338651 | 0; + b = (b << 23 | b >>> 9) + c | 0; + // ii() + a += (c ^ (b | ~d)) + k[0] - 198630844 | 0; + a = (a << 6 | a >>> 26) + b | 0; + d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0; + d = (d << 10 | d >>> 22) + a | 0; + c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0; + c = (c << 15 | c >>> 17) + d | 0; + b += (d ^ (c | ~a)) + k[5] - 57434055 | 0; + b = (b << 21 | b >>> 11) + c | 0; + a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0; + a = (a << 6 | a >>> 26) + b | 0; + d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0; + d = (d << 10 | d >>> 22) + a | 0; + c += (a ^ (d | ~b)) + k[10] - 1051523 | 0; + c = (c << 15 | c >>> 17) + d | 0; + b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0; + b = (b << 21 | b >>> 11) + c | 0; + a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0; + a = (a << 6 | a >>> 26) + b | 0; + d += (b ^ (a | ~c)) + k[15] - 30611744 | 0; + d = (d << 10 | d >>> 22) + a | 0; + c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0; + c = (c << 15 | c >>> 17) + d | 0; + b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0; + b = (b << 21 | b >>> 11) + c | 0; + a += (c ^ (b | ~d)) + k[4] - 145523070 | 0; + a = (a << 6 | a >>> 26) + b | 0; + d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0; + d = (d << 10 | d >>> 22) + a | 0; + c += (a ^ (d | ~b)) + k[2] + 718787259 | 0; + c = (c << 15 | c >>> 17) + d | 0; + b += (d ^ (c | ~a)) + k[9] - 343485551 | 0; + b = (b << 21 | b >>> 11) + c | 0; + x[0] = a + x[0] | 0; + x[1] = b + x[1] | 0; + x[2] = c + x[2] | 0; + x[3] = d + x[3] | 0; + } + start() { + this._dataLength = 0; + this._bufferLength = 0; + this._state.set(Md5.stateIdentity); + return this; + } + // Char to code point to to array conversion: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt + // #Example.3A_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown + appendStr(str) { + const buf8 = this._buffer8; + const buf32 = this._buffer32; + let bufLen = this._bufferLength; + let code; + let i; + for (i = 0; i < str.length; i += 1) { + code = str.charCodeAt(i); + if (code < 128) { + buf8[bufLen++] = code; + } + else if (code < 0x800) { + buf8[bufLen++] = (code >>> 6) + 0xC0; + buf8[bufLen++] = code & 0x3F | 0x80; + } + else if (code < 0xD800 || code > 0xDBFF) { + buf8[bufLen++] = (code >>> 12) + 0xE0; + buf8[bufLen++] = (code >>> 6 & 0x3F) | 0x80; + buf8[bufLen++] = (code & 0x3F) | 0x80; + } + else { + code = ((code - 0xD800) * 0x400) + (str.charCodeAt(++i) - 0xDC00) + 0x10000; + if (code > 0x10FFFF) { + throw new Error('Unicode standard supports code points up to U+10FFFF'); + } + buf8[bufLen++] = (code >>> 18) + 0xF0; + buf8[bufLen++] = (code >>> 12 & 0x3F) | 0x80; + buf8[bufLen++] = (code >>> 6 & 0x3F) | 0x80; + buf8[bufLen++] = (code & 0x3F) | 0x80; + } + if (bufLen >= 64) { + this._dataLength += 64; + Md5._md5cycle(this._state, buf32); + bufLen -= 64; + buf32[0] = buf32[16]; + } + } + this._bufferLength = bufLen; + return this; + } + appendAsciiStr(str) { + const buf8 = this._buffer8; + const buf32 = this._buffer32; + let bufLen = this._bufferLength; + let i; + let j = 0; + for (;;) { + i = Math.min(str.length - j, 64 - bufLen); + while (i--) { + buf8[bufLen++] = str.charCodeAt(j++); + } + if (bufLen < 64) { + break; + } + this._dataLength += 64; + Md5._md5cycle(this._state, buf32); + bufLen = 0; + } + this._bufferLength = bufLen; + return this; + } + appendByteArray(input) { + const buf8 = this._buffer8; + const buf32 = this._buffer32; + let bufLen = this._bufferLength; + let i; + let j = 0; + for (;;) { + i = Math.min(input.length - j, 64 - bufLen); + while (i--) { + buf8[bufLen++] = input[j++]; + } + if (bufLen < 64) { + break; + } + this._dataLength += 64; + Md5._md5cycle(this._state, buf32); + bufLen = 0; + } + this._bufferLength = bufLen; + return this; + } + getState() { + const self = this; + const s = self._state; + return { + buffer: String.fromCharCode.apply(null, self._buffer8), + buflen: self._bufferLength, + length: self._dataLength, + state: [s[0], s[1], s[2], s[3]] + }; + } + setState(state) { + const buf = state.buffer; + const x = state.state; + const s = this._state; + let i; + this._dataLength = state.length; + this._bufferLength = state.buflen; + s[0] = x[0]; + s[1] = x[1]; + s[2] = x[2]; + s[3] = x[3]; + for (i = 0; i < buf.length; i += 1) { + this._buffer8[i] = buf.charCodeAt(i); + } + } + end(raw = false) { + const bufLen = this._bufferLength; + const buf8 = this._buffer8; + const buf32 = this._buffer32; + const i = (bufLen >> 2) + 1; + let dataBitsLen; + this._dataLength += bufLen; + buf8[bufLen] = 0x80; + buf8[bufLen + 1] = buf8[bufLen + 2] = buf8[bufLen + 3] = 0; + buf32.set(Md5.buffer32Identity.subarray(i), i); + if (bufLen > 55) { + Md5._md5cycle(this._state, buf32); + buf32.set(Md5.buffer32Identity); + } + // Do the final computation based on the tail and length + // Beware that the final length may not fit in 32 bits so we take care of that + dataBitsLen = this._dataLength * 8; + if (dataBitsLen <= 0xFFFFFFFF) { + buf32[14] = dataBitsLen; + } + else { + const matches = dataBitsLen.toString(16).match(/(.*?)(.{0,8})$/); + if (matches === null) { + return; + } + const lo = parseInt(matches[2], 16); + const hi = parseInt(matches[1], 16) || 0; + buf32[14] = lo; + buf32[15] = hi; + } + Md5._md5cycle(this._state, buf32); + return raw ? this._state : Md5._hex(this._state); + } +} +// Private Static Variables +Md5.stateIdentity = new Int32Array([1732584193, -271733879, -1732584194, 271733878]); +Md5.buffer32Identity = new Int32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); +Md5.hexChars = '0123456789abcdef'; +Md5.hexOut = []; +// Permanent instance is to use for one-call hashing +Md5.onePassHasher = new Md5(); +if (Md5.hashStr('hello') !== '5d41402abc4b2a76b9719d911017c592') { + console.error('Md5 self test failed.'); +} + + +/***/ }), +/* 60 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UserAgentCore": () => (/* binding */ UserAgentCore) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(29); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(27); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(83); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(64); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(63); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(71); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(90); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(91); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(62); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(95); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(87); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(86); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(89); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(96); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(97); +/* harmony import */ var _allowed_methods__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(28); + + + + +/** + * This is ported from UA.C.ACCEPTED_BODY_TYPES. + * FIXME: TODO: Should be configurable/variable. + */ +const acceptedBodyTypes = ["application/sdp", "application/dtmf-relay"]; +/** + * User Agent Core. + * @remarks + * Core designates the functions specific to a particular type + * of SIP entity, i.e., specific to either a stateful or stateless + * proxy, a user agent or registrar. All cores, except those for + * the stateless proxy, are transaction users. + * https://tools.ietf.org/html/rfc3261#section-6 + * + * UAC Core: The set of processing functions required of a UAC that + * reside above the transaction and transport layers. + * https://tools.ietf.org/html/rfc3261#section-6 + * + * UAS Core: The set of processing functions required at a UAS that + * resides above the transaction and transport layers. + * https://tools.ietf.org/html/rfc3261#section-6 + * @public + */ +class UserAgentCore { + /** + * Constructor. + * @param configuration - Configuration. + * @param delegate - Delegate. + */ + constructor(configuration, delegate = {}) { + /** UACs. */ + this.userAgentClients = new Map(); + /** UASs. */ + this.userAgentServers = new Map(); + this.configuration = configuration; + this.delegate = delegate; + this.dialogs = new Map(); + this.subscribers = new Map(); + this.logger = configuration.loggerFactory.getLogger("sip.user-agent-core"); + } + /** Destructor. */ + dispose() { + this.reset(); + } + /** Reset. */ + reset() { + this.dialogs.forEach((dialog) => dialog.dispose()); + this.dialogs.clear(); + this.subscribers.forEach((subscriber) => subscriber.dispose()); + this.subscribers.clear(); + this.userAgentClients.forEach((uac) => uac.dispose()); + this.userAgentClients.clear(); + this.userAgentServers.forEach((uac) => uac.dispose()); + this.userAgentServers.clear(); + } + /** Logger factory. */ + get loggerFactory() { + return this.configuration.loggerFactory; + } + /** Transport. */ + get transport() { + const transport = this.configuration.transportAccessor(); + if (!transport) { + throw new Error("Transport undefined."); + } + return transport; + } + /** + * Send INVITE. + * @param request - Outgoing request. + * @param delegate - Request delegate. + */ + invite(request, delegate) { + return new _user_agents__WEBPACK_IMPORTED_MODULE_0__.InviteUserAgentClient(this, request, delegate); + } + /** + * Send MESSAGE. + * @param request - Outgoing request. + * @param delegate - Request delegate. + */ + message(request, delegate) { + return new _user_agents__WEBPACK_IMPORTED_MODULE_1__.MessageUserAgentClient(this, request, delegate); + } + /** + * Send PUBLISH. + * @param request - Outgoing request. + * @param delegate - Request delegate. + */ + publish(request, delegate) { + return new _user_agents__WEBPACK_IMPORTED_MODULE_2__.PublishUserAgentClient(this, request, delegate); + } + /** + * Send REGISTER. + * @param request - Outgoing request. + * @param delegate - Request delegate. + */ + register(request, delegate) { + return new _user_agents__WEBPACK_IMPORTED_MODULE_3__.RegisterUserAgentClient(this, request, delegate); + } + /** + * Send SUBSCRIBE. + * @param request - Outgoing request. + * @param delegate - Request delegate. + */ + subscribe(request, delegate) { + return new _user_agents__WEBPACK_IMPORTED_MODULE_4__.SubscribeUserAgentClient(this, request, delegate); + } + /** + * Send a request. + * @param request - Outgoing request. + * @param delegate - Request delegate. + */ + request(request, delegate) { + return new _user_agents__WEBPACK_IMPORTED_MODULE_5__.UserAgentClient(_transactions__WEBPACK_IMPORTED_MODULE_6__.NonInviteClientTransaction, this, request, delegate); + } + /** + * Outgoing request message factory function. + * @param method - Method. + * @param requestURI - Request-URI. + * @param fromURI - From URI. + * @param toURI - To URI. + * @param options - Request options. + * @param extraHeaders - Extra headers to add. + * @param body - Message body. + */ + makeOutgoingRequestMessage(method, requestURI, fromURI, toURI, options, extraHeaders, body) { + // default values from user agent configuration + const callIdPrefix = this.configuration.sipjsId; + const fromDisplayName = this.configuration.displayName; + const forceRport = this.configuration.viaForceRport; + const hackViaTcp = this.configuration.hackViaTcp; + const optionTags = this.configuration.supportedOptionTags.slice(); + if (method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.REGISTER) { + optionTags.push("path", "gruu"); + } + if (method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.INVITE && (this.configuration.contact.pubGruu || this.configuration.contact.tempGruu)) { + optionTags.push("gruu"); + } + const routeSet = this.configuration.routeSet; + const userAgentString = this.configuration.userAgentHeaderFieldValue; + const viaHost = this.configuration.viaHost; + const defaultOptions = { + callIdPrefix, + forceRport, + fromDisplayName, + hackViaTcp, + optionTags, + routeSet, + userAgentString, + viaHost + }; + // merge provided options with default options + const requestOptions = Object.assign(Object.assign({}, defaultOptions), options); + return new _messages__WEBPACK_IMPORTED_MODULE_8__.OutgoingRequestMessage(method, requestURI, fromURI, toURI, requestOptions, extraHeaders, body); + } + /** + * Handle an incoming request message from the transport. + * @param message - Incoming request message from transport layer. + */ + receiveIncomingRequestFromTransport(message) { + this.receiveRequestFromTransport(message); + } + /** + * Handle an incoming response message from the transport. + * @param message - Incoming response message from transport layer. + */ + receiveIncomingResponseFromTransport(message) { + this.receiveResponseFromTransport(message); + } + /** + * A stateless UAS is a UAS that does not maintain transaction state. + * It replies to requests normally, but discards any state that would + * ordinarily be retained by a UAS after a response has been sent. If a + * stateless UAS receives a retransmission of a request, it regenerates + * the response and re-sends it, just as if it were replying to the first + * instance of the request. A UAS cannot be stateless unless the request + * processing for that method would always result in the same response + * if the requests are identical. This rules out stateless registrars, + * for example. Stateless UASs do not use a transaction layer; they + * receive requests directly from the transport layer and send responses + * directly to the transport layer. + * https://tools.ietf.org/html/rfc3261#section-8.2.7 + * @param message - Incoming request message to reply to. + * @param statusCode - Status code to reply with. + */ + replyStateless(message, options) { + const userAgent = this.configuration.userAgentHeaderFieldValue; + const supported = this.configuration.supportedOptionTagsResponse; + options = Object.assign(Object.assign({}, options), { userAgent, supported }); + const response = (0,_messages__WEBPACK_IMPORTED_MODULE_9__.constructOutgoingResponse)(message, options); + this.transport.send(response.message).catch((error) => { + // If the transport rejects, it SHOULD reject with a TransportError. + // But the transport may be external code, so we are careful... + if (error instanceof Error) { + this.logger.error(error.message); + } + this.logger.error(`Transport error occurred sending stateless reply to ${message.method} request.`); + // TODO: Currently there is no hook to provide notification that a transport error occurred + // and throwing would result in an uncaught error (in promise), so we silently eat the error. + // Furthermore, silently eating stateless reply transport errors is arguably what we want to do here. + }); + return response; + } + /** + * In Section 18.2.1, replace the last paragraph with: + * + * Next, the server transport attempts to match the request to a + * server transaction. It does so using the matching rules described + * in Section 17.2.3. If a matching server transaction is found, the + * request is passed to that transaction for processing. If no match + * is found, the request is passed to the core, which may decide to + * construct a new server transaction for that request. + * https://tools.ietf.org/html/rfc6026#section-8.10 + * @param message - Incoming request message from transport layer. + */ + receiveRequestFromTransport(message) { + // When a request is received from the network by the server, it has to + // be matched to an existing transaction. This is accomplished in the + // following manner. + // + // The branch parameter in the topmost Via header field of the request + // is examined. If it is present and begins with the magic cookie + // "z9hG4bK", the request was generated by a client transaction + // compliant to this specification. Therefore, the branch parameter + // will be unique across all transactions sent by that client. The + // request matches a transaction if: + // + // 1. the branch parameter in the request is equal to the one in the + // top Via header field of the request that created the + // transaction, and + // + // 2. the sent-by value in the top Via of the request is equal to the + // one in the request that created the transaction, and + // + // 3. the method of the request matches the one that created the + // transaction, except for ACK, where the method of the request + // that created the transaction is INVITE. + // + // This matching rule applies to both INVITE and non-INVITE transactions + // alike. + // + // The sent-by value is used as part of the matching process because + // there could be accidental or malicious duplication of branch + // parameters from different clients. + // https://tools.ietf.org/html/rfc3261#section-17.2.3 + const transactionId = message.viaBranch; // FIXME: Currently only using rule 1... + const uas = this.userAgentServers.get(transactionId); + // When receiving an ACK that matches an existing INVITE server + // transaction and that does not contain a branch parameter containing + // the magic cookie defined in RFC 3261, the matching transaction MUST + // be checked to see if it is in the "Accepted" state. If it is, then + // the ACK must be passed directly to the transaction user instead of + // being absorbed by the transaction state machine. This is necessary + // as requests from RFC 2543 clients will not include a unique branch + // parameter, and the mechanisms for calculating the transaction ID from + // such a request will be the same for both INVITE and ACKs. + // https://tools.ietf.org/html/rfc6026#section-6 + // Any ACKs received from the network while in the "Accepted" state MUST be + // passed directly to the TU and not absorbed. + // https://tools.ietf.org/html/rfc6026#section-7.1 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.ACK) { + if (uas && uas.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_10__.TransactionState.Accepted) { + if (uas instanceof _user_agents__WEBPACK_IMPORTED_MODULE_11__.InviteUserAgentServer) { + // These are ACKs matching an INVITE server transaction. + // These should never happen with RFC 3261 compliant user agents + // (would be a broken ACK to negative final response or something) + // but is apparently how RFC 2543 user agents do things. + // We are not currently supporting this case. + // NOTE: Not backwards compatible with RFC 2543 (no support for strict-routing). + this.logger.warn(`Discarding out of dialog ACK after 2xx response sent on transaction ${transactionId}.`); + return; + } + } + } + // The CANCEL method requests that the TU at the server side cancel a + // pending transaction. The TU determines the transaction to be + // cancelled by taking the CANCEL request, and then assuming that the + // request method is anything but CANCEL or ACK and applying the + // transaction matching procedures of Section 17.2.3. The matching + // transaction is the one to be cancelled. + // https://tools.ietf.org/html/rfc3261#section-9.2 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.CANCEL) { + if (uas) { + // Regardless of the method of the original request, as long as the + // CANCEL matched an existing transaction, the UAS answers the CANCEL + // request itself with a 200 (OK) response. + // https://tools.ietf.org/html/rfc3261#section-9.2 + this.replyStateless(message, { statusCode: 200 }); + // If the transaction for the original request still exists, the behavior + // of the UAS on receiving a CANCEL request depends on whether it has already + // sent a final response for the original request. If it has, the CANCEL + // request has no effect on the processing of the original request, no + // effect on any session state, and no effect on the responses generated + // for the original request. If the UAS has not issued a final response + // for the original request, its behavior depends on the method of the + // original request. If the original request was an INVITE, the UAS + // SHOULD immediately respond to the INVITE with a 487 (Request + // Terminated). + // https://tools.ietf.org/html/rfc3261#section-9.2 + if (uas.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_12__.InviteServerTransaction && + uas.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_10__.TransactionState.Proceeding) { + if (uas instanceof _user_agents__WEBPACK_IMPORTED_MODULE_11__.InviteUserAgentServer) { + uas.receiveCancel(message); + } + // A CANCEL request has no impact on the processing of + // transactions with any other method defined in this specification. + // https://tools.ietf.org/html/rfc3261#section-9.2 + } + } + else { + // If the UAS did not find a matching transaction for the CANCEL + // according to the procedure above, it SHOULD respond to the CANCEL + // with a 481 (Call Leg/Transaction Does Not Exist). + // https://tools.ietf.org/html/rfc3261#section-9.2 + this.replyStateless(message, { statusCode: 481 }); + } + return; + } + // If a matching server transaction is found, the request is passed to that + // transaction for processing. + // https://tools.ietf.org/html/rfc6026#section-8.10 + if (uas) { + uas.transaction.receiveRequest(message); + return; + } + // If no match is found, the request is passed to the core, which may decide to + // construct a new server transaction for that request. + // https://tools.ietf.org/html/rfc6026#section-8.10 + this.receiveRequest(message); + return; + } + /** + * UAC and UAS procedures depend strongly on two factors. First, based + * on whether the request or response is inside or outside of a dialog, + * and second, based on the method of a request. Dialogs are discussed + * thoroughly in Section 12; they represent a peer-to-peer relationship + * between user agents and are established by specific SIP methods, such + * as INVITE. + * @param message - Incoming request message. + */ + receiveRequest(message) { + // 8.2 UAS Behavior + // UASs SHOULD process the requests in the order of the steps that + // follow in this section (that is, starting with authentication, then + // inspecting the method, the header fields, and so on throughout the + // remainder of this section). + // https://tools.ietf.org/html/rfc3261#section-8.2 + // 8.2.1 Method Inspection + // Once a request is authenticated (or authentication is skipped), the + // UAS MUST inspect the method of the request. If the UAS recognizes + // but does not support the method of a request, it MUST generate a 405 + // (Method Not Allowed) response. Procedures for generating responses + // are described in Section 8.2.6. The UAS MUST also add an Allow + // header field to the 405 (Method Not Allowed) response. The Allow + // header field MUST list the set of methods supported by the UAS + // generating the message. + // https://tools.ietf.org/html/rfc3261#section-8.2.1 + if (!_allowed_methods__WEBPACK_IMPORTED_MODULE_13__.AllowedMethods.includes(message.method)) { + const allowHeader = "Allow: " + _allowed_methods__WEBPACK_IMPORTED_MODULE_13__.AllowedMethods.toString(); + this.replyStateless(message, { + statusCode: 405, + extraHeaders: [allowHeader] + }); + return; + } + // 8.2.2 Header Inspection + // https://tools.ietf.org/html/rfc3261#section-8.2.2 + if (!message.ruri) { + // FIXME: A request message should always have an ruri + throw new Error("Request-URI undefined."); + } + // 8.2.2.1 To and Request-URI + // If the Request-URI uses a scheme not supported by the UAS, it SHOULD + // reject the request with a 416 (Unsupported URI Scheme) response. + // https://tools.ietf.org/html/rfc3261#section-8.2.2.1 + if (message.ruri.scheme !== "sip") { + this.replyStateless(message, { statusCode: 416 }); + return; + } + // 8.2.2.1 To and Request-URI + // If the Request-URI does not identify an address that the + // UAS is willing to accept requests for, it SHOULD reject + // the request with a 404 (Not Found) response. + // https://tools.ietf.org/html/rfc3261#section-8.2.2.1 + const ruri = message.ruri; + const ruriMatches = (uri) => { + return !!uri && uri.user === ruri.user; + }; + if (!ruriMatches(this.configuration.aor) && + !(ruriMatches(this.configuration.contact.uri) || + ruriMatches(this.configuration.contact.pubGruu) || + ruriMatches(this.configuration.contact.tempGruu))) { + this.logger.warn("Request-URI does not point to us."); + if (message.method !== _messages__WEBPACK_IMPORTED_MODULE_7__.C.ACK) { + this.replyStateless(message, { statusCode: 404 }); + } + return; + } + // 8.2.2.1 To and Request-URI + // Other potential sources of received Request-URIs include + // the Contact header fields of requests and responses sent by the UA + // that establish or refresh dialogs. + // https://tools.ietf.org/html/rfc3261#section-8.2.2.1 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.INVITE) { + if (!message.hasHeader("Contact")) { + this.replyStateless(message, { + statusCode: 400, + reasonPhrase: "Missing Contact Header" + }); + return; + } + } + // 8.2.2.2 Merged Requests + // If the request has no tag in the To header field, the UAS core MUST + // check the request against ongoing transactions. If the From tag, + // Call-ID, and CSeq exactly match those associated with an ongoing + // transaction, but the request does not match that transaction (based + // on the matching rules in Section 17.2.3), the UAS core SHOULD + // generate a 482 (Loop Detected) response and pass it to the server + // transaction. + // + // The same request has arrived at the UAS more than once, following + // different paths, most likely due to forking. The UAS processes + // the first such request received and responds with a 482 (Loop + // Detected) to the rest of them. + // https://tools.ietf.org/html/rfc3261#section-8.2.2.2 + if (!message.toTag) { + const transactionId = message.viaBranch; + if (!this.userAgentServers.has(transactionId)) { + const mergedRequest = Array.from(this.userAgentServers.values()).some((uas) => uas.transaction.request.fromTag === message.fromTag && + uas.transaction.request.callId === message.callId && + uas.transaction.request.cseq === message.cseq); + if (mergedRequest) { + this.replyStateless(message, { statusCode: 482 }); + return; + } + } + } + // 8.2.2.3 Require + // https://tools.ietf.org/html/rfc3261#section-8.2.2.3 + // TODO + // 8.2.3 Content Processing + // https://tools.ietf.org/html/rfc3261#section-8.2.3 + // TODO + // 8.2.4 Applying Extensions + // https://tools.ietf.org/html/rfc3261#section-8.2.4 + // TODO + // 8.2.5 Processing the Request + // Assuming all of the checks in the previous subsections are passed, + // the UAS processing becomes method-specific. + // https://tools.ietf.org/html/rfc3261#section-8.2.5 + // The UAS will receive the request from the transaction layer. If the + // request has a tag in the To header field, the UAS core computes the + // dialog identifier corresponding to the request and compares it with + // existing dialogs. If there is a match, this is a mid-dialog request. + // In that case, the UAS first applies the same processing rules for + // requests outside of a dialog, discussed in Section 8.2. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + if (message.toTag) { + this.receiveInsideDialogRequest(message); + } + else { + this.receiveOutsideDialogRequest(message); + } + return; + } + /** + * Once a dialog has been established between two UAs, either of them + * MAY initiate new transactions as needed within the dialog. The UA + * sending the request will take the UAC role for the transaction. The + * UA receiving the request will take the UAS role. Note that these may + * be different roles than the UAs held during the transaction that + * established the dialog. + * https://tools.ietf.org/html/rfc3261#section-12.2 + * @param message - Incoming request message. + */ + receiveInsideDialogRequest(message) { + // NOTIFY requests are matched to such SUBSCRIBE requests if they + // contain the same "Call-ID", a "To" header field "tag" parameter that + // matches the "From" header field "tag" parameter of the SUBSCRIBE + // request, and the same "Event" header field. Rules for comparisons of + // the "Event" header fields are described in Section 8.2.1. + // https://tools.ietf.org/html/rfc6665#section-4.4.1 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.NOTIFY) { + const event = message.parseHeader("Event"); + if (!event || !event.event) { + this.replyStateless(message, { statusCode: 489 }); + return; + } + // FIXME: Subscriber id should also matching on event id. + const subscriberId = message.callId + message.toTag + event.event; + const subscriber = this.subscribers.get(subscriberId); + if (subscriber) { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_14__.NotifyUserAgentServer(this, message); + subscriber.onNotify(uas); + return; + } + } + // Requests sent within a dialog, as any other requests, are atomic. If + // a particular request is accepted by the UAS, all the state changes + // associated with it are performed. If the request is rejected, none + // of the state changes are performed. + // + // Note that some requests, such as INVITEs, affect several pieces of + // state. + // + // The UAS will receive the request from the transaction layer. If the + // request has a tag in the To header field, the UAS core computes the + // dialog identifier corresponding to the request and compares it with + // existing dialogs. If there is a match, this is a mid-dialog request. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + const dialogId = message.callId + message.toTag + message.fromTag; + const dialog = this.dialogs.get(dialogId); + if (dialog) { + // [Sip-implementors] Reg. SIP reinvite, UPDATE and OPTIONS + // You got the question right. + // + // And you got the right answer too. :-) + // + // Thanks, + // Paul + // + // Robert Sparks wrote: + // > So I've lost track of the question during the musing. + // > + // > I _think_ the fundamental question being asked is this: + // > + // > Is an endpoint required to reject (with a 481) an OPTIONS request that + // > arrives with at to-tag but does not match any existing dialog state. + // > (Assuming some earlier requirement hasn't forced another error code). Or + // > is it OK if it just sends + // > a 200 OK anyhow. + // > + // > My take on the collection of specs is that its _not_ ok for it to send + // > the 200 OK anyhow and that it is required to send + // > the 481. I base this primarily on these sentences from 11.2 in 3261: + // > + // > The response to an OPTIONS is constructed using the standard rules + // > for a SIP response as discussed in Section 8.2.6. The response code + // > chosen MUST be the same that would have been chosen had the request + // > been an INVITE. + // > + // > Did I miss the point of the question? + // > + // > On May 15, 2008, at 12:48 PM, Paul Kyzivat wrote: + // > + // >> [Including Robert in hopes of getting his insight on this.] + // https://lists.cs.columbia.edu/pipermail/sip-implementors/2008-May/019178.html + // + // Requests that do not change in any way the state of a dialog may be + // received within a dialog (for example, an OPTIONS request). They are + // processed as if they had been received outside the dialog. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.OPTIONS) { + const allowHeader = "Allow: " + _allowed_methods__WEBPACK_IMPORTED_MODULE_13__.AllowedMethods.toString(); + const acceptHeader = "Accept: " + acceptedBodyTypes.toString(); + this.replyStateless(message, { + statusCode: 200, + extraHeaders: [allowHeader, acceptHeader] + }); + return; + } + // Pass the incoming request to the dialog for further handling. + dialog.receiveRequest(message); + return; + } + // The most important behaviors of a stateless UAS are the following: + // ... + // o A stateless UAS MUST ignore ACK requests. + // ... + // https://tools.ietf.org/html/rfc3261#section-8.2.7 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_7__.C.ACK) { + // If a final response to an INVITE was sent statelessly, + // the corresponding ACK: + // - will not match an existing transaction + // - may have tag in the To header field + // - not not match any existing dialogs + // Absorb unmatched ACKs. + return; + } + // If the request has a tag in the To header field, but the dialog + // identifier does not match any existing dialogs, the UAS may have + // crashed and restarted, or it may have received a request for a + // different (possibly failed) UAS (the UASs can construct the To tags + // so that a UAS can identify that the tag was for a UAS for which it is + // providing recovery). Another possibility is that the incoming + // request has been simply mis-routed. Based on the To tag, the UAS MAY + // either accept or reject the request. Accepting the request for + // acceptable To tags provides robustness, so that dialogs can persist + // even through crashes. UAs wishing to support this capability must + // take into consideration some issues such as choosing monotonically + // increasing CSeq sequence numbers even across reboots, reconstructing + // the route set, and accepting out-of-range RTP timestamps and sequence + // numbers. + // + // If the UAS wishes to reject the request because it does not wish to + // recreate the dialog, it MUST respond to the request with a 481 + // (Call/Transaction Does Not Exist) status code and pass that to the + // server transaction. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + this.replyStateless(message, { statusCode: 481 }); + return; + } + /** + * Assuming all of the checks in the previous subsections are passed, + * the UAS processing becomes method-specific. + * https://tools.ietf.org/html/rfc3261#section-8.2.5 + * @param message - Incoming request message. + */ + receiveOutsideDialogRequest(message) { + switch (message.method) { + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.ACK: + // Absorb stray out of dialog ACKs + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.BYE: + // If the BYE does not match an existing dialog, the UAS core SHOULD + // generate a 481 (Call/Transaction Does Not Exist) response and pass + // that to the server transaction. This rule means that a BYE sent + // without tags by a UAC will be rejected. + // https://tools.ietf.org/html/rfc3261#section-15.1.2 + this.replyStateless(message, { statusCode: 481 }); + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.CANCEL: + throw new Error(`Unexpected out of dialog request method ${message.method}.`); + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.INFO: + // Use of the INFO method does not constitute a separate dialog usage. + // INFO messages are always part of, and share the fate of, an invite + // dialog usage [RFC5057]. INFO messages cannot be sent as part of + // other dialog usages, or outside an existing dialog. + // https://tools.ietf.org/html/rfc6086#section-1 + this.replyStateless(message, { statusCode: 405 }); // Should never happen + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.INVITE: + // https://tools.ietf.org/html/rfc3261#section-13.3.1 + { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_11__.InviteUserAgentServer(this, message); + this.delegate.onInvite ? this.delegate.onInvite(uas) : uas.reject(); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.MESSAGE: + // MESSAGE requests are discouraged inside a dialog. Implementations + // are restricted from creating a usage for the purpose of carrying a + // sequence of MESSAGE requests (though some implementations use it that + // way, against the standard recommendation). + // https://tools.ietf.org/html/rfc5057#section-5.3 + { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_15__.MessageUserAgentServer(this, message); + this.delegate.onMessage ? this.delegate.onMessage(uas) : uas.accept(); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.NOTIFY: + // Obsoleted by: RFC 6665 + // If any non-SUBSCRIBE mechanisms are defined to create subscriptions, + // it is the responsibility of the parties defining those mechanisms to + // ensure that correlation of a NOTIFY message to the corresponding + // subscription is possible. Designers of such mechanisms are also + // warned to make a distinction between sending a NOTIFY message to a + // subscriber who is aware of the subscription, and sending a NOTIFY + // message to an unsuspecting node. The latter behavior is invalid, and + // MUST receive a "481 Subscription does not exist" response (unless + // some other 400- or 500-class error code is more applicable), as + // described in section 3.2.4. In other words, knowledge of a + // subscription must exist in both the subscriber and the notifier to be + // valid, even if installed via a non-SUBSCRIBE mechanism. + // https://tools.ietf.org/html/rfc3265#section-3.2 + // + // NOTIFY requests are sent to inform subscribers of changes in state to + // which the subscriber has a subscription. Subscriptions are created + // using the SUBSCRIBE method. In legacy implementations, it is + // possible that other means of subscription creation have been used. + // However, this specification does not allow the creation of + // subscriptions except through SUBSCRIBE requests and (for backwards- + // compatibility) REFER requests [RFC3515]. + // https://tools.ietf.org/html/rfc6665#section-3.2 + { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_14__.NotifyUserAgentServer(this, message); + this.delegate.onNotify ? this.delegate.onNotify(uas) : uas.reject({ statusCode: 405 }); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.OPTIONS: + // https://tools.ietf.org/html/rfc3261#section-11.2 + { + const allowHeader = "Allow: " + _allowed_methods__WEBPACK_IMPORTED_MODULE_13__.AllowedMethods.toString(); + const acceptHeader = "Accept: " + acceptedBodyTypes.toString(); + this.replyStateless(message, { + statusCode: 200, + extraHeaders: [allowHeader, acceptHeader] + }); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.REFER: + // https://tools.ietf.org/html/rfc3515#section-2.4.2 + { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_16__.ReferUserAgentServer(this, message); + this.delegate.onRefer ? this.delegate.onRefer(uas) : uas.reject({ statusCode: 405 }); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.REGISTER: + // https://tools.ietf.org/html/rfc3261#section-10.3 + { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_17__.RegisterUserAgentServer(this, message); + this.delegate.onRegister ? this.delegate.onRegister(uas) : uas.reject({ statusCode: 405 }); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_7__.C.SUBSCRIBE: + // https://tools.ietf.org/html/rfc6665#section-4.2 + { + const uas = new _user_agents__WEBPACK_IMPORTED_MODULE_18__.SubscribeUserAgentServer(this, message); + this.delegate.onSubscribe ? this.delegate.onSubscribe(uas) : uas.reject({ statusCode: 480 }); + } + break; + default: + throw new Error(`Unexpected out of dialog request method ${message.method}.`); + } + return; + } + /** + * Responses are first processed by the transport layer and then passed + * up to the transaction layer. The transaction layer performs its + * processing and then passes the response up to the TU. The majority + * of response processing in the TU is method specific. However, there + * are some general behaviors independent of the method. + * https://tools.ietf.org/html/rfc3261#section-8.1.3 + * @param message - Incoming response message from transport layer. + */ + receiveResponseFromTransport(message) { + // 8.1.3.1 Transaction Layer Errors + // https://tools.ietf.org/html/rfc3261#section-8.1.3.1 + // Handled by transaction layer callbacks. + // 8.1.3.2 Unrecognized Responses + // https://tools.ietf.org/html/rfc3261#section-8.1.3.1 + // TODO + // 8.1.3.3 Vias + // https://tools.ietf.org/html/rfc3261#section-8.1.3.3 + if (message.getHeaders("via").length > 1) { + this.logger.warn("More than one Via header field present in the response, dropping"); + return; + } + // 8.1.3.4 Processing 3xx Responses + // https://tools.ietf.org/html/rfc3261#section-8.1.3.4 + // TODO + // 8.1.3.5 Processing 4xx Responses + // https://tools.ietf.org/html/rfc3261#section-8.1.3.5 + // TODO + // When the transport layer in the client receives a response, it has to + // determine which client transaction will handle the response, so that + // the processing of Sections 17.1.1 and 17.1.2 can take place. The + // branch parameter in the top Via header field is used for this + // purpose. A response matches a client transaction under two + // conditions: + // + // 1. If the response has the same value of the branch parameter in + // the top Via header field as the branch parameter in the top + // Via header field of the request that created the transaction. + // + // 2. If the method parameter in the CSeq header field matches the + // method of the request that created the transaction. The + // method is needed since a CANCEL request constitutes a + // different transaction, but shares the same value of the branch + // parameter. + // https://tools.ietf.org/html/rfc3261#section-17.1.3 + const userAgentClientId = message.viaBranch + message.method; + const userAgentClient = this.userAgentClients.get(userAgentClientId); + // The client transport uses the matching procedures of Section + // 17.1.3 to attempt to match the response to an existing + // transaction. If there is a match, the response MUST be passed to + // that transaction. Otherwise, any element other than a stateless + // proxy MUST silently discard the response. + // https://tools.ietf.org/html/rfc6026#section-8.9 + if (userAgentClient) { + userAgentClient.transaction.receiveResponse(message); + } + else { + this.logger.warn(`Discarding unmatched ${message.statusCode} response to ${message.method} ${userAgentClientId}.`); + } + } +} + + +/***/ }), +/* 61 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "InviteUserAgentClient": () => (/* binding */ InviteUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _dialogs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69); +/* harmony import */ var _dialogs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(30); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(63); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + + +/** + * INVITE UAC. + * @remarks + * 13 Initiating a Session + * https://tools.ietf.org/html/rfc3261#section-13 + * 13.1 Overview + * https://tools.ietf.org/html/rfc3261#section-13.1 + * 13.2 UAC Processing + * https://tools.ietf.org/html/rfc3261#section-13.2 + * @public + */ +class InviteUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.InviteClientTransaction, core, message, delegate); + this.confirmedDialogAcks = new Map(); + this.confirmedDialogs = new Map(); + this.earlyDialogs = new Map(); + this.delegate = delegate; + } + dispose() { + // The UAC core considers the INVITE transaction completed 64*T1 seconds + // after the reception of the first 2xx response. At this point all the + // early dialogs that have not transitioned to established dialogs are + // terminated. Once the INVITE transaction is considered completed by + // the UAC core, no more new 2xx responses are expected to arrive. + // + // If, after acknowledging any 2xx response to an INVITE, the UAC does + // not want to continue with that dialog, then the UAC MUST terminate + // the dialog by sending a BYE request as described in Section 15. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + this.earlyDialogs.forEach((earlyDialog) => earlyDialog.dispose()); + this.earlyDialogs.clear(); + super.dispose(); + } + /** + * Special case for transport error while sending ACK. + * @param error - Transport error + */ + onTransportError(error) { + if (this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_2__.TransactionState.Calling) { + return super.onTransportError(error); + } + // If not in 'calling' state, the transport error occurred while sending an ACK. + this.logger.error(error.message); + this.logger.error("User agent client request transport error while sending ACK."); + } + /** + * Once the INVITE has been passed to the INVITE client transaction, the + * UAC waits for responses for the INVITE. + * https://tools.ietf.org/html/rfc3261#section-13.2.2 + * @param incomingResponse - Incoming response to INVITE request. + */ + receiveResponse(message) { + if (!this.authenticationGuard(message)) { + return; + } + const statusCode = message.statusCode ? message.statusCode.toString() : ""; + if (!statusCode) { + throw new Error("Response status code undefined."); + } + switch (true) { + case /^100$/.test(statusCode): + if (this.delegate && this.delegate.onTrying) { + this.delegate.onTrying({ message }); + } + return; + case /^1[0-9]{2}$/.test(statusCode): + // Zero, one or multiple provisional responses may arrive before one or + // more final responses are received. Provisional responses for an + // INVITE request can create "early dialogs". If a provisional response + // has a tag in the To field, and if the dialog ID of the response does + // not match an existing dialog, one is constructed using the procedures + // defined in Section 12.1.2. + // + // The early dialog will only be needed if the UAC needs to send a + // request to its peer within the dialog before the initial INVITE + // transaction completes. Header fields present in a provisional + // response are applicable as long as the dialog is in the early state + // (for example, an Allow header field in a provisional response + // contains the methods that can be used in the dialog while this is in + // the early state). + // https://tools.ietf.org/html/rfc3261#section-13.2.2.1 + { + // Dialogs are created through the generation of non-failure responses + // to requests with specific methods. Within this specification, only + // 2xx and 101-199 responses with a To tag, where the request was + // INVITE, will establish a dialog. A dialog established by a non-final + // response to a request is in the "early" state and it is called an + // early dialog. + // https://tools.ietf.org/html/rfc3261#section-12.1 + // Provisional without to tag, no dialog to create. + if (!message.toTag) { + this.logger.warn("Non-100 1xx INVITE response received without a to tag, dropping."); + return; + } + // When a UAS responds to a request with a response that establishes a + // dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route + // header field values from the request into the response (including the + // URIs, URI parameters, and any Record-Route header field parameters, + // whether they are known or unknown to the UAS) and MUST maintain the + // order of those values. The UAS MUST add a Contact header field to + // the response. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + // Provisional without Contact header field, malformed response. + const contact = message.parseHeader("contact"); + if (!contact) { + this.logger.error("Non-100 1xx INVITE response received without a Contact header field, dropping."); + return; + } + // Compute dialog state. + const dialogState = _dialogs__WEBPACK_IMPORTED_MODULE_3__.Dialog.initialDialogStateForUserAgentClient(this.message, message); + // Have existing early dialog or create a new one. + let earlyDialog = this.earlyDialogs.get(dialogState.id); + if (!earlyDialog) { + const transaction = this.transaction; + if (!(transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_1__.InviteClientTransaction)) { + throw new Error("Transaction not instance of InviteClientTransaction."); + } + earlyDialog = new _dialogs__WEBPACK_IMPORTED_MODULE_4__.SessionDialog(transaction, this.core, dialogState); + this.earlyDialogs.set(earlyDialog.id, earlyDialog); + } + // Guard against out of order reliable provisional responses. + // Note that this is where the rseq tracking is done. + if (!earlyDialog.reliableSequenceGuard(message)) { + this.logger.warn("1xx INVITE reliable response received out of order or is a retransmission, dropping."); + return; + } + // If the initial offer is in an INVITE, the answer MUST be in a + // reliable non-failure message from UAS back to UAC which is + // correlated to that INVITE. For this specification, that is + // only the final 2xx response to that INVITE. That same exact + // answer MAY also be placed in any provisional responses sent + // prior to the answer. The UAC MUST treat the first session + // description it receives as the answer, and MUST ignore any + // session descriptions in subsequent responses to the initial + // INVITE. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + if (earlyDialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Initial || + earlyDialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_5__.SignalingState.HaveLocalOffer) { + earlyDialog.signalingStateTransition(message); + } + // Pass response to delegate. + const session = earlyDialog; + if (this.delegate && this.delegate.onProgress) { + this.delegate.onProgress({ + message, + session, + prack: (options) => { + const outgoingPrackRequest = session.prack(undefined, options); + return outgoingPrackRequest; + } + }); + } + } + return; + case /^2[0-9]{2}$/.test(statusCode): + // Multiple 2xx responses may arrive at the UAC for a single INVITE + // request due to a forking proxy. Each response is distinguished by + // the tag parameter in the To header field, and each represents a + // distinct dialog, with a distinct dialog identifier. + // + // If the dialog identifier in the 2xx response matches the dialog + // identifier of an existing dialog, the dialog MUST be transitioned to + // the "confirmed" state, and the route set for the dialog MUST be + // recomputed based on the 2xx response using the procedures of Section + // 12.2.1.2. Otherwise, a new dialog in the "confirmed" state MUST be + // constructed using the procedures of Section 12.1.2. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + { + // Dialogs are created through the generation of non-failure responses + // to requests with specific methods. Within this specification, only + // 2xx and 101-199 responses with a To tag, where the request was + // INVITE, will establish a dialog. A dialog established by a non-final + // response to a request is in the "early" state and it is called an + // early dialog. + // https://tools.ietf.org/html/rfc3261#section-12.1 + // Final without to tag, malformed response. + if (!message.toTag) { + this.logger.error("2xx INVITE response received without a to tag, dropping."); + return; + } + // When a UAS responds to a request with a response that establishes a + // dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route + // header field values from the request into the response (including the + // URIs, URI parameters, and any Record-Route header field parameters, + // whether they are known or unknown to the UAS) and MUST maintain the + // order of those values. The UAS MUST add a Contact header field to + // the response. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + // Final without Contact header field, malformed response. + const contact = message.parseHeader("contact"); + if (!contact) { + this.logger.error("2xx INVITE response received without a Contact header field, dropping."); + return; + } + // Compute dialog state. + const dialogState = _dialogs__WEBPACK_IMPORTED_MODULE_3__.Dialog.initialDialogStateForUserAgentClient(this.message, message); + // NOTE: Currently our transaction layer is caching the 2xx ACKs and + // handling retransmissions of the ACK which is an approach which is + // not to spec. In any event, this block is intended to provide a to + // spec implementation of ACK retransmissions, but it should not be + // hit currently. + let dialog = this.confirmedDialogs.get(dialogState.id); + if (dialog) { + // Once the ACK has been constructed, the procedures of [4] are used to + // determine the destination address, port and transport. However, the + // request is passed to the transport layer directly for transmission, + // rather than a client transaction. This is because the UAC core + // handles retransmissions of the ACK, not the transaction layer. The + // ACK MUST be passed to the client transport every time a + // retransmission of the 2xx final response that triggered the ACK + // arrives. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + const outgoingAckRequest = this.confirmedDialogAcks.get(dialogState.id); + if (outgoingAckRequest) { + const transaction = this.transaction; + if (!(transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_1__.InviteClientTransaction)) { + throw new Error("Client transaction not instance of InviteClientTransaction."); + } + transaction.ackResponse(outgoingAckRequest.message); + } + else { + // If still waiting for an ACK, drop the retransmission of the 2xx final response. + } + return; + } + // If the dialog identifier in the 2xx response matches the dialog + // identifier of an existing dialog, the dialog MUST be transitioned to + // the "confirmed" state, and the route set for the dialog MUST be + // recomputed based on the 2xx response using the procedures of Section + // 12.2.1.2. Otherwise, a new dialog in the "confirmed" state MUST be + // constructed using the procedures of Section 12.1.2. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + dialog = this.earlyDialogs.get(dialogState.id); + if (dialog) { + dialog.confirm(); + dialog.recomputeRouteSet(message); + this.earlyDialogs.delete(dialog.id); + this.confirmedDialogs.set(dialog.id, dialog); + } + else { + const transaction = this.transaction; + if (!(transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_1__.InviteClientTransaction)) { + throw new Error("Transaction not instance of InviteClientTransaction."); + } + dialog = new _dialogs__WEBPACK_IMPORTED_MODULE_4__.SessionDialog(transaction, this.core, dialogState); + this.confirmedDialogs.set(dialog.id, dialog); + } + // If the initial offer is in an INVITE, the answer MUST be in a + // reliable non-failure message from UAS back to UAC which is + // correlated to that INVITE. For this specification, that is + // only the final 2xx response to that INVITE. That same exact + // answer MAY also be placed in any provisional responses sent + // prior to the answer. The UAC MUST treat the first session + // description it receives as the answer, and MUST ignore any + // session descriptions in subsequent responses to the initial + // INVITE. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + if (dialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_5__.SignalingState.Initial || + dialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_5__.SignalingState.HaveLocalOffer) { + dialog.signalingStateTransition(message); + } + // Session Initiated! :) + const session = dialog; + // The UAC core MUST generate an ACK request for each 2xx received from + // the transaction layer. The header fields of the ACK are constructed + // in the same way as for any request sent within a dialog (see Section + // 12) with the exception of the CSeq and the header fields related to + // authentication. The sequence number of the CSeq header field MUST be + // the same as the INVITE being acknowledged, but the CSeq method MUST + // be ACK. The ACK MUST contain the same credentials as the INVITE. If + // the 2xx contains an offer (based on the rules above), the ACK MUST + // carry an answer in its body. If the offer in the 2xx response is not + // acceptable, the UAC core MUST generate a valid answer in the ACK and + // then send a BYE immediately. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + if (this.delegate && this.delegate.onAccept) { + this.delegate.onAccept({ + message, + session, + ack: (options) => { + const outgoingAckRequest = session.ack(options); + this.confirmedDialogAcks.set(session.id, outgoingAckRequest); + return outgoingAckRequest; + } + }); + } + else { + const outgoingAckRequest = session.ack(); + this.confirmedDialogAcks.set(session.id, outgoingAckRequest); + } + } + return; + case /^3[0-9]{2}$/.test(statusCode): + // 12.3 Termination of a Dialog + // + // Independent of the method, if a request outside of a dialog generates + // a non-2xx final response, any early dialogs created through + // provisional responses to that request are terminated. The mechanism + // for terminating confirmed dialogs is method specific. In this + // specification, the BYE method terminates a session and the dialog + // associated with it. See Section 15 for details. + // https://tools.ietf.org/html/rfc3261#section-12.3 + // All early dialogs are considered terminated upon reception of the + // non-2xx final response. + // + // After having received the non-2xx final response the UAC core + // considers the INVITE transaction completed. The INVITE client + // transaction handles the generation of ACKs for the response (see + // Section 17). + // https://tools.ietf.org/html/rfc3261#section-13.2.2.3 + this.earlyDialogs.forEach((earlyDialog) => earlyDialog.dispose()); + this.earlyDialogs.clear(); + // A 3xx response may contain one or more Contact header field values + // providing new addresses where the callee might be reachable. + // Depending on the status code of the 3xx response (see Section 21.3), + // the UAC MAY choose to try those new addresses. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.2 + if (this.delegate && this.delegate.onRedirect) { + this.delegate.onRedirect({ message }); + } + return; + case /^[4-6][0-9]{2}$/.test(statusCode): + // 12.3 Termination of a Dialog + // + // Independent of the method, if a request outside of a dialog generates + // a non-2xx final response, any early dialogs created through + // provisional responses to that request are terminated. The mechanism + // for terminating confirmed dialogs is method specific. In this + // specification, the BYE method terminates a session and the dialog + // associated with it. See Section 15 for details. + // https://tools.ietf.org/html/rfc3261#section-12.3 + // All early dialogs are considered terminated upon reception of the + // non-2xx final response. + // + // After having received the non-2xx final response the UAC core + // considers the INVITE transaction completed. The INVITE client + // transaction handles the generation of ACKs for the response (see + // Section 17). + // https://tools.ietf.org/html/rfc3261#section-13.2.2.3 + this.earlyDialogs.forEach((earlyDialog) => earlyDialog.dispose()); + this.earlyDialogs.clear(); + // A single non-2xx final response may be received for the INVITE. 4xx, + // 5xx and 6xx responses may contain a Contact header field value + // indicating the location where additional information about the error + // can be found. Subsequent final responses (which would only arrive + // under error conditions) MUST be ignored. + // https://tools.ietf.org/html/rfc3261#section-13.2.2.3 + if (this.delegate && this.delegate.onReject) { + this.delegate.onReject({ message }); + } + return; + default: + throw new Error(`Invalid status code ${statusCode}`); + } + throw new Error(`Executing what should be an unreachable code path receiving ${statusCode} response.`); + } +} + + +/***/ }), +/* 62 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UserAgentClient": () => (/* binding */ UserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(26); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); + + +/** + * User Agent Client (UAC). + * @remarks + * A user agent client is a logical entity + * that creates a new request, and then uses the client + * transaction state machinery to send it. The role of UAC lasts + * only for the duration of that transaction. In other words, if + * a piece of software initiates a request, it acts as a UAC for + * the duration of that transaction. If it receives a request + * later, it assumes the role of a user agent server for the + * processing of that transaction. + * https://tools.ietf.org/html/rfc3261#section-6 + * @public + */ +class UserAgentClient { + constructor(transactionConstructor, core, message, delegate) { + this.transactionConstructor = transactionConstructor; + this.core = core; + this.message = message; + this.delegate = delegate; + this.challenged = false; + this.stale = false; + this.logger = this.loggerFactory.getLogger("sip.user-agent-client"); + this.init(); + } + dispose() { + this.transaction.dispose(); + } + get loggerFactory() { + return this.core.loggerFactory; + } + /** The transaction associated with this request. */ + get transaction() { + if (!this._transaction) { + throw new Error("Transaction undefined."); + } + return this._transaction; + } + /** + * Since requests other than INVITE are responded to immediately, sending a + * CANCEL for a non-INVITE request would always create a race condition. + * A CANCEL request SHOULD NOT be sent to cancel a request other than INVITE. + * https://tools.ietf.org/html/rfc3261#section-9.1 + * @param options - Cancel options bucket. + */ + cancel(reason, options = {}) { + if (!this.transaction) { + throw new Error("Transaction undefined."); + } + if (!this.message.to) { + throw new Error("To undefined."); + } + if (!this.message.from) { + throw new Error("From undefined."); + } + // The following procedures are used to construct a CANCEL request. The + // Request-URI, Call-ID, To, the numeric part of CSeq, and From header + // fields in the CANCEL request MUST be identical to those in the + // request being cancelled, including tags. A CANCEL constructed by a + // client MUST have only a single Via header field value matching the + // top Via value in the request being cancelled. Using the same values + // for these header fields allows the CANCEL to be matched with the + // request it cancels (Section 9.2 indicates how such matching occurs). + // However, the method part of the CSeq header field MUST have a value + // of CANCEL. This allows it to be identified and processed as a + // transaction in its own right (See Section 17). + // https://tools.ietf.org/html/rfc3261#section-9.1 + const message = this.core.makeOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_0__.C.CANCEL, this.message.ruri, this.message.from.uri, this.message.to.uri, { + toTag: this.message.toTag, + fromTag: this.message.fromTag, + callId: this.message.callId, + cseq: this.message.cseq + }, options.extraHeaders); + // TODO: Revisit this. + // The CANCEL needs to use the same branch parameter so that + // it matches the INVITE transaction, but this is a hacky way to do this. + // Or at the very least not well documented. If the the branch parameter + // is set on the outgoing request, the transaction will use it. + // Otherwise the transaction will make a new one. + message.branch = this.message.branch; + if (this.message.headers.Route) { + message.headers.Route = this.message.headers.Route; + } + if (reason) { + message.setHeader("Reason", reason); + } + // If no provisional response has been received, the CANCEL request MUST + // NOT be sent; rather, the client MUST wait for the arrival of a + // provisional response before sending the request. If the original + // request has generated a final response, the CANCEL SHOULD NOT be + // sent, as it is an effective no-op, since CANCEL has no effect on + // requests that have already generated a final response. + // https://tools.ietf.org/html/rfc3261#section-9.1 + if (this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + new UserAgentClient(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, this.core, message); + } + else { + this.transaction.addStateChangeListener(() => { + if (this.transaction && this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + new UserAgentClient(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, this.core, message); + } + }, { once: true }); + } + return message; + } + /** + * If a 401 (Unauthorized) or 407 (Proxy Authentication Required) + * response is received, the UAC SHOULD follow the authorization + * procedures of Section 22.2 and Section 22.3 to retry the request with + * credentials. + * https://tools.ietf.org/html/rfc3261#section-8.1.3.5 + * 22 Usage of HTTP Authentication + * https://tools.ietf.org/html/rfc3261#section-22 + * 22.1 Framework + * https://tools.ietf.org/html/rfc3261#section-22.1 + * 22.2 User-to-User Authentication + * https://tools.ietf.org/html/rfc3261#section-22.2 + * 22.3 Proxy-to-User Authentication + * https://tools.ietf.org/html/rfc3261#section-22.3 + * + * FIXME: This "guard for and retry the request with credentials" + * implementation is not complete and at best minimally passable. + * @param response - The incoming response to guard. + * @param dialog - If defined, the dialog within which the response was received. + * @returns True if the program execution is to continue in the branch in question. + * Otherwise the request is retried with credentials and current request processing must stop. + */ + authenticationGuard(message, dialog) { + const statusCode = message.statusCode; + if (!statusCode) { + throw new Error("Response status code undefined."); + } + // If a 401 (Unauthorized) or 407 (Proxy Authentication Required) + // response is received, the UAC SHOULD follow the authorization + // procedures of Section 22.2 and Section 22.3 to retry the request with + // credentials. + // https://tools.ietf.org/html/rfc3261#section-8.1.3.5 + if (statusCode !== 401 && statusCode !== 407) { + return true; + } + // Get and parse the appropriate WWW-Authenticate or Proxy-Authenticate header. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let challenge; + let authorizationHeaderName; + if (statusCode === 401) { + challenge = message.parseHeader("www-authenticate"); + authorizationHeaderName = "authorization"; + } + else { + challenge = message.parseHeader("proxy-authenticate"); + authorizationHeaderName = "proxy-authorization"; + } + // Verify it seems a valid challenge. + if (!challenge) { + this.logger.warn(statusCode + " with wrong or missing challenge, cannot authenticate"); + return true; + } + // Avoid infinite authentications. + if (this.challenged && (this.stale || challenge.stale !== true)) { + this.logger.warn(statusCode + " apparently in authentication loop, cannot authenticate"); + return true; + } + // Get credentials. + if (!this.credentials) { + this.credentials = this.core.configuration.authenticationFactory(); + if (!this.credentials) { + this.logger.warn("Unable to obtain credentials, cannot authenticate"); + return true; + } + } + // Verify that the challenge is really valid. + if (!this.credentials.authenticate(this.message, challenge)) { + return true; + } + this.challenged = true; + if (challenge.stale) { + this.stale = true; + } + // If response to out of dialog request, assume incrementing the CSeq will suffice. + let cseq = (this.message.cseq += 1); + // If response to in dialog request, get a valid next CSeq number. + if (dialog && dialog.localSequenceNumber) { + dialog.incrementLocalSequenceNumber(); + cseq = this.message.cseq = dialog.localSequenceNumber; + } + this.message.setHeader("cseq", cseq + " " + this.message.method); + this.message.setHeader(authorizationHeaderName, this.credentials.toString()); + // Calling init (again) will swap out our existing client transaction with a new one. + // FIXME: HACK: An assumption is being made here that there is nothing that needs to + // be cleaned up beyond the client transaction which is being replaced. For example, + // it is assumed that no early dialogs have been created. + this.init(); + return false; + } + /** + * 8.1.3.1 Transaction Layer Errors + * In some cases, the response returned by the transaction layer will + * not be a SIP message, but rather a transaction layer error. When a + * timeout error is received from the transaction layer, it MUST be + * treated as if a 408 (Request Timeout) status code has been received. + * If a fatal transport error is reported by the transport layer + * (generally, due to fatal ICMP errors in UDP or connection failures in + * TCP), the condition MUST be treated as a 503 (Service Unavailable) + * status code. + * https://tools.ietf.org/html/rfc3261#section-8.1.3.1 + */ + onRequestTimeout() { + this.logger.warn("User agent client request timed out. Generating internal 408 Request Timeout."); + const message = new _messages__WEBPACK_IMPORTED_MODULE_3__.IncomingResponseMessage(); + message.statusCode = 408; + message.reasonPhrase = "Request Timeout"; + this.receiveResponse(message); + return; + } + /** + * 8.1.3.1 Transaction Layer Errors + * In some cases, the response returned by the transaction layer will + * not be a SIP message, but rather a transaction layer error. When a + * timeout error is received from the transaction layer, it MUST be + * treated as if a 408 (Request Timeout) status code has been received. + * If a fatal transport error is reported by the transport layer + * (generally, due to fatal ICMP errors in UDP or connection failures in + * TCP), the condition MUST be treated as a 503 (Service Unavailable) + * status code. + * https://tools.ietf.org/html/rfc3261#section-8.1.3.1 + * @param error - Transport error + */ + onTransportError(error) { + this.logger.error(error.message); + this.logger.error("User agent client request transport error. Generating internal 503 Service Unavailable."); + const message = new _messages__WEBPACK_IMPORTED_MODULE_3__.IncomingResponseMessage(); + message.statusCode = 503; + message.reasonPhrase = "Service Unavailable"; + this.receiveResponse(message); + } + /** + * Receive a response from the transaction layer. + * @param message - Incoming response message. + */ + receiveResponse(message) { + if (!this.authenticationGuard(message)) { + return; + } + const statusCode = message.statusCode ? message.statusCode.toString() : ""; + if (!statusCode) { + throw new Error("Response status code undefined."); + } + switch (true) { + case /^100$/.test(statusCode): + if (this.delegate && this.delegate.onTrying) { + this.delegate.onTrying({ message }); + } + break; + case /^1[0-9]{2}$/.test(statusCode): + if (this.delegate && this.delegate.onProgress) { + this.delegate.onProgress({ message }); + } + break; + case /^2[0-9]{2}$/.test(statusCode): + if (this.delegate && this.delegate.onAccept) { + this.delegate.onAccept({ message }); + } + break; + case /^3[0-9]{2}$/.test(statusCode): + if (this.delegate && this.delegate.onRedirect) { + this.delegate.onRedirect({ message }); + } + break; + case /^[4-6][0-9]{2}$/.test(statusCode): + if (this.delegate && this.delegate.onReject) { + this.delegate.onReject({ message }); + } + break; + default: + throw new Error(`Invalid status code ${statusCode}`); + } + } + init() { + // We are the transaction user. + const user = { + loggerFactory: this.loggerFactory, + onRequestTimeout: () => this.onRequestTimeout(), + onStateChange: (newState) => { + if (newState === _transactions__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated) { + // Remove the terminated transaction from the core. + // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.core.userAgentClients.delete(userAgentClientId); + // FIXME: HACK: Our transaction may have been swapped out with a new one + // post authentication (see above), so make sure to only to dispose of + // ourselves if this terminating transaction is our current transaction. + // eslint-disable-next-line @typescript-eslint/no-use-before-define + if (transaction === this._transaction) { + this.dispose(); + } + } + }, + onTransportError: (error) => this.onTransportError(error), + receiveResponse: (message) => this.receiveResponse(message) + }; + // Create a new transaction with us as the user. + const transaction = new this.transactionConstructor(this.message, this.core.transport, user); + this._transaction = transaction; + // Add the new transaction to the core. + const userAgentClientId = transaction.id + transaction.request.method; + this.core.userAgentClients.set(userAgentClientId, this); + } +} + + +/***/ }), +/* 63 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TransactionState": () => (/* binding */ TransactionState) +/* harmony export */ }); +/** + * Transaction state. + * @public + */ +var TransactionState; +(function (TransactionState) { + TransactionState["Accepted"] = "Accepted"; + TransactionState["Calling"] = "Calling"; + TransactionState["Completed"] = "Completed"; + TransactionState["Confirmed"] = "Confirmed"; + TransactionState["Proceeding"] = "Proceeding"; + TransactionState["Terminated"] = "Terminated"; + TransactionState["Trying"] = "Trying"; +})(TransactionState || (TransactionState = {})); + + +/***/ }), +/* 64 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NonInviteClientTransaction": () => (/* binding */ NonInviteClientTransaction) +/* harmony export */ }); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(36); +/* harmony import */ var _client_transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65); +/* harmony import */ var _transaction_state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63); + + + +/** + * Non-INVITE Client Transaction. + * @remarks + * Non-INVITE transactions do not make use of ACK. + * They are simple request-response interactions. + * https://tools.ietf.org/html/rfc3261#section-17.1.2 + * @public + */ +class NonInviteClientTransaction extends _client_transaction__WEBPACK_IMPORTED_MODULE_0__.ClientTransaction { + /** + * Constructor + * Upon construction, the outgoing request's Via header is updated by calling `setViaHeader`. + * Then `toString` is called on the outgoing request and the message is sent via the transport. + * After construction the transaction will be in the "calling" state and the transaction id + * will equal the branch parameter set in the Via header of the outgoing request. + * https://tools.ietf.org/html/rfc3261#section-17.1.2 + * @param request - The outgoing Non-INVITE request. + * @param transport - The transport. + * @param user - The transaction user. + */ + constructor(request, transport, user) { + super(request, transport, user, _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying, "sip.transaction.nict"); + // FIXME: Timer E for unreliable transports not implemented. + // + // The "Trying" state is entered when the TU initiates a new client + // transaction with a request. When entering this state, the client + // transaction SHOULD set timer F to fire in 64*T1 seconds. The request + // MUST be passed to the transport layer for transmission. + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + this.F = setTimeout(() => this.timerF(), _timers__WEBPACK_IMPORTED_MODULE_2__.Timers.TIMER_F); + this.send(request.toString()).catch((error) => { + this.logTransportError(error, "Failed to send initial outgoing request."); + }); + } + /** + * Destructor. + */ + dispose() { + if (this.F) { + clearTimeout(this.F); + this.F = undefined; + } + if (this.K) { + clearTimeout(this.K); + this.K = undefined; + } + super.dispose(); + } + /** Transaction kind. Deprecated. */ + get kind() { + return "nict"; + } + /** + * Handler for incoming responses from the transport which match this transaction. + * @param response - The incoming response. + */ + receiveResponse(response) { + const statusCode = response.statusCode; + if (!statusCode || statusCode < 100 || statusCode > 699) { + throw new Error(`Invalid status code ${statusCode}`); + } + switch (this.state) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying: + // If a provisional response is received while in the "Trying" state, the + // response MUST be passed to the TU, and then the client transaction + // SHOULD move to the "Proceeding" state. + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + if (statusCode >= 100 && statusCode <= 199) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding); + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + // If a final response (status codes 200-699) is received while in the + // "Trying" state, the response MUST be passed to the TU, and the + // client transaction MUST transition to the "Completed" state. + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + if (statusCode >= 200 && statusCode <= 699) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + if (statusCode === 408) { + this.onRequestTimeout(); + return; + } + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + // If a provisional response is received while in the "Proceeding" state, + // the response MUST be passed to the TU. (From Figure 6) + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + if (statusCode >= 100 && statusCode <= 199) { + if (this.user.receiveResponse) { + return this.user.receiveResponse(response); + } + } + // If a final response (status codes 200-699) is received while in the + // "Proceeding" state, the response MUST be passed to the TU, and the + // client transaction MUST transition to the "Completed" state. + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + if (statusCode >= 200 && statusCode <= 699) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + if (statusCode === 408) { + this.onRequestTimeout(); + return; + } + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + // The "Completed" state exists to buffer any additional response + // retransmissions that may be received (which is why the client + // transaction remains there only for unreliable transports). + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + return; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + // For good measure just absorb additional response retransmissions. + return; + default: + throw new Error(`Invalid state ${this.state}`); + } + const message = `Non-INVITE client transaction received unexpected ${statusCode} response while in state ${this.state}.`; + this.logger.warn(message); + return; + } + /** + * The client transaction SHOULD inform the TU that a transport failure has occurred, + * and the client transaction SHOULD transition directly to the "Terminated" state. + * The TU will handle the fail over mechanisms described in [4]. + * https://tools.ietf.org/html/rfc3261#section-17.1.4 + * @param error - Transport error + */ + onTransportError(error) { + if (this.user.onTransportError) { + this.user.onTransportError(error); + } + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated, true); + } + /** For logging. */ + typeToString() { + return "non-INVITE client transaction"; + } + /** + * Execute a state transition. + * @param newState - New state. + */ + stateTransition(newState, dueToTransportError = false) { + // Assert valid state transitions. + const invalidStateTransition = () => { + throw new Error(`Invalid state transition from ${this.state} to ${newState}`); + }; + switch (newState) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying: + invalidStateTransition(); + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying && this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying && + this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding && + this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + if (!dueToTransportError) { + invalidStateTransition(); + } + } + break; + default: + invalidStateTransition(); + } + // Once the client transaction enters the "Completed" state, it MUST set + // Timer K to fire in T4 seconds for unreliable transports, and zero + // seconds for reliable transports The "Completed" state exists to + // buffer any additional response retransmissions that may be received + // (which is why the client transaction remains there only for unreliable transports). + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + if (this.F) { + clearTimeout(this.F); + this.F = undefined; + } + this.K = setTimeout(() => this.timerK(), _timers__WEBPACK_IMPORTED_MODULE_2__.Timers.TIMER_K); + } + // Once the transaction is in the terminated state, it MUST be destroyed immediately. + // https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated) { + this.dispose(); + } + // Update state. + this.setState(newState); + } + /** + * If Timer F fires while the client transaction is still in the + * "Trying" state, the client transaction SHOULD inform the TU about the + * timeout, and then it SHOULD enter the "Terminated" state. + * If timer F fires while in the "Proceeding" state, the TU MUST be informed of + * a timeout, and the client transaction MUST transition to the terminated state. + * https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + */ + timerF() { + this.logger.debug(`Timer F expired for non-INVITE client transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying || this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + this.onRequestTimeout(); + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } + /** + * If Timer K fires while in this (COMPLETED) state, the client transaction + * MUST transition to the "Terminated" state. + * https://tools.ietf.org/html/rfc3261#section-17.1.2.2 + */ + timerK() { + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } +} + + +/***/ }), +/* 65 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClientTransaction": () => (/* binding */ ClientTransaction) +/* harmony export */ }); +/* harmony import */ var _transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66); + +/** + * Client Transaction. + * @remarks + * The client transaction provides its functionality through the + * maintenance of a state machine. + * + * The TU communicates with the client transaction through a simple + * interface. When the TU wishes to initiate a new transaction, it + * creates a client transaction and passes it the SIP request to send + * and an IP address, port, and transport to which to send it. The + * client transaction begins execution of its state machine. Valid + * responses are passed up to the TU from the client transaction. + * https://tools.ietf.org/html/rfc3261#section-17.1 + * @public + */ +class ClientTransaction extends _transaction__WEBPACK_IMPORTED_MODULE_0__.Transaction { + constructor(_request, transport, user, state, loggerCategory) { + super(transport, user, ClientTransaction.makeId(_request), state, loggerCategory); + this._request = _request; + this.user = user; + // The Via header field indicates the transport used for the transaction + // and identifies the location where the response is to be sent. A Via + // header field value is added only after the transport that will be + // used to reach the next hop has been selected (which may involve the + // usage of the procedures in [4]). + // https://tools.ietf.org/html/rfc3261#section-8.1.1.7 + _request.setViaHeader(this.id, transport.protocol); + } + static makeId(request) { + if (request.method === "CANCEL") { + if (!request.branch) { + throw new Error("Outgoing CANCEL request without a branch."); + } + return request.branch; + } + else { + return "z9hG4bK" + Math.floor(Math.random() * 10000000); + } + } + /** The outgoing request the transaction handling. */ + get request() { + return this._request; + } + /** + * A 408 to non-INVITE will always arrive too late to be useful ([3]), + * The client already has full knowledge of the timeout. The only + * information this message would convey is whether or not the server + * believed the transaction timed out. However, with the current design + * of the NIT, a client cannot do anything with this knowledge. Thus, + * the 408 is simply wasting network resources and contributes to the + * response bombardment illustrated in [3]. + * https://tools.ietf.org/html/rfc4320#section-4.1 + */ + onRequestTimeout() { + if (this.user.onRequestTimeout) { + this.user.onRequestTimeout(); + } + } +} + + +/***/ }), +/* 66 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Transaction": () => (/* binding */ Transaction) +/* harmony export */ }); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67); + +/** + * Transaction. + * @remarks + * SIP is a transactional protocol: interactions between components take + * place in a series of independent message exchanges. Specifically, a + * SIP transaction consists of a single request and any responses to + * that request, which include zero or more provisional responses and + * one or more final responses. In the case of a transaction where the + * request was an INVITE (known as an INVITE transaction), the + * transaction also includes the ACK only if the final response was not + * a 2xx response. If the response was a 2xx, the ACK is not considered + * part of the transaction. + * https://tools.ietf.org/html/rfc3261#section-17 + * @public + */ +class Transaction { + constructor(_transport, _user, _id, _state, loggerCategory) { + this._transport = _transport; + this._user = _user; + this._id = _id; + this._state = _state; + this.listeners = new Array(); + this.logger = _user.loggerFactory.getLogger(loggerCategory, _id); + this.logger.debug(`Constructing ${this.typeToString()} with id ${this.id}.`); + } + /** + * Destructor. + * Once the transaction is in the "terminated" state, it is destroyed + * immediately and there is no need to call `dispose`. However, if a + * transaction needs to be ended prematurely, the transaction user may + * do so by calling this method (for example, perhaps the UA is shutting down). + * No state transition will occur upon calling this method, all outstanding + * transmission timers will be cancelled, and use of the transaction after + * calling `dispose` is undefined. + */ + dispose() { + this.logger.debug(`Destroyed ${this.typeToString()} with id ${this.id}.`); + } + /** Transaction id. */ + get id() { + return this._id; + } + /** Transaction kind. Deprecated. */ + get kind() { + throw new Error("Invalid kind."); + } + /** Transaction state. */ + get state() { + return this._state; + } + /** Transaction transport. */ + get transport() { + return this._transport; + } + /** + * Sets up a function that will be called whenever the transaction state changes. + * @param listener - Callback function. + * @param options - An options object that specifies characteristics about the listener. + * If once true, indicates that the listener should be invoked at most once after being added. + * If once true, the listener would be automatically removed when invoked. + */ + addStateChangeListener(listener, options) { + const onceWrapper = () => { + this.removeStateChangeListener(onceWrapper); + listener(); + }; + (options === null || options === void 0 ? void 0 : options.once) === true ? this.listeners.push(onceWrapper) : this.listeners.push(listener); + } + /** + * This is currently public so tests may spy on it. + * @internal + */ + notifyStateChangeListeners() { + this.listeners.slice().forEach((listener) => listener()); + } + /** + * Removes a listener previously registered with addStateListener. + * @param listener - Callback function. + */ + removeStateChangeListener(listener) { + this.listeners = this.listeners.filter((l) => l !== listener); + } + logTransportError(error, message) { + this.logger.error(error.message); + this.logger.error(`Transport error occurred in ${this.typeToString()} with id ${this.id}.`); + this.logger.error(message); + } + /** + * Pass message to transport for transmission. If transport fails, + * the transaction user is notified by callback to onTransportError(). + * @returns + * Rejects with `TransportError` if transport fails. + */ + send(message) { + return this.transport.send(message).catch((error) => { + // If the transport rejects, it SHOULD reject with a TransportError. + // But the transport may be external code, so we are careful + // make sure we convert it to a TransportError if need be. + if (error instanceof _exceptions__WEBPACK_IMPORTED_MODULE_0__.TransportError) { + this.onTransportError(error); + throw error; + } + let transportError; + if (error && typeof error.message === "string") { + transportError = new _exceptions__WEBPACK_IMPORTED_MODULE_0__.TransportError(error.message); + } + else { + transportError = new _exceptions__WEBPACK_IMPORTED_MODULE_0__.TransportError(); + } + this.onTransportError(transportError); + throw transportError; + }); + } + setState(state) { + this.logger.debug(`State change to "${state}" on ${this.typeToString()} with id ${this.id}.`); + this._state = state; + if (this._user.onStateChange) { + this._user.onStateChange(state); + } + this.notifyStateChangeListeners(); + } + typeToString() { + return "UnknownType"; + } +} + + +/***/ }), +/* 67 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "TransportError": () => (/* binding */ TransportError) +/* harmony export */ }); +/* harmony import */ var _exception__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); + +/** + * Transport error. + * @public + */ +class TransportError extends _exception__WEBPACK_IMPORTED_MODULE_0__.Exception { + constructor(message) { + super(message ? message : "Unspecified transport error."); + } +} + + +/***/ }), +/* 68 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "InviteClientTransaction": () => (/* binding */ InviteClientTransaction) +/* harmony export */ }); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(36); +/* harmony import */ var _client_transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65); +/* harmony import */ var _transaction_state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63); + + + +/** + * INVITE Client Transaction. + * @remarks + * The INVITE transaction consists of a three-way handshake. The client + * transaction sends an INVITE, the server transaction sends responses, + * and the client transaction sends an ACK. + * https://tools.ietf.org/html/rfc3261#section-17.1.1 + * @public + */ +class InviteClientTransaction extends _client_transaction__WEBPACK_IMPORTED_MODULE_0__.ClientTransaction { + /** + * Constructor. + * Upon construction, the outgoing request's Via header is updated by calling `setViaHeader`. + * Then `toString` is called on the outgoing request and the message is sent via the transport. + * After construction the transaction will be in the "calling" state and the transaction id + * will equal the branch parameter set in the Via header of the outgoing request. + * https://tools.ietf.org/html/rfc3261#section-17.1.1 + * @param request - The outgoing INVITE request. + * @param transport - The transport. + * @param user - The transaction user. + */ + constructor(request, transport, user) { + super(request, transport, user, _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling, "sip.transaction.ict"); + /** + * Map of 2xx to-tag to ACK. + * If value is not undefined, value is the ACK which was sent. + * If key exists but value is undefined, a 2xx was received but the ACK not yet sent. + * Otherwise, a 2xx was not (yet) received for this transaction. + */ + this.ackRetransmissionCache = new Map(); + // FIXME: Timer A for unreliable transport not implemented + // + // If an unreliable transport is being used, the client transaction + // MUST start timer A with a value of T1. If a reliable transport is being used, + // the client transaction SHOULD NOT start timer A (Timer A controls request retransmissions). + // For any transport, the client transaction MUST start timer B with a value + // of 64*T1 seconds (Timer B controls transaction timeouts). + // https://tools.ietf.org/html/rfc3261#section-17.1.1.2 + // + // While not spelled out in the RFC, Timer B is the maximum amount of time that a sender + // will wait for an INVITE message to be acknowledged (a SIP response message is received). + // So Timer B should be cleared when the transaction state proceeds from "Calling". + this.B = setTimeout(() => this.timerB(), _timers__WEBPACK_IMPORTED_MODULE_2__.Timers.TIMER_B); + this.send(request.toString()).catch((error) => { + this.logTransportError(error, "Failed to send initial outgoing request."); + }); + } + /** + * Destructor. + */ + dispose() { + if (this.B) { + clearTimeout(this.B); + this.B = undefined; + } + if (this.D) { + clearTimeout(this.D); + this.D = undefined; + } + if (this.M) { + clearTimeout(this.M); + this.M = undefined; + } + super.dispose(); + } + /** Transaction kind. Deprecated. */ + get kind() { + return "ict"; + } + /** + * ACK a 2xx final response. + * + * The transaction includes the ACK only if the final response was not a 2xx response (the + * transaction will generate and send the ACK to the transport automagically). If the + * final response was a 2xx, the ACK is not considered part of the transaction (the + * transaction user needs to generate and send the ACK). + * + * This library is not strictly RFC compliant with regard to ACK handling for 2xx final + * responses. Specifically, retransmissions of ACKs to a 2xx final responses is handled + * by the transaction layer (instead of the UAC core). The "standard" approach is for + * the UAC core to receive all 2xx responses and manage sending ACK retransmissions to + * the transport directly. Herein the transaction layer manages sending ACKs to 2xx responses + * and any retransmissions of those ACKs as needed. + * + * @param ack - The outgoing ACK request. + */ + ackResponse(ack) { + const toTag = ack.toTag; + if (!toTag) { + throw new Error("To tag undefined."); + } + const id = "z9hG4bK" + Math.floor(Math.random() * 10000000); + ack.setViaHeader(id, this.transport.protocol); + this.ackRetransmissionCache.set(toTag, ack); // Add to ACK retransmission cache + this.send(ack.toString()).catch((error) => { + this.logTransportError(error, "Failed to send ACK to 2xx response."); + }); + } + /** + * Handler for incoming responses from the transport which match this transaction. + * @param response - The incoming response. + */ + receiveResponse(response) { + const statusCode = response.statusCode; + if (!statusCode || statusCode < 100 || statusCode > 699) { + throw new Error(`Invalid status code ${statusCode}`); + } + switch (this.state) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling: + // If the client transaction receives a provisional response while in + // the "Calling" state, it transitions to the "Proceeding" state. In the + // "Proceeding" state, the client transaction SHOULD NOT retransmit the + // request any longer. Furthermore, the provisional response MUST be + // passed to the TU. Any further provisional responses MUST be passed + // up to the TU while in the "Proceeding" state. + // https://tools.ietf.org/html/rfc3261#section-17.1.1.2 + if (statusCode >= 100 && statusCode <= 199) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding); + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + // When a 2xx response is received while in either the "Calling" or + // "Proceeding" states, the client transaction MUST transition to + // the "Accepted" state... The 2xx response MUST be passed up to the TU. + // The client transaction MUST NOT generate an ACK to the 2xx response -- its + // handling is delegated to the TU. A UAC core will send an ACK to + // the 2xx response using a new transaction. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (statusCode >= 200 && statusCode <= 299) { + this.ackRetransmissionCache.set(response.toTag, undefined); // Prime the ACK cache + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted); + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + // When in either the "Calling" or "Proceeding" states, reception of + // a response with status code from 300-699 MUST cause the client + // transaction to transition to "Completed". The client transaction + // MUST pass the received response up to the TU, and the client + // transaction MUST generate an ACK request, even if the transport is + // reliable (guidelines for constructing the ACK from the response + // are given in Section 17.1.1.3), and then pass the ACK to the + // transport layer for transmission. The ACK MUST be sent to the + // same address, port, and transport to which the original request was sent. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (statusCode >= 300 && statusCode <= 699) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + this.ack(response); + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + // In the "Proceeding" state, the client transaction SHOULD NOT retransmit the + // request any longer. Furthermore, the provisional response MUST be + // passed to the TU. Any further provisional responses MUST be passed + // up to the TU while in the "Proceeding" state. + // https://tools.ietf.org/html/rfc3261#section-17.1.1.2 + if (statusCode >= 100 && statusCode <= 199) { + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + // When a 2xx response is received while in either the "Calling" or "Proceeding" states, + // the client transaction MUST transition to the "Accepted" state... + // The 2xx response MUST be passed up to the TU. The client + // transaction MUST NOT generate an ACK to the 2xx response -- its + // handling is delegated to the TU. A UAC core will send an ACK to + // the 2xx response using a new transaction. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (statusCode >= 200 && statusCode <= 299) { + this.ackRetransmissionCache.set(response.toTag, undefined); // Prime the ACK cache + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted); + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + // When in either the "Calling" or "Proceeding" states, reception of + // a response with status code from 300-699 MUST cause the client + // transaction to transition to "Completed". The client transaction + // MUST pass the received response up to the TU, and the client + // transaction MUST generate an ACK request, even if the transport is + // reliable (guidelines for constructing the ACK from the response + // are given in Section 17.1.1.3), and then pass the ACK to the + // transport layer for transmission. The ACK MUST be sent to the + // same address, port, and transport to which the original request was sent. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (statusCode >= 300 && statusCode <= 699) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + this.ack(response); + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted: + // The purpose of the "Accepted" state is to allow the client + // transaction to continue to exist to receive, and pass to the TU, + // any retransmissions of the 2xx response and any additional 2xx + // responses from other branches of the INVITE if it forked + // downstream. Timer M reflects the amount of time that the + // transaction user will wait for such messages. + // + // Any 2xx responses that match this client transaction and that are + // received while in the "Accepted" state MUST be passed up to the + // TU. The client transaction MUST NOT generate an ACK to the 2xx + // response. The client transaction takes no further action. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (statusCode >= 200 && statusCode <= 299) { + // NOTE: This implementation herein is intentionally not RFC compliant. + // While the first 2xx response for a given branch is passed up to the TU, + // retransmissions of 2xx responses are absorbed and the ACK associated + // with the original response is resent. This approach is taken because + // our current transaction users are not currently in a good position to + // deal with 2xx retransmission. This SHOULD NOT cause any compliance issues - ;) + // + // If we don't have a cache hit, pass the response to the TU. + if (!this.ackRetransmissionCache.has(response.toTag)) { + this.ackRetransmissionCache.set(response.toTag, undefined); // Prime the ACK cache + if (this.user.receiveResponse) { + this.user.receiveResponse(response); + } + return; + } + // If we have a cache hit, try pulling the ACK from cache and retransmitting it. + const ack = this.ackRetransmissionCache.get(response.toTag); + if (ack) { + this.send(ack.toString()).catch((error) => { + this.logTransportError(error, "Failed to send retransmission of ACK to 2xx response."); + }); + return; + } + // If an ACK was not found in cache then we have received a retransmitted 2xx + // response before the TU responded to the original response (we don't have an ACK yet). + // So discard this response under the assumption that the TU will eventually + // get us a ACK for the original response. + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + // Any retransmissions of a response with status code 300-699 that + // are received while in the "Completed" state MUST cause the ACK to + // be re-passed to the transport layer for retransmission, but the + // newly received response MUST NOT be passed up to the TU. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (statusCode >= 300 && statusCode <= 699) { + this.ack(response); + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + break; + default: + throw new Error(`Invalid state ${this.state}`); + } + // Any response received that does not match an existing client + // transaction state machine is simply dropped. (Implementations are, + // of course, free to log or do other implementation-specific things + // with such responses, but the implementer should be sure to consider + // the impact of large numbers of malicious stray responses.) + // https://tools.ietf.org/html/rfc6026#section-7.2 + const message = `Received unexpected ${statusCode} response while in state ${this.state}.`; + this.logger.warn(message); + return; + } + /** + * The client transaction SHOULD inform the TU that a transport failure + * has occurred, and the client transaction SHOULD transition directly + * to the "Terminated" state. The TU will handle the failover + * mechanisms described in [4]. + * https://tools.ietf.org/html/rfc3261#section-17.1.4 + * @param error - The error. + */ + onTransportError(error) { + if (this.user.onTransportError) { + this.user.onTransportError(error); + } + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated, true); + } + /** For logging. */ + typeToString() { + return "INVITE client transaction"; + } + ack(response) { + // The ACK request constructed by the client transaction MUST contain + // values for the Call-ID, From, and Request-URI that are equal to the + // values of those header fields in the request passed to the transport + // by the client transaction (call this the "original request"). The To + // header field in the ACK MUST equal the To header field in the + // response being acknowledged, and therefore will usually differ from + // the To header field in the original request by the addition of the + // tag parameter. The ACK MUST contain a single Via header field, and + // this MUST be equal to the top Via header field of the original + // request. The CSeq header field in the ACK MUST contain the same + // value for the sequence number as was present in the original request, + // but the method parameter MUST be equal to "ACK". + // + // If the INVITE request whose response is being acknowledged had Route + // header fields, those header fields MUST appear in the ACK. This is + // to ensure that the ACK can be routed properly through any downstream + // stateless proxies. + // https://tools.ietf.org/html/rfc3261#section-17.1.1.3 + const ruri = this.request.ruri; + const callId = this.request.callId; + const cseq = this.request.cseq; + const from = this.request.getHeader("from"); + const to = response.getHeader("to"); + const via = this.request.getHeader("via"); + const route = this.request.getHeader("route"); + if (!from) { + throw new Error("From undefined."); + } + if (!to) { + throw new Error("To undefined."); + } + if (!via) { + throw new Error("Via undefined."); + } + let ack = `ACK ${ruri} SIP/2.0\r\n`; + if (route) { + ack += `Route: ${route}\r\n`; + } + ack += `Via: ${via}\r\n`; + ack += `To: ${to}\r\n`; + ack += `From: ${from}\r\n`; + ack += `Call-ID: ${callId}\r\n`; + ack += `CSeq: ${cseq} ACK\r\n`; + ack += `Max-Forwards: 70\r\n`; + ack += `Content-Length: 0\r\n\r\n`; + // TOOO: "User-Agent" header + this.send(ack).catch((error) => { + this.logTransportError(error, "Failed to send ACK to non-2xx response."); + }); + return; + } + /** + * Execute a state transition. + * @param newState - New state. + */ + stateTransition(newState, dueToTransportError = false) { + // Assert valid state transitions. + const invalidStateTransition = () => { + throw new Error(`Invalid state transition from ${this.state} to ${newState}`); + }; + switch (newState) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling: + invalidStateTransition(); + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted: + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling && this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling && + this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted && + this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + if (!dueToTransportError) { + invalidStateTransition(); + } + } + break; + default: + invalidStateTransition(); + } + // While not spelled out in the RFC, Timer B is the maximum amount of time that a sender + // will wait for an INVITE message to be acknowledged (a SIP response message is received). + // So Timer B should be cleared when the transaction state proceeds from "Calling". + if (this.B) { + clearTimeout(this.B); + this.B = undefined; + } + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + // Timers have no effect on "Proceeding" state. + // In the "Proceeding" state, the client transaction + // SHOULD NOT retransmit the request any longer. + // https://tools.ietf.org/html/rfc3261#section-17.1.1.2 + } + // The client transaction MUST start Timer D when it enters the "Completed" state + // for any reason, with a value of at least 32 seconds for unreliable transports, + // and a value of zero seconds for reliable transports. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + this.D = setTimeout(() => this.timerD(), _timers__WEBPACK_IMPORTED_MODULE_2__.Timers.TIMER_D); + } + // The client transaction MUST transition to the "Accepted" state, + // and Timer M MUST be started with a value of 64*T1. + // https://tools.ietf.org/html/rfc6026#section-8.4 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted) { + this.M = setTimeout(() => this.timerM(), _timers__WEBPACK_IMPORTED_MODULE_2__.Timers.TIMER_M); + } + // Once the transaction is in the "Terminated" state, it MUST be destroyed immediately. + // https://tools.ietf.org/html/rfc6026#section-8.7 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated) { + this.dispose(); + } + // Update state. + this.setState(newState); + } + /** + * When timer A fires, the client transaction MUST retransmit the + * request by passing it to the transport layer, and MUST reset the + * timer with a value of 2*T1. + * When timer A fires 2*T1 seconds later, the request MUST be + * retransmitted again (assuming the client transaction is still in this + * state). This process MUST continue so that the request is + * retransmitted with intervals that double after each transmission. + * These retransmissions SHOULD only be done while the client + * transaction is in the "Calling" state. + * https://tools.ietf.org/html/rfc3261#section-17.1.1.2 + */ + timerA() { + // TODO + } + /** + * If the client transaction is still in the "Calling" state when timer + * B fires, the client transaction SHOULD inform the TU that a timeout + * has occurred. The client transaction MUST NOT generate an ACK. + * https://tools.ietf.org/html/rfc3261#section-17.1.1.2 + */ + timerB() { + this.logger.debug(`Timer B expired for INVITE client transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Calling) { + this.onRequestTimeout(); + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } + /** + * If Timer D fires while the client transaction is in the "Completed" state, + * the client transaction MUST move to the "Terminated" state. + * https://tools.ietf.org/html/rfc6026#section-8.4 + */ + timerD() { + this.logger.debug(`Timer D expired for INVITE client transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } + /** + * If Timer M fires while the client transaction is in the "Accepted" + * state, the client transaction MUST move to the "Terminated" state. + * https://tools.ietf.org/html/rfc6026#section-8.4 + */ + timerM() { + this.logger.debug(`Timer M expired for INVITE client transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } +} + + +/***/ }), +/* 69 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dialog": () => (/* binding */ Dialog) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); + +/** + * Dialog. + * @remarks + * A key concept for a user agent is that of a dialog. A dialog + * represents a peer-to-peer SIP relationship between two user agents + * that persists for some time. The dialog facilitates sequencing of + * messages between the user agents and proper routing of requests + * between both of them. The dialog represents a context in which to + * interpret SIP messages. + * https://tools.ietf.org/html/rfc3261#section-12 + * @public + */ +class Dialog { + /** + * Dialog constructor. + * @param core - User agent core. + * @param dialogState - Initial dialog state. + */ + constructor(core, dialogState) { + this.core = core; + this.dialogState = dialogState; + this.core.dialogs.set(this.id, this); + } + /** + * When a UAC receives a response that establishes a dialog, it + * constructs the state of the dialog. This state MUST be maintained + * for the duration of the dialog. + * https://tools.ietf.org/html/rfc3261#section-12.1.2 + * @param outgoingRequestMessage - Outgoing request message for dialog. + * @param incomingResponseMessage - Incoming response message creating dialog. + */ + static initialDialogStateForUserAgentClient(outgoingRequestMessage, incomingResponseMessage) { + // If the request was sent over TLS, and the Request-URI contained a + // SIPS URI, the "secure" flag is set to TRUE. + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + const secure = false; // FIXME: Currently no support for TLS. + // The route set MUST be set to the list of URIs in the Record-Route + // header field from the response, taken in reverse order and preserving + // all URI parameters. If no Record-Route header field is present in + // the response, the route set MUST be set to the empty set. This route + // set, even if empty, overrides any pre-existing route set for future + // requests in this dialog. The remote target MUST be set to the URI + // from the Contact header field of the response. + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + const routeSet = incomingResponseMessage.getHeaders("record-route").reverse(); + // When a UAS responds to a request with a response that establishes a + // dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route + // header field values from the request into the response (including the + // URIs, URI parameters, and any Record-Route header field parameters, + // whether they are known or unknown to the UAS) and MUST maintain the + // order of those values. The UAS MUST add a Contact header field to + // the response. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const contact = incomingResponseMessage.parseHeader("contact"); + if (!contact) { + // TODO: Review to make sure this will never happen + throw new Error("Contact undefined."); + } + if (!(contact instanceof _messages__WEBPACK_IMPORTED_MODULE_0__.NameAddrHeader)) { + throw new Error("Contact not instance of NameAddrHeader."); + } + const remoteTarget = contact.uri; + // The local sequence number MUST be set to the value of the sequence + // number in the CSeq header field of the request. The remote sequence + // number MUST be empty (it is established when the remote UA sends a + // request within the dialog). The call identifier component of the + // dialog ID MUST be set to the value of the Call-ID in the request. + // The local tag component of the dialog ID MUST be set to the tag in + // the From field in the request, and the remote tag component of the + // dialog ID MUST be set to the tag in the To field of the response. A + // UAC MUST be prepared to receive a response without a tag in the To + // field, in which case the tag is considered to have a value of null. + // + // This is to maintain backwards compatibility with RFC 2543, which + // did not mandate To tags. + // + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + const localSequenceNumber = outgoingRequestMessage.cseq; + const remoteSequenceNumber = undefined; + const callId = outgoingRequestMessage.callId; + const localTag = outgoingRequestMessage.fromTag; + const remoteTag = incomingResponseMessage.toTag; + if (!callId) { + // TODO: Review to make sure this will never happen + throw new Error("Call id undefined."); + } + if (!localTag) { + // TODO: Review to make sure this will never happen + throw new Error("From tag undefined."); + } + if (!remoteTag) { + // TODO: Review to make sure this will never happen + throw new Error("To tag undefined."); // FIXME: No backwards compatibility with RFC 2543 + } + // The remote URI MUST be set to the URI in the To field, and the local + // URI MUST be set to the URI in the From field. + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + if (!outgoingRequestMessage.from) { + // TODO: Review to make sure this will never happen + throw new Error("From undefined."); + } + if (!outgoingRequestMessage.to) { + // TODO: Review to make sure this will never happen + throw new Error("To undefined."); + } + const localURI = outgoingRequestMessage.from.uri; + const remoteURI = outgoingRequestMessage.to.uri; + // A dialog can also be in the "early" state, which occurs when it is + // created with a provisional response, and then transition to the + // "confirmed" state when a 2xx final response arrives. + // https://tools.ietf.org/html/rfc3261#section-12 + if (!incomingResponseMessage.statusCode) { + throw new Error("Incoming response status code undefined."); + } + const early = incomingResponseMessage.statusCode < 200 ? true : false; + const dialogState = { + id: callId + localTag + remoteTag, + early, + callId, + localTag, + remoteTag, + localSequenceNumber, + remoteSequenceNumber, + localURI, + remoteURI, + remoteTarget, + routeSet, + secure + }; + return dialogState; + } + /** + * The UAS then constructs the state of the dialog. This state MUST be + * maintained for the duration of the dialog. + * https://tools.ietf.org/html/rfc3261#section-12.1.1 + * @param incomingRequestMessage - Incoming request message creating dialog. + * @param toTag - Tag in the To field in the response to the incoming request. + */ + static initialDialogStateForUserAgentServer(incomingRequestMessage, toTag, early = false) { + // If the request arrived over TLS, and the Request-URI contained a SIPS + // URI, the "secure" flag is set to TRUE. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const secure = false; // FIXME: Currently no support for TLS. + // The route set MUST be set to the list of URIs in the Record-Route + // header field from the request, taken in order and preserving all URI + // parameters. If no Record-Route header field is present in the + // request, the route set MUST be set to the empty set. This route set, + // even if empty, overrides any pre-existing route set for future + // requests in this dialog. The remote target MUST be set to the URI + // from the Contact header field of the request. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const routeSet = incomingRequestMessage.getHeaders("record-route"); + const contact = incomingRequestMessage.parseHeader("contact"); + if (!contact) { + // TODO: Review to make sure this will never happen + throw new Error("Contact undefined."); + } + if (!(contact instanceof _messages__WEBPACK_IMPORTED_MODULE_0__.NameAddrHeader)) { + throw new Error("Contact not instance of NameAddrHeader."); + } + const remoteTarget = contact.uri; + // The remote sequence number MUST be set to the value of the sequence + // number in the CSeq header field of the request. The local sequence + // number MUST be empty. The call identifier component of the dialog ID + // MUST be set to the value of the Call-ID in the request. The local + // tag component of the dialog ID MUST be set to the tag in the To field + // in the response to the request (which always includes a tag), and the + // remote tag component of the dialog ID MUST be set to the tag from the + // From field in the request. A UAS MUST be prepared to receive a + // request without a tag in the From field, in which case the tag is + // considered to have a value of null. + // + // This is to maintain backwards compatibility with RFC 2543, which + // did not mandate From tags. + // + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const remoteSequenceNumber = incomingRequestMessage.cseq; + const localSequenceNumber = undefined; + const callId = incomingRequestMessage.callId; + const localTag = toTag; + const remoteTag = incomingRequestMessage.fromTag; + // The remote URI MUST be set to the URI in the From field, and the + // local URI MUST be set to the URI in the To field. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const remoteURI = incomingRequestMessage.from.uri; + const localURI = incomingRequestMessage.to.uri; + const dialogState = { + id: callId + localTag + remoteTag, + early, + callId, + localTag, + remoteTag, + localSequenceNumber, + remoteSequenceNumber, + localURI, + remoteURI, + remoteTarget, + routeSet, + secure + }; + return dialogState; + } + /** Destructor. */ + dispose() { + this.core.dialogs.delete(this.id); + } + /** + * A dialog is identified at each UA with a dialog ID, which consists of + * a Call-ID value, a local tag and a remote tag. The dialog ID at each + * UA involved in the dialog is not the same. Specifically, the local + * tag at one UA is identical to the remote tag at the peer UA. The + * tags are opaque tokens that facilitate the generation of unique + * dialog IDs. + * https://tools.ietf.org/html/rfc3261#section-12 + */ + get id() { + return this.dialogState.id; + } + /** + * A dialog can also be in the "early" state, which occurs when it is + * created with a provisional response, and then it transition to the + * "confirmed" state when a 2xx final response received or is sent. + * + * Note: RFC 3261 is concise on when a dialog is "confirmed", but it + * can be a point of confusion if an INVITE dialog is "confirmed" after + * a 2xx is sent or after receiving the ACK for the 2xx response. + * With careful reading it can be inferred a dialog is always is + * "confirmed" when the 2xx is sent (regardless of type of dialog). + * However a INVITE dialog does have additional considerations + * when it is confirmed but an ACK has not yet been received (in + * particular with regard to a callee sending BYE requests). + */ + get early() { + return this.dialogState.early; + } + /** Call identifier component of the dialog id. */ + get callId() { + return this.dialogState.callId; + } + /** Local tag component of the dialog id. */ + get localTag() { + return this.dialogState.localTag; + } + /** Remote tag component of the dialog id. */ + get remoteTag() { + return this.dialogState.remoteTag; + } + /** Local sequence number (used to order requests from the UA to its peer). */ + get localSequenceNumber() { + return this.dialogState.localSequenceNumber; + } + /** Remote sequence number (used to order requests from its peer to the UA). */ + get remoteSequenceNumber() { + return this.dialogState.remoteSequenceNumber; + } + /** Local URI. */ + get localURI() { + return this.dialogState.localURI; + } + /** Remote URI. */ + get remoteURI() { + return this.dialogState.remoteURI; + } + /** Remote target. */ + get remoteTarget() { + return this.dialogState.remoteTarget; + } + /** + * Route set, which is an ordered list of URIs. The route set is the + * list of servers that need to be traversed to send a request to the peer. + */ + get routeSet() { + return this.dialogState.routeSet; + } + /** + * If the request was sent over TLS, and the Request-URI contained + * a SIPS URI, the "secure" flag is set to true. *NOT IMPLEMENTED* + */ + get secure() { + return this.dialogState.secure; + } + /** The user agent core servicing this dialog. */ + get userAgentCore() { + return this.core; + } + /** Confirm the dialog. Only matters if dialog is currently early. */ + confirm() { + this.dialogState.early = false; + } + /** + * Requests sent within a dialog, as any other requests, are atomic. If + * a particular request is accepted by the UAS, all the state changes + * associated with it are performed. If the request is rejected, none + * of the state changes are performed. + * + * Note that some requests, such as INVITEs, affect several pieces of + * state. + * + * https://tools.ietf.org/html/rfc3261#section-12.2.2 + * @param message - Incoming request message within this dialog. + */ + receiveRequest(message) { + // ACK guard. + // By convention, the handling of ACKs is the responsibility + // the particular dialog implementation. For example, see SessionDialog. + // Furthermore, ACKs have same sequence number as the associated INVITE. + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_1__.C.ACK) { + return; + } + // If the remote sequence number was not empty, but the sequence number + // of the request is lower than the remote sequence number, the request + // is out of order and MUST be rejected with a 500 (Server Internal + // Error) response. If the remote sequence number was not empty, and + // the sequence number of the request is greater than the remote + // sequence number, the request is in order. It is possible for the + // CSeq sequence number to be higher than the remote sequence number by + // more than one. This is not an error condition, and a UAS SHOULD be + // prepared to receive and process requests with CSeq values more than + // one higher than the previous received request. The UAS MUST then set + // the remote sequence number to the value of the sequence number in the + // CSeq header field value in the request. + // + // If a proxy challenges a request generated by the UAC, the UAC has + // to resubmit the request with credentials. The resubmitted request + // will have a new CSeq number. The UAS will never see the first + // request, and thus, it will notice a gap in the CSeq number space. + // Such a gap does not represent any error condition. + // + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + if (this.remoteSequenceNumber) { + if (message.cseq <= this.remoteSequenceNumber) { + throw new Error("Out of sequence in dialog request. Did you forget to call sequenceGuard()?"); + } + this.dialogState.remoteSequenceNumber = message.cseq; + } + // If the remote sequence number is empty, it MUST be set to the value + // of the sequence number in the CSeq header field value in the request. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + if (!this.remoteSequenceNumber) { + this.dialogState.remoteSequenceNumber = message.cseq; + } + // When a UAS receives a target refresh request, it MUST replace the + // dialog's remote target URI with the URI from the Contact header field + // in that request, if present. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + // Note: "target refresh request" processing delegated to sub-class. + } + /** + * If the dialog identifier in the 2xx response matches the dialog + * identifier of an existing dialog, the dialog MUST be transitioned to + * the "confirmed" state, and the route set for the dialog MUST be + * recomputed based on the 2xx response using the procedures of Section + * 12.2.1.2. Otherwise, a new dialog in the "confirmed" state MUST be + * constructed using the procedures of Section 12.1.2. + * + * Note that the only piece of state that is recomputed is the route + * set. Other pieces of state such as the highest sequence numbers + * (remote and local) sent within the dialog are not recomputed. The + * route set only is recomputed for backwards compatibility. RFC + * 2543 did not mandate mirroring of the Record-Route header field in + * a 1xx, only 2xx. However, we cannot update the entire state of + * the dialog, since mid-dialog requests may have been sent within + * the early dialog, modifying the sequence numbers, for example. + * + * https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + */ + recomputeRouteSet(message) { + this.dialogState.routeSet = message.getHeaders("record-route").reverse(); + } + /** + * A request within a dialog is constructed by using many of the + * components of the state stored as part of the dialog. + * https://tools.ietf.org/html/rfc3261#section-12.2.1.1 + * @param method - Outgoing request method. + */ + createOutgoingRequestMessage(method, options) { + // The URI in the To field of the request MUST be set to the remote URI + // from the dialog state. The tag in the To header field of the request + // MUST be set to the remote tag of the dialog ID. The From URI of the + // request MUST be set to the local URI from the dialog state. The tag + // in the From header field of the request MUST be set to the local tag + // of the dialog ID. If the value of the remote or local tags is null, + // the tag parameter MUST be omitted from the To or From header fields, + // respectively. + // + // Usage of the URI from the To and From fields in the original + // request within subsequent requests is done for backwards + // compatibility with RFC 2543, which used the URI for dialog + // identification. In this specification, only the tags are used for + // dialog identification. It is expected that mandatory reflection + // of the original To and From URI in mid-dialog requests will be + // deprecated in a subsequent revision of this specification. + // https://tools.ietf.org/html/rfc3261#section-12.2.1.1 + const toUri = this.remoteURI; + const toTag = this.remoteTag; + const fromUri = this.localURI; + const fromTag = this.localTag; + // The Call-ID of the request MUST be set to the Call-ID of the dialog. + // Requests within a dialog MUST contain strictly monotonically + // increasing and contiguous CSeq sequence numbers (increasing-by-one) + // in each direction (excepting ACK and CANCEL of course, whose numbers + // equal the requests being acknowledged or cancelled). Therefore, if + // the local sequence number is not empty, the value of the local + // sequence number MUST be incremented by one, and this value MUST be + // placed into the CSeq header field. If the local sequence number is + // empty, an initial value MUST be chosen using the guidelines of + // Section 8.1.1.5. The method field in the CSeq header field value + // MUST match the method of the request. + // https://tools.ietf.org/html/rfc3261#section-12.2.1.1 + const callId = this.callId; + let cseq; + if (options && options.cseq) { + cseq = options.cseq; + } + else if (!this.dialogState.localSequenceNumber) { + cseq = this.dialogState.localSequenceNumber = 1; // https://tools.ietf.org/html/rfc3261#section-8.1.1.5 + } + else { + cseq = this.dialogState.localSequenceNumber += 1; + } + // The UAC uses the remote target and route set to build the Request-URI + // and Route header field of the request. + // + // If the route set is empty, the UAC MUST place the remote target URI + // into the Request-URI. The UAC MUST NOT add a Route header field to + // the request. + // + // If the route set is not empty, and the first URI in the route set + // contains the lr parameter (see Section 19.1.1), the UAC MUST place + // the remote target URI into the Request-URI and MUST include a Route + // header field containing the route set values in order, including all + // parameters. + // + // If the route set is not empty, and its first URI does not contain the + // lr parameter, the UAC MUST place the first URI from the route set + // into the Request-URI, stripping any parameters that are not allowed + // in a Request-URI. The UAC MUST add a Route header field containing + // the remainder of the route set values in order, including all + // parameters. The UAC MUST then place the remote target URI into the + // Route header field as the last value. + // https://tools.ietf.org/html/rfc3261#section-12.2.1.1 + // The lr parameter, when present, indicates that the element + // responsible for this resource implements the routing mechanisms + // specified in this document. This parameter will be used in the + // URIs proxies place into Record-Route header field values, and + // may appear in the URIs in a pre-existing route set. + // + // This parameter is used to achieve backwards compatibility with + // systems implementing the strict-routing mechanisms of RFC 2543 + // and the rfc2543bis drafts up to bis-05. An element preparing + // to send a request based on a URI not containing this parameter + // can assume the receiving element implements strict-routing and + // reformat the message to preserve the information in the + // Request-URI. + // https://tools.ietf.org/html/rfc3261#section-19.1.1 + // NOTE: Not backwards compatible with RFC 2543 (no support for strict-routing). + const ruri = this.remoteTarget; + const routeSet = this.routeSet; + const extraHeaders = options && options.extraHeaders; + const body = options && options.body; + // The relative order of header fields with different field names is not + // significant. However, it is RECOMMENDED that header fields which are + // needed for proxy processing (Via, Route, Record-Route, Proxy-Require, + // Max-Forwards, and Proxy-Authorization, for example) appear towards + // the top of the message to facilitate rapid parsing. + // https://tools.ietf.org/html/rfc3261#section-7.3.1 + const message = this.userAgentCore.makeOutgoingRequestMessage(method, ruri, fromUri, toUri, { + callId, + cseq, + fromTag, + toTag, + routeSet + }, extraHeaders, body); + return message; + } + /** + * Increment the local sequence number by one. + * It feels like this should be protected, but the current authentication handling currently + * needs this to keep the dialog in sync when "auto re-sends" request messages. + * @internal + */ + incrementLocalSequenceNumber() { + if (!this.dialogState.localSequenceNumber) { + throw new Error("Local sequence number undefined."); + } + this.dialogState.localSequenceNumber += 1; + } + /** + * If the remote sequence number was not empty, but the sequence number + * of the request is lower than the remote sequence number, the request + * is out of order and MUST be rejected with a 500 (Server Internal + * Error) response. + * https://tools.ietf.org/html/rfc3261#section-12.2.2 + * @param request - Incoming request to guard. + * @returns True if the program execution is to continue in the branch in question. + * Otherwise a 500 Server Internal Error was stateless sent and request processing must stop. + */ + sequenceGuard(message) { + // ACK guard. + // By convention, handling of unexpected ACKs is responsibility + // the particular dialog implementation. For example, see SessionDialog. + // Furthermore, we cannot reply to an "out of sequence" ACK. + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_1__.C.ACK) { + return true; + } + // Note: We are rejecting on "less than or equal to" the remote + // sequence number (excepting ACK whose numbers equal the requests + // being acknowledged or cancelled), which is the correct thing to + // do in our case. The only time a request with the same sequence number + // will show up here if is a) it is a very late retransmission of a + // request we already handled or b) it is a different request with the + // same sequence number which would be violation of the standard. + // Request retransmissions are absorbed by the transaction layer, + // so any request with a duplicate sequence number getting here + // would have to be a retransmission after the transaction terminated + // or a broken request (with unique via branch value). + // Requests within a dialog MUST contain strictly monotonically + // increasing and contiguous CSeq sequence numbers (increasing-by-one) + // in each direction (excepting ACK and CANCEL of course, whose numbers + // equal the requests being acknowledged or cancelled). Therefore, if + // the local sequence number is not empty, the value of the local + // sequence number MUST be incremented by one, and this value MUST be + // placed into the CSeq header field. + // https://tools.ietf.org/html/rfc3261#section-12.2.1.1 + if (this.remoteSequenceNumber && message.cseq <= this.remoteSequenceNumber) { + this.core.replyStateless(message, { statusCode: 500 }); + return false; + } + return true; + } +} + + +/***/ }), +/* 70 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionDialog": () => (/* binding */ SessionDialog) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(25); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(17); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(18); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(26); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(27); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(30); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(36); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(63); +/* harmony import */ var _user_agents_bye_user_agent_client__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(73); +/* harmony import */ var _user_agents_bye_user_agent_server__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(80); +/* harmony import */ var _user_agents_info_user_agent_client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74); +/* harmony import */ var _user_agents_info_user_agent_server__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(84); +/* harmony import */ var _user_agents_message_user_agent_client__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(76); +/* harmony import */ var _user_agents_message_user_agent_server__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(86); +/* harmony import */ var _user_agents_notify_user_agent_client__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(77); +/* harmony import */ var _user_agents_notify_user_agent_server__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(87); +/* harmony import */ var _user_agents_prack_user_agent_client__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(78); +/* harmony import */ var _user_agents_prack_user_agent_server__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(88); +/* harmony import */ var _user_agents_re_invite_user_agent_client__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(75); +/* harmony import */ var _user_agents_re_invite_user_agent_server__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(85); +/* harmony import */ var _user_agents_refer_user_agent_client__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(79); +/* harmony import */ var _user_agents_refer_user_agent_server__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(89); +/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69); + + + + + + + + + + + + + + + + + + + +/** + * Session Dialog. + * @public + */ +class SessionDialog extends _dialog__WEBPACK_IMPORTED_MODULE_0__.Dialog { + constructor(initialTransaction, core, state, delegate) { + super(core, state); + this.initialTransaction = initialTransaction; + /** The state of the offer/answer exchange. */ + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Initial; + /** True if waiting for an ACK to the initial transaction 2xx (UAS only). */ + this.ackWait = false; + /** True if processing an ACK to the initial transaction 2xx (UAS only). */ + this.ackProcessing = false; + this.delegate = delegate; + if (initialTransaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + // If we're created by an invite server transaction, we're + // going to be waiting for an ACK if are to be confirmed. + this.ackWait = true; + } + // If we're confirmed upon creation start the retransmitting whatever + // the 2xx final response was that confirmed us into existence. + if (!this.early) { + this.start2xxRetransmissionTimer(); + } + this.signalingStateTransition(initialTransaction.request); + this.logger = core.loggerFactory.getLogger("sip.invite-dialog"); + this.logger.log(`INVITE dialog ${this.id} constructed`); + } + dispose() { + super.dispose(); + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Closed; + this._offer = undefined; + this._answer = undefined; + if (this.invite2xxTimer) { + clearTimeout(this.invite2xxTimer); + this.invite2xxTimer = undefined; + } + // The UAS MUST still respond to any pending requests received for that + // dialog. It is RECOMMENDED that a 487 (Request Terminated) response + // be generated to those pending requests. + // https://tools.ietf.org/html/rfc3261#section-15.1.2 + // TODO: + // this.userAgentServers.forEach((uas) => uas.reply(487)); + this.logger.log(`INVITE dialog ${this.id} destroyed`); + } + // FIXME: Need real state machine + get sessionState() { + if (this.early) { + return _session__WEBPACK_IMPORTED_MODULE_1__.SessionState.Early; + } + else if (this.ackWait) { + return _session__WEBPACK_IMPORTED_MODULE_1__.SessionState.AckWait; + } + else if (this._signalingState === _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Closed) { + return _session__WEBPACK_IMPORTED_MODULE_1__.SessionState.Terminated; + } + else { + return _session__WEBPACK_IMPORTED_MODULE_1__.SessionState.Confirmed; + } + } + /** The state of the offer/answer exchange. */ + get signalingState() { + return this._signalingState; + } + /** The current offer. Undefined unless signaling state HaveLocalOffer, HaveRemoteOffer, of Stable. */ + get offer() { + return this._offer; + } + /** The current answer. Undefined unless signaling state Stable. */ + get answer() { + return this._answer; + } + /** Confirm the dialog. Only matters if dialog is currently early. */ + confirm() { + // When we're confirmed start the retransmitting whatever + // the 2xx final response that may have confirmed us. + if (this.early) { + this.start2xxRetransmissionTimer(); + } + super.confirm(); + } + /** Re-confirm the dialog. Only matters if handling re-INVITE request. */ + reConfirm() { + // When we're confirmed start the retransmitting whatever + // the 2xx final response that may have confirmed us. + if (this.reinviteUserAgentServer) { + this.startReInvite2xxRetransmissionTimer(); + } + } + /** + * The UAC core MUST generate an ACK request for each 2xx received from + * the transaction layer. The header fields of the ACK are constructed + * in the same way as for any request sent within a dialog (see Section + * 12) with the exception of the CSeq and the header fields related to + * authentication. The sequence number of the CSeq header field MUST be + * the same as the INVITE being acknowledged, but the CSeq method MUST + * be ACK. The ACK MUST contain the same credentials as the INVITE. If + * the 2xx contains an offer (based on the rules above), the ACK MUST + * carry an answer in its body. If the offer in the 2xx response is not + * acceptable, the UAC core MUST generate a valid answer in the ACK and + * then send a BYE immediately. + * https://tools.ietf.org/html/rfc3261#section-13.2.2.4 + * @param options - ACK options bucket. + */ + ack(options = {}) { + this.logger.log(`INVITE dialog ${this.id} sending ACK request`); + let transaction; + if (this.reinviteUserAgentClient) { + // We're sending ACK for a re-INVITE + if (!(this.reinviteUserAgentClient.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_3__.InviteClientTransaction)) { + throw new Error("Transaction not instance of InviteClientTransaction."); + } + transaction = this.reinviteUserAgentClient.transaction; + this.reinviteUserAgentClient = undefined; + } + else { + // We're sending ACK for the initial INVITE + if (!(this.initialTransaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_3__.InviteClientTransaction)) { + throw new Error("Initial transaction not instance of InviteClientTransaction."); + } + transaction = this.initialTransaction; + } + const message = this.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_4__.C.ACK, { + cseq: transaction.request.cseq, + extraHeaders: options.extraHeaders, + body: options.body + }); + transaction.ackResponse(message); // See InviteClientTransaction for details. + this.signalingStateTransition(message); + return { message }; + } + /** + * Terminating a Session + * + * This section describes the procedures for terminating a session + * established by SIP. The state of the session and the state of the + * dialog are very closely related. When a session is initiated with an + * INVITE, each 1xx or 2xx response from a distinct UAS creates a + * dialog, and if that response completes the offer/answer exchange, it + * also creates a session. As a result, each session is "associated" + * with a single dialog - the one which resulted in its creation. If an + * initial INVITE generates a non-2xx final response, that terminates + * all sessions (if any) and all dialogs (if any) that were created + * through responses to the request. By virtue of completing the + * transaction, a non-2xx final response also prevents further sessions + * from being created as a result of the INVITE. The BYE request is + * used to terminate a specific session or attempted session. In this + * case, the specific session is the one with the peer UA on the other + * side of the dialog. When a BYE is received on a dialog, any session + * associated with that dialog SHOULD terminate. A UA MUST NOT send a + * BYE outside of a dialog. The caller's UA MAY send a BYE for either + * confirmed or early dialogs, and the callee's UA MAY send a BYE on + * confirmed dialogs, but MUST NOT send a BYE on early dialogs. + * + * However, the callee's UA MUST NOT send a BYE on a confirmed dialog + * until it has received an ACK for its 2xx response or until the server + * transaction times out. If no SIP extensions have defined other + * application layer states associated with the dialog, the BYE also + * terminates the dialog. + * + * https://tools.ietf.org/html/rfc3261#section-15 + * FIXME: Make these proper Exceptions... + * @param options - BYE options bucket. + * @returns + * Throws `Error` if callee's UA attempts a BYE on an early dialog. + * Throws `Error` if callee's UA attempts a BYE on a confirmed dialog + * while it's waiting on the ACK for its 2xx response. + */ + bye(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending BYE request`); + // The caller's UA MAY send a BYE for either + // confirmed or early dialogs, and the callee's UA MAY send a BYE on + // confirmed dialogs, but MUST NOT send a BYE on early dialogs. + // + // However, the callee's UA MUST NOT send a BYE on a confirmed dialog + // until it has received an ACK for its 2xx response or until the server + // transaction times out. + // https://tools.ietf.org/html/rfc3261#section-15 + if (this.initialTransaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + if (this.early) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("UAS MUST NOT send a BYE on early dialogs."); + } + if (this.ackWait && this.initialTransaction.state !== _transactions__WEBPACK_IMPORTED_MODULE_5__.TransactionState.Terminated) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("UAS MUST NOT send a BYE on a confirmed dialog " + + "until it has received an ACK for its 2xx response " + + "or until the server transaction times out."); + } + } + // A BYE request is constructed as would any other request within a + // dialog, as described in Section 12. + // + // Once the BYE is constructed, the UAC core creates a new non-INVITE + // client transaction, and passes it the BYE request. The UAC MUST + // consider the session terminated (and therefore stop sending or + // listening for media) as soon as the BYE request is passed to the + // client transaction. If the response for the BYE is a 481 + // (Call/Transaction Does Not Exist) or a 408 (Request Timeout) or no + // response at all is received for the BYE (that is, a timeout is + // returned by the client transaction), the UAC MUST consider the + // session and the dialog terminated. + // https://tools.ietf.org/html/rfc3261#section-15.1.1 + return new _user_agents_bye_user_agent_client__WEBPACK_IMPORTED_MODULE_6__.ByeUserAgentClient(this, delegate, options); + } + /** + * An INFO request can be associated with an Info Package (see + * Section 5), or associated with a legacy INFO usage (see Section 2). + * + * The construction of the INFO request is the same as any other + * non-target refresh request within an existing invite dialog usage as + * described in Section 12.2 of RFC 3261. + * https://tools.ietf.org/html/rfc6086#section-4.2.1 + * @param options - Options bucket. + */ + info(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending INFO request`); + if (this.early) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("Dialog not confirmed."); + } + return new _user_agents_info_user_agent_client__WEBPACK_IMPORTED_MODULE_7__.InfoUserAgentClient(this, delegate, options); + } + /** + * Modifying an Existing Session + * + * A successful INVITE request (see Section 13) establishes both a + * dialog between two user agents and a session using the offer-answer + * model. Section 12 explains how to modify an existing dialog using a + * target refresh request (for example, changing the remote target URI + * of the dialog). This section describes how to modify the actual + * session. This modification can involve changing addresses or ports, + * adding a media stream, deleting a media stream, and so on. This is + * accomplished by sending a new INVITE request within the same dialog + * that established the session. An INVITE request sent within an + * existing dialog is known as a re-INVITE. + * + * Note that a single re-INVITE can modify the dialog and the + * parameters of the session at the same time. + * + * Either the caller or callee can modify an existing session. + * https://tools.ietf.org/html/rfc3261#section-14 + * @param options - Options bucket + */ + invite(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending INVITE request`); + if (this.early) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("Dialog not confirmed."); + } + // Note that a UAC MUST NOT initiate a new INVITE transaction within a + // dialog while another INVITE transaction is in progress in either + // direction. + // + // 1. If there is an ongoing INVITE client transaction, the TU MUST + // wait until the transaction reaches the completed or terminated + // state before initiating the new INVITE. + // + // 2. If there is an ongoing INVITE server transaction, the TU MUST + // wait until the transaction reaches the confirmed or terminated + // state before initiating the new INVITE. + // + // However, a UA MAY initiate a regular transaction while an INVITE + // transaction is in progress. A UA MAY also initiate an INVITE + // transaction while a regular transaction is in progress. + // https://tools.ietf.org/html/rfc3261#section-14.1 + if (this.reinviteUserAgentClient) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("There is an ongoing re-INVITE client transaction."); + } + if (this.reinviteUserAgentServer) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("There is an ongoing re-INVITE server transaction."); + } + return new _user_agents_re_invite_user_agent_client__WEBPACK_IMPORTED_MODULE_8__.ReInviteUserAgentClient(this, delegate, options); + } + /** + * A UAC MAY associate a MESSAGE request with an existing dialog. If a + * MESSAGE request is sent within a dialog, it is "associated" with any + * media session or sessions associated with that dialog. + * https://tools.ietf.org/html/rfc3428#section-4 + * @param options - Options bucket. + */ + message(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending MESSAGE request`); + if (this.early) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("Dialog not confirmed."); + } + const message = this.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_4__.C.MESSAGE, options); + return new _user_agents_message_user_agent_client__WEBPACK_IMPORTED_MODULE_9__.MessageUserAgentClient(this.core, message, delegate); + } + /** + * The NOTIFY mechanism defined in [2] MUST be used to inform the agent + * sending the REFER of the status of the reference. + * https://tools.ietf.org/html/rfc3515#section-2.4.4 + * @param options - Options bucket. + */ + notify(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending NOTIFY request`); + if (this.early) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("Dialog not confirmed."); + } + return new _user_agents_notify_user_agent_client__WEBPACK_IMPORTED_MODULE_10__.NotifyUserAgentClient(this, delegate, options); + } + /** + * Assuming the response is to be transmitted reliably, the UAC MUST + * create a new request with method PRACK. This request is sent within + * the dialog associated with the provisional response (indeed, the + * provisional response may have created the dialog). PRACK requests + * MAY contain bodies, which are interpreted according to their type and + * disposition. + * https://tools.ietf.org/html/rfc3262#section-4 + * @param options - Options bucket. + */ + prack(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending PRACK request`); + return new _user_agents_prack_user_agent_client__WEBPACK_IMPORTED_MODULE_11__.PrackUserAgentClient(this, delegate, options); + } + /** + * REFER is a SIP request and is constructed as defined in [1]. A REFER + * request MUST contain exactly one Refer-To header field value. + * https://tools.ietf.org/html/rfc3515#section-2.4.1 + * @param options - Options bucket. + */ + refer(delegate, options) { + this.logger.log(`INVITE dialog ${this.id} sending REFER request`); + if (this.early) { + // FIXME: TODO: This should throw a proper exception. + throw new Error("Dialog not confirmed."); + } + // FIXME: TODO: Validate Refer-To header field value. + return new _user_agents_refer_user_agent_client__WEBPACK_IMPORTED_MODULE_12__.ReferUserAgentClient(this, delegate, options); + } + /** + * Requests sent within a dialog, as any other requests, are atomic. If + * a particular request is accepted by the UAS, all the state changes + * associated with it are performed. If the request is rejected, none + * of the state changes are performed. + * https://tools.ietf.org/html/rfc3261#section-12.2.2 + * @param message - Incoming request message within this dialog. + */ + receiveRequest(message) { + this.logger.log(`INVITE dialog ${this.id} received ${message.method} request`); + // Response retransmissions cease when an ACK request for the + // response is received. This is independent of whatever transport + // protocols are used to send the response. + // https://tools.ietf.org/html/rfc6026#section-8.1 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_4__.C.ACK) { + // If ackWait is true, then this is the ACK to the initial INVITE, + // otherwise this is an ACK to an in dialog INVITE. In either case, + // guard to make sure the sequence number of the ACK matches the INVITE. + if (this.ackWait) { + if (this.initialTransaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_3__.InviteClientTransaction) { + this.logger.warn(`INVITE dialog ${this.id} received unexpected ${message.method} request, dropping.`); + return; + } + if (this.initialTransaction.request.cseq !== message.cseq) { + this.logger.warn(`INVITE dialog ${this.id} received unexpected ${message.method} request, dropping.`); + return; + } + // Update before the delegate has a chance to handle the + // message as delegate may callback into this dialog. + this.ackWait = false; + } + else { + if (!this.reinviteUserAgentServer) { + this.logger.warn(`INVITE dialog ${this.id} received unexpected ${message.method} request, dropping.`); + return; + } + if (this.reinviteUserAgentServer.transaction.request.cseq !== message.cseq) { + this.logger.warn(`INVITE dialog ${this.id} received unexpected ${message.method} request, dropping.`); + return; + } + this.reinviteUserAgentServer = undefined; + } + this.signalingStateTransition(message); + if (this.delegate && this.delegate.onAck) { + const promiseOrVoid = this.delegate.onAck({ message }); + if (promiseOrVoid instanceof Promise) { + this.ackProcessing = true; // make sure this is always reset to false + promiseOrVoid.then(() => (this.ackProcessing = false)).catch(() => (this.ackProcessing = false)); + } + } + return; + } + // Request within a dialog out of sequence guard. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + if (!this.sequenceGuard(message)) { + this.logger.log(`INVITE dialog ${this.id} rejected out of order ${message.method} request.`); + return; + } + // Request within a dialog common processing. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + super.receiveRequest(message); + // Handle various INVITE related cross-over, glare and race conditions + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_4__.C.INVITE) { + // Hopefully this message is helpful... + const warning = () => { + const reason = this.ackWait ? "waiting for initial ACK" : "processing initial ACK"; + this.logger.warn(`INVITE dialog ${this.id} received re-INVITE while ${reason}`); + let msg = "RFC 5407 suggests the following to avoid this race condition... "; + msg += " Note: Implementation issues are outside the scope of this document,"; + msg += " but the following tip is provided for avoiding race conditions of"; + msg += " this type. The caller can delay sending re-INVITE F6 for some period"; + msg += " of time (2 seconds, perhaps), after which the caller can reasonably"; + msg += " assume that its ACK has been received. Implementors can decouple the"; + msg += " actions of the user (e.g., pressing the hold button) from the actions"; + msg += " of the protocol (the sending of re-INVITE F6), so that the UA can"; + msg += " behave like this. In this case, it is the implementor's choice as to"; + msg += " how long to wait. In most cases, such an implementation may be"; + msg += " useful to prevent the type of race condition shown in this section."; + msg += " This document expresses no preference about whether or not they"; + msg += " should wait for an ACK to be delivered. After considering the impact"; + msg += " on user experience, implementors should decide whether or not to wait"; + msg += " for a while, because the user experience depends on the"; + msg += " implementation and has no direct bearing on protocol behavior."; + this.logger.warn(msg); + return; // drop re-INVITE request message + }; + // A UAS that receives a second INVITE before it sends the final + // response to a first INVITE with a lower CSeq sequence number on the + // same dialog MUST return a 500 (Server Internal Error) response to the + // second INVITE and MUST include a Retry-After header field with a + // randomly chosen value of between 0 and 10 seconds. + // https://tools.ietf.org/html/rfc3261#section-14.2 + const retryAfter = Math.floor(Math.random() * 10) + 1; + const extraHeaders = [`Retry-After: ${retryAfter}`]; + // There may be ONLY ONE offer/answer negotiation in progress for a + // single dialog at any point in time. Section 4 explains how to ensure + // this. + // https://tools.ietf.org/html/rfc6337#section-2.2 + if (this.ackProcessing) { + // UAS-IsI: While an INVITE server transaction is incomplete or ACK + // transaction associated with an offer/answer is incomplete, + // a UA must reject another INVITE request with a 500 + // response. + // https://tools.ietf.org/html/rfc6337#section-4.3 + this.core.replyStateless(message, { statusCode: 500, extraHeaders }); + warning(); + return; + } + // 3.1.4. Callee Receives re-INVITE (Established State) While in the + // Moratorium State (Case 1) + // https://tools.ietf.org/html/rfc5407#section-3.1.4 + // 3.1.5. Callee Receives re-INVITE (Established State) While in the + // Moratorium State (Case 2) + // https://tools.ietf.org/html/rfc5407#section-3.1.5 + if (this.ackWait && this.signalingState !== _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable) { + // This scenario is basically the same as that of Section 3.1.4, but + // differs in sending an offer in the 200 and an answer in the ACK. In + // contrast to the previous case, the offer in the 200 (F3) and the + // offer in the re-INVITE (F6) collide with each other. + // + // Bob sends a 491 to the re-INVITE (F6) since he is not able to + // properly handle a new request until he receives an answer. (Note: + // 500 with a Retry-After header may be returned if the 491 response is + // understood to indicate request collision. However, 491 is + // recommended here because 500 applies to so many cases that it is + // difficult to determine what the real problem was.) + // https://tools.ietf.org/html/rfc5407#section-3.1.5 + // UAS-IsI: While an INVITE server transaction is incomplete or ACK + // transaction associated with an offer/answer is incomplete, + // a UA must reject another INVITE request with a 500 + // response. + // https://tools.ietf.org/html/rfc6337#section-4.3 + this.core.replyStateless(message, { statusCode: 500, extraHeaders }); + warning(); + return; + } + // A UAS that receives a second INVITE before it sends the final + // response to a first INVITE with a lower CSeq sequence number on the + // same dialog MUST return a 500 (Server Internal Error) response to the + // second INVITE and MUST include a Retry-After header field with a + // randomly chosen value of between 0 and 10 seconds. + // https://tools.ietf.org/html/rfc3261#section-14.2 + if (this.reinviteUserAgentServer) { + this.core.replyStateless(message, { statusCode: 500, extraHeaders }); + return; + } + // A UAS that receives an INVITE on a dialog while an INVITE it had sent + // on that dialog is in progress MUST return a 491 (Request Pending) + // response to the received INVITE. + // https://tools.ietf.org/html/rfc3261#section-14.2 + if (this.reinviteUserAgentClient) { + this.core.replyStateless(message, { statusCode: 491 }); + return; + } + } + // Requests within a dialog MAY contain Record-Route and Contact header + // fields. However, these requests do not cause the dialog's route set + // to be modified, although they may modify the remote target URI. + // Specifically, requests that are not target refresh requests do not + // modify the dialog's remote target URI, and requests that are target + // refresh requests do. For dialogs that have been established with an + // INVITE, the only target refresh request defined is re-INVITE (see + // Section 14). Other extensions may define different target refresh + // requests for dialogs established in other ways. + // + // Note that an ACK is NOT a target refresh request. + // + // Target refresh requests only update the dialog's remote target URI, + // and not the route set formed from the Record-Route. Updating the + // latter would introduce severe backwards compatibility problems with + // RFC 2543-compliant systems. + // https://tools.ietf.org/html/rfc3261#section-15 + if (message.method === _messages__WEBPACK_IMPORTED_MODULE_4__.C.INVITE) { + // FIXME: parser needs to be typed... + const contact = message.parseHeader("contact"); + if (!contact) { + // TODO: Review to make sure this will never happen + throw new Error("Contact undefined."); + } + if (!(contact instanceof _messages__WEBPACK_IMPORTED_MODULE_13__.NameAddrHeader)) { + throw new Error("Contact not instance of NameAddrHeader."); + } + this.dialogState.remoteTarget = contact.uri; + } + // Switch on method and then delegate. + switch (message.method) { + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.BYE: + // A UAS core receiving a BYE request for an existing dialog MUST follow + // the procedures of Section 12.2.2 to process the request. Once done, + // the UAS SHOULD terminate the session (and therefore stop sending and + // listening for media). The only case where it can elect not to are + // multicast sessions, where participation is possible even if the other + // participant in the dialog has terminated its involvement in the + // session. Whether or not it ends its participation on the session, + // the UAS core MUST generate a 2xx response to the BYE, and MUST pass + // that to the server transaction for transmission. + // + // The UAS MUST still respond to any pending requests received for that + // dialog. It is RECOMMENDED that a 487 (Request Terminated) response + // be generated to those pending requests. + // https://tools.ietf.org/html/rfc3261#section-15.1.2 + { + const uas = new _user_agents_bye_user_agent_server__WEBPACK_IMPORTED_MODULE_14__.ByeUserAgentServer(this, message); + this.delegate && this.delegate.onBye ? this.delegate.onBye(uas) : uas.accept(); + this.dispose(); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.INFO: + // If a UA receives an INFO request associated with an Info Package that + // the UA has not indicated willingness to receive, the UA MUST send a + // 469 (Bad Info Package) response (see Section 11.6), which contains a + // Recv-Info header field with Info Packages for which the UA is willing + // to receive INFO requests. + { + const uas = new _user_agents_info_user_agent_server__WEBPACK_IMPORTED_MODULE_15__.InfoUserAgentServer(this, message); + this.delegate && this.delegate.onInfo + ? this.delegate.onInfo(uas) + : uas.reject({ + statusCode: 469, + extraHeaders: ["Recv-Info:"] + }); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.INVITE: + // If the new session description is not acceptable, the UAS can reject + // it by returning a 488 (Not Acceptable Here) response for the re- + // INVITE. This response SHOULD include a Warning header field. + // https://tools.ietf.org/html/rfc3261#section-14.2 + { + const uas = new _user_agents_re_invite_user_agent_server__WEBPACK_IMPORTED_MODULE_16__.ReInviteUserAgentServer(this, message); + this.signalingStateTransition(message); + this.delegate && this.delegate.onInvite ? this.delegate.onInvite(uas) : uas.reject({ statusCode: 488 }); // TODO: Warning header field. + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.MESSAGE: + { + const uas = new _user_agents_message_user_agent_server__WEBPACK_IMPORTED_MODULE_17__.MessageUserAgentServer(this.core, message); + this.delegate && this.delegate.onMessage ? this.delegate.onMessage(uas) : uas.accept(); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.NOTIFY: + // https://tools.ietf.org/html/rfc3515#section-2.4.4 + { + const uas = new _user_agents_notify_user_agent_server__WEBPACK_IMPORTED_MODULE_18__.NotifyUserAgentServer(this, message); + this.delegate && this.delegate.onNotify ? this.delegate.onNotify(uas) : uas.accept(); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.PRACK: + // https://tools.ietf.org/html/rfc3262#section-4 + { + const uas = new _user_agents_prack_user_agent_server__WEBPACK_IMPORTED_MODULE_19__.PrackUserAgentServer(this, message); + this.delegate && this.delegate.onPrack ? this.delegate.onPrack(uas) : uas.accept(); + } + break; + case _messages__WEBPACK_IMPORTED_MODULE_4__.C.REFER: + // https://tools.ietf.org/html/rfc3515#section-2.4.2 + { + const uas = new _user_agents_refer_user_agent_server__WEBPACK_IMPORTED_MODULE_20__.ReferUserAgentServer(this, message); + this.delegate && this.delegate.onRefer ? this.delegate.onRefer(uas) : uas.reject(); + } + break; + default: + { + this.logger.log(`INVITE dialog ${this.id} received unimplemented ${message.method} request`); + this.core.replyStateless(message, { statusCode: 501 }); + } + break; + } + } + /** + * Guard against out of order reliable provisional responses and retransmissions. + * Returns false if the response should be discarded, otherwise true. + * @param message - Incoming response message within this dialog. + */ + reliableSequenceGuard(message) { + const statusCode = message.statusCode; + if (!statusCode) { + throw new Error("Status code undefined"); + } + if (statusCode > 100 && statusCode < 200) { + // If a provisional response is received for an initial request, and + // that response contains a Require header field containing the option + // tag 100rel, the response is to be sent reliably. If the response is + // a 100 (Trying) (as opposed to 101 to 199), this option tag MUST be + // ignored, and the procedures below MUST NOT be used. + // https://tools.ietf.org/html/rfc3262#section-4 + const requireHeader = message.getHeader("require"); + const rseqHeader = message.getHeader("rseq"); + const rseq = requireHeader && requireHeader.includes("100rel") && rseqHeader ? Number(rseqHeader) : undefined; + if (rseq) { + // Handling of subsequent reliable provisional responses for the same + // initial request follows the same rules as above, with the following + // difference: reliable provisional responses are guaranteed to be in + // order. As a result, if the UAC receives another reliable provisional + // response to the same request, and its RSeq value is not one higher + // than the value of the sequence number, that response MUST NOT be + // acknowledged with a PRACK, and MUST NOT be processed further by the + // UAC. An implementation MAY discard the response, or MAY cache the + // response in the hopes of receiving the missing responses. + // https://tools.ietf.org/html/rfc3262#section-4 + if (this.rseq && this.rseq + 1 !== rseq) { + return false; + } + // Once a reliable provisional response is received, retransmissions of + // that response MUST be discarded. A response is a retransmission when + // its dialog ID, CSeq, and RSeq match the original response. The UAC + // MUST maintain a sequence number that indicates the most recently + // received in-order reliable provisional response for the initial + // request. This sequence number MUST be maintained until a final + // response is received for the initial request. Its value MUST be + // initialized to the RSeq header field in the first reliable + // provisional response received for the initial request. + // https://tools.ietf.org/html/rfc3262#section-4 + this.rseq = this.rseq ? this.rseq + 1 : rseq; + } + } + return true; + } + /** + * If not in a stable signaling state, rollback to prior stable signaling state. + */ + signalingStateRollback() { + if (this._signalingState === _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer || + this.signalingState === _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer) { + if (this._rollbackOffer && this._rollbackAnswer) { + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable; + this._offer = this._rollbackOffer; + this._answer = this._rollbackAnswer; + } + } + } + /** + * Update the signaling state of the dialog. + * @param message - The message to base the update off of. + */ + signalingStateTransition(message) { + const body = (0,_messages__WEBPACK_IMPORTED_MODULE_21__.getBody)(message); + // No body, no session. No, woman, no cry. + if (!body || body.contentDisposition !== "session") { + return; + } + // We've got an existing offer and answer which we may wish to rollback to + if (this._signalingState === _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable) { + this._rollbackOffer = this._offer; + this._rollbackAnswer = this._answer; + } + // We're in UAS role, receiving incoming request with session description + if (message instanceof _messages__WEBPACK_IMPORTED_MODULE_22__.IncomingRequestMessage) { + switch (this._signalingState) { + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Initial: + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer; + this._offer = body; + this._answer = undefined; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable; + this._answer = body; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer: + // You cannot make a new offer while one is in progress. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // FIXME: What to do here? + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Closed: + break; + default: + throw new Error("Unexpected signaling state."); + } + } + // We're in UAC role, receiving incoming response with session description + if (message instanceof _messages__WEBPACK_IMPORTED_MODULE_23__.IncomingResponseMessage) { + switch (this._signalingState) { + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Initial: + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer; + this._offer = body; + this._answer = undefined; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable; + this._answer = body; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer: + // You cannot make a new offer while one is in progress. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // FIXME: What to do here? + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Closed: + break; + default: + throw new Error("Unexpected signaling state."); + } + } + // We're in UAC role, sending outgoing request with session description + if (message instanceof _messages__WEBPACK_IMPORTED_MODULE_24__.OutgoingRequestMessage) { + switch (this._signalingState) { + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Initial: + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer; + this._offer = body; + this._answer = undefined; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer: + // You cannot make a new offer while one is in progress. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // FIXME: What to do here? + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable; + this._answer = body; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Closed: + break; + default: + throw new Error("Unexpected signaling state."); + } + } + // We're in UAS role, sending outgoing response with session description + if ((0,_messages__WEBPACK_IMPORTED_MODULE_21__.isBody)(message)) { + switch (this._signalingState) { + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Initial: + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer; + this._offer = body; + this._answer = undefined; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveLocalOffer: + // You cannot make a new offer while one is in progress. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + // FIXME: What to do here? + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.HaveRemoteOffer: + this._signalingState = _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Stable; + this._answer = body; + break; + case _session__WEBPACK_IMPORTED_MODULE_1__.SignalingState.Closed: + break; + default: + throw new Error("Unexpected signaling state."); + } + } + } + start2xxRetransmissionTimer() { + if (this.initialTransaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + const transaction = this.initialTransaction; + // Once the response has been constructed, it is passed to the INVITE + // server transaction. In order to ensure reliable end-to-end + // transport of the response, it is necessary to periodically pass + // the response directly to the transport until the ACK arrives. The + // 2xx response is passed to the transport with an interval that + // starts at T1 seconds and doubles for each retransmission until it + // reaches T2 seconds (T1 and T2 are defined in Section 17). + // Response retransmissions cease when an ACK request for the + // response is received. This is independent of whatever transport + // protocols are used to send the response. + // https://tools.ietf.org/html/rfc6026#section-8.1 + let timeout = _timers__WEBPACK_IMPORTED_MODULE_25__.Timers.T1; + const retransmission = () => { + if (!this.ackWait) { + this.invite2xxTimer = undefined; + return; + } + this.logger.log("No ACK for 2xx response received, attempting retransmission"); + transaction.retransmitAcceptedResponse(); + timeout = Math.min(timeout * 2, _timers__WEBPACK_IMPORTED_MODULE_25__.Timers.T2); + this.invite2xxTimer = setTimeout(retransmission, timeout); + }; + this.invite2xxTimer = setTimeout(retransmission, timeout); + // If the server retransmits the 2xx response for 64*T1 seconds without + // receiving an ACK, the dialog is confirmed, but the session SHOULD be + // terminated. This is accomplished with a BYE, as described in Section 15. + // https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + const stateChanged = () => { + if (transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_5__.TransactionState.Terminated) { + transaction.removeStateChangeListener(stateChanged); + if (this.invite2xxTimer) { + clearTimeout(this.invite2xxTimer); + this.invite2xxTimer = undefined; + } + if (this.ackWait) { + if (this.delegate && this.delegate.onAckTimeout) { + this.delegate.onAckTimeout(); + } + else { + this.bye(); + } + } + } + }; + transaction.addStateChangeListener(stateChanged); + } + } + // FIXME: Refactor + startReInvite2xxRetransmissionTimer() { + if (this.reinviteUserAgentServer && this.reinviteUserAgentServer.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + const transaction = this.reinviteUserAgentServer.transaction; + // Once the response has been constructed, it is passed to the INVITE + // server transaction. In order to ensure reliable end-to-end + // transport of the response, it is necessary to periodically pass + // the response directly to the transport until the ACK arrives. The + // 2xx response is passed to the transport with an interval that + // starts at T1 seconds and doubles for each retransmission until it + // reaches T2 seconds (T1 and T2 are defined in Section 17). + // Response retransmissions cease when an ACK request for the + // response is received. This is independent of whatever transport + // protocols are used to send the response. + // https://tools.ietf.org/html/rfc6026#section-8.1 + let timeout = _timers__WEBPACK_IMPORTED_MODULE_25__.Timers.T1; + const retransmission = () => { + if (!this.reinviteUserAgentServer) { + this.invite2xxTimer = undefined; + return; + } + this.logger.log("No ACK for 2xx response received, attempting retransmission"); + transaction.retransmitAcceptedResponse(); + timeout = Math.min(timeout * 2, _timers__WEBPACK_IMPORTED_MODULE_25__.Timers.T2); + this.invite2xxTimer = setTimeout(retransmission, timeout); + }; + this.invite2xxTimer = setTimeout(retransmission, timeout); + // If the server retransmits the 2xx response for 64*T1 seconds without + // receiving an ACK, the dialog is confirmed, but the session SHOULD be + // terminated. This is accomplished with a BYE, as described in Section 15. + // https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + const stateChanged = () => { + if (transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_5__.TransactionState.Terminated) { + transaction.removeStateChangeListener(stateChanged); + if (this.invite2xxTimer) { + clearTimeout(this.invite2xxTimer); + this.invite2xxTimer = undefined; + } + if (this.reinviteUserAgentServer) { + // FIXME: TODO: What to do here + } + } + }; + transaction.addStateChangeListener(stateChanged); + } + } +} + + +/***/ }), +/* 71 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "InviteServerTransaction": () => (/* binding */ InviteServerTransaction) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(36); +/* harmony import */ var _server_transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72); +/* harmony import */ var _transaction_state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63); + + + + +/** + * INVITE Server Transaction. + * @remarks + * https://tools.ietf.org/html/rfc3261#section-17.2.1 + * @public + */ +class InviteServerTransaction extends _server_transaction__WEBPACK_IMPORTED_MODULE_0__.ServerTransaction { + /** + * Constructor. + * Upon construction, a "100 Trying" reply will be immediately sent. + * After construction the transaction will be in the "proceeding" state and the transaction + * `id` will equal the branch parameter set in the Via header of the incoming request. + * https://tools.ietf.org/html/rfc3261#section-17.2.1 + * @param request - Incoming INVITE request from the transport. + * @param transport - The transport. + * @param user - The transaction user. + */ + constructor(request, transport, user) { + super(request, transport, user, _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding, "sip.transaction.ist"); + } + /** + * Destructor. + */ + dispose() { + this.stopProgressExtensionTimer(); + if (this.H) { + clearTimeout(this.H); + this.H = undefined; + } + if (this.I) { + clearTimeout(this.I); + this.I = undefined; + } + if (this.L) { + clearTimeout(this.L); + this.L = undefined; + } + super.dispose(); + } + /** Transaction kind. Deprecated. */ + get kind() { + return "ist"; + } + /** + * Receive requests from transport matching this transaction. + * @param request - Request matching this transaction. + */ + receiveRequest(request) { + switch (this.state) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + // If a request retransmission is received while in the "Proceeding" state, the most + // recent provisional response that was received from the TU MUST be passed to the + // transport layer for retransmission. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.INVITE) { + if (this.lastProvisionalResponse) { + this.send(this.lastProvisionalResponse).catch((error) => { + this.logTransportError(error, "Failed to send retransmission of provisional response."); + }); + } + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted: + // While in the "Accepted" state, any retransmissions of the INVITE + // received will match this transaction state machine and will be + // absorbed by the machine without changing its state. These + // retransmissions are not passed onto the TU. + // https://tools.ietf.org/html/rfc6026#section-7.1 + if (request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.INVITE) { + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + // Furthermore, while in the "Completed" state, if a request retransmission is + // received, the server SHOULD pass the response to the transport for retransmission. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.INVITE) { + if (!this.lastFinalResponse) { + throw new Error("Last final response undefined."); + } + this.send(this.lastFinalResponse).catch((error) => { + this.logTransportError(error, "Failed to send retransmission of final response."); + }); + return; + } + // If an ACK is received while the server transaction is in the "Completed" state, + // the server transaction MUST transition to the "Confirmed" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.ACK) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Confirmed); + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Confirmed: + // The purpose of the "Confirmed" state is to absorb any additional ACK messages that arrive, + // triggered from retransmissions of the final response. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.INVITE || request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.ACK) { + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + // For good measure absorb any additional messages that arrive (should not happen). + if (request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.INVITE || request.method === _messages__WEBPACK_IMPORTED_MODULE_2__.C.ACK) { + return; + } + break; + default: + throw new Error(`Invalid state ${this.state}`); + } + const message = `INVITE server transaction received unexpected ${request.method} request while in state ${this.state}.`; + this.logger.warn(message); + return; + } + /** + * Receive responses from TU for this transaction. + * @param statusCode - Status code of response. + * @param response - Response. + */ + receiveResponse(statusCode, response) { + if (statusCode < 100 || statusCode > 699) { + throw new Error(`Invalid status code ${statusCode}`); + } + switch (this.state) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + // The TU passes any number of provisional responses to the server + // transaction. So long as the server transaction is in the + // "Proceeding" state, each of these MUST be passed to the transport + // layer for transmission. They are not sent reliably by the + // transaction layer (they are not retransmitted by it) and do not cause + // a change in the state of the server transaction. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (statusCode >= 100 && statusCode <= 199) { + this.lastProvisionalResponse = response; + // Start the progress extension timer only for a non-100 provisional response. + if (statusCode > 100) { + this.startProgressExtensionTimer(); // FIXME: remove + } + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send 1xx response."); + }); + return; + } + // If, while in the "Proceeding" state, the TU passes a 2xx response + // to the server transaction, the server transaction MUST pass this + // response to the transport layer for transmission. It is not + // retransmitted by the server transaction; retransmissions of 2xx + // responses are handled by the TU. The server transaction MUST then + // transition to the "Accepted" state. + // https://tools.ietf.org/html/rfc6026#section-8.5 + if (statusCode >= 200 && statusCode <= 299) { + this.lastFinalResponse = response; + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted); + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send 2xx response."); + }); + return; + } + // While in the "Proceeding" state, if the TU passes a response with + // status code from 300 to 699 to the server transaction, the response + // MUST be passed to the transport layer for transmission, and the state + // machine MUST enter the "Completed" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (statusCode >= 300 && statusCode <= 699) { + this.lastFinalResponse = response; + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send non-2xx final response."); + }); + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted: + // While in the "Accepted" state, if the TU passes a 2xx response, + // the server transaction MUST pass the response to the transport layer for transmission. + // https://tools.ietf.org/html/rfc6026#section-8.7 + if (statusCode >= 200 && statusCode <= 299) { + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send 2xx response."); + }); + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Confirmed: + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + break; + default: + throw new Error(`Invalid state ${this.state}`); + } + const message = `INVITE server transaction received unexpected ${statusCode} response from TU while in state ${this.state}.`; + this.logger.error(message); + throw new Error(message); + } + /** + * Retransmit the last 2xx response. This is a noop if not in the "accepted" state. + */ + retransmitAcceptedResponse() { + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted && this.lastFinalResponse) { + this.send(this.lastFinalResponse).catch((error) => { + this.logTransportError(error, "Failed to send 2xx response."); + }); + } + } + /** + * First, the procedures in [4] are followed, which attempt to deliver the response to a backup. + * If those should all fail, based on the definition of failure in [4], the server transaction SHOULD + * inform the TU that a failure has occurred, and MUST remain in the current state. + * https://tools.ietf.org/html/rfc6026#section-8.8 + */ + onTransportError(error) { + if (this.user.onTransportError) { + this.user.onTransportError(error); + } + } + /** For logging. */ + typeToString() { + return "INVITE server transaction"; + } + /** + * Execute a state transition. + * @param newState - New state. + */ + stateTransition(newState) { + // Assert valid state transitions. + const invalidStateTransition = () => { + throw new Error(`Invalid state transition from ${this.state} to ${newState}`); + }; + switch (newState) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + invalidStateTransition(); + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted: + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Confirmed: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted && + this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed && + this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Confirmed) { + invalidStateTransition(); + } + break; + default: + invalidStateTransition(); + } + // On any state transition, stop resending provisional responses + this.stopProgressExtensionTimer(); + // The purpose of the "Accepted" state is to absorb retransmissions of an accepted INVITE request. + // Any such retransmissions are absorbed entirely within the server transaction. + // They are not passed up to the TU since any downstream UAS cores that accepted the request have + // taken responsibility for reliability and will already retransmit their 2xx responses if necessary. + // https://tools.ietf.org/html/rfc6026#section-8.7 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted) { + this.L = setTimeout(() => this.timerL(), _timers__WEBPACK_IMPORTED_MODULE_3__.Timers.TIMER_L); + } + // When the "Completed" state is entered, timer H MUST be set to fire in 64*T1 seconds for all transports. + // Timer H determines when the server transaction abandons retransmitting the response. + // If an ACK is received while the server transaction is in the "Completed" state, + // the server transaction MUST transition to the "Confirmed" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + // FIXME: Missing timer G for unreliable transports. + this.H = setTimeout(() => this.timerH(), _timers__WEBPACK_IMPORTED_MODULE_3__.Timers.TIMER_H); + } + // The purpose of the "Confirmed" state is to absorb any additional ACK messages that arrive, + // triggered from retransmissions of the final response. When this state is entered, timer I + // is set to fire in T4 seconds for unreliable transports, and zero seconds for reliable + // transports. Once timer I fires, the server MUST transition to the "Terminated" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.1 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Confirmed) { + // FIXME: This timer is not getting set correctly for unreliable transports. + this.I = setTimeout(() => this.timerI(), _timers__WEBPACK_IMPORTED_MODULE_3__.Timers.TIMER_I); + } + // Once the transaction is in the "Terminated" state, it MUST be destroyed immediately. + // https://tools.ietf.org/html/rfc6026#section-8.7 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated) { + this.dispose(); + } + // Update state. + this.setState(newState); + } + /** + * FIXME: UAS Provisional Retransmission Timer. See RFC 3261 Section 13.3.1.1 + * This is in the wrong place. This is not a transaction level thing. It's a UAS level thing. + */ + startProgressExtensionTimer() { + // Start the progress extension timer only for the first non-100 provisional response. + if (this.progressExtensionTimer === undefined) { + this.progressExtensionTimer = setInterval(() => { + this.logger.debug(`Progress extension timer expired for INVITE server transaction ${this.id}.`); + if (!this.lastProvisionalResponse) { + throw new Error("Last provisional response undefined."); + } + this.send(this.lastProvisionalResponse).catch((error) => { + this.logTransportError(error, "Failed to send retransmission of provisional response."); + }); + }, _timers__WEBPACK_IMPORTED_MODULE_3__.Timers.PROVISIONAL_RESPONSE_INTERVAL); + } + } + /** + * FIXME: UAS Provisional Retransmission Timer id. See RFC 3261 Section 13.3.1.1 + * This is in the wrong place. This is not a transaction level thing. It's a UAS level thing. + */ + stopProgressExtensionTimer() { + if (this.progressExtensionTimer !== undefined) { + clearInterval(this.progressExtensionTimer); + this.progressExtensionTimer = undefined; + } + } + /** + * While in the "Proceeding" state, if the TU passes a response with status code + * from 300 to 699 to the server transaction, the response MUST be passed to the + * transport layer for transmission, and the state machine MUST enter the "Completed" state. + * For unreliable transports, timer G is set to fire in T1 seconds, and is not set to fire for + * reliable transports. If timer G fires, the response is passed to the transport layer once + * more for retransmission, and timer G is set to fire in MIN(2*T1, T2) seconds. From then on, + * when timer G fires, the response is passed to the transport again for transmission, and + * timer G is reset with a value that doubles, unless that value exceeds T2, in which case + * it is reset with the value of T2. + * https://tools.ietf.org/html/rfc3261#section-17.2.1 + */ + timerG() { + // TODO + } + /** + * If timer H fires while in the "Completed" state, it implies that the ACK was never received. + * In this case, the server transaction MUST transition to the "Terminated" state, and MUST + * indicate to the TU that a transaction failure has occurred. + * https://tools.ietf.org/html/rfc3261#section-17.2.1 + */ + timerH() { + this.logger.debug(`Timer H expired for INVITE server transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + this.logger.warn("ACK to negative final response was never received, terminating transaction."); + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } + /** + * Once timer I fires, the server MUST transition to the "Terminated" state. + * https://tools.ietf.org/html/rfc3261#section-17.2.1 + */ + timerI() { + this.logger.debug(`Timer I expired for INVITE server transaction ${this.id}.`); + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + /** + * When Timer L fires and the state machine is in the "Accepted" state, the machine MUST + * transition to the "Terminated" state. Once the transaction is in the "Terminated" state, + * it MUST be destroyed immediately. Timer L reflects the amount of time the server + * transaction could receive 2xx responses for retransmission from the + * TU while it is waiting to receive an ACK. + * https://tools.ietf.org/html/rfc6026#section-7.1 + * https://tools.ietf.org/html/rfc6026#section-8.7 + */ + timerL() { + this.logger.debug(`Timer L expired for INVITE server transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Accepted) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } +} + + +/***/ }), +/* 72 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ServerTransaction": () => (/* binding */ ServerTransaction) +/* harmony export */ }); +/* harmony import */ var _transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66); + +/** + * Server Transaction. + * @remarks + * The server transaction is responsible for the delivery of requests to + * the TU and the reliable transmission of responses. It accomplishes + * this through a state machine. Server transactions are created by the + * core when a request is received, and transaction handling is desired + * for that request (this is not always the case). + * https://tools.ietf.org/html/rfc3261#section-17.2 + * @public + */ +class ServerTransaction extends _transaction__WEBPACK_IMPORTED_MODULE_0__.Transaction { + constructor(_request, transport, user, state, loggerCategory) { + super(transport, user, _request.viaBranch, state, loggerCategory); + this._request = _request; + this.user = user; + } + /** The incoming request the transaction handling. */ + get request() { + return this._request; + } +} + + +/***/ }), +/* 73 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ByeUserAgentClient": () => (/* binding */ ByeUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * BYE UAC. + * @public + */ +class ByeUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.BYE, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, dialog.userAgentCore, message, delegate); + dialog.dispose(); + } +} + + +/***/ }), +/* 74 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "InfoUserAgentClient": () => (/* binding */ InfoUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * INFO UAC. + * @public + */ +class InfoUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.INFO, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, dialog.userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 75 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReInviteUserAgentClient": () => (/* binding */ ReInviteUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(68); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * Re-INVITE UAC. + * @remarks + * 14 Modifying an Existing Session + * https://tools.ietf.org/html/rfc3261#section-14 + * 14.1 UAC Behavior + * https://tools.ietf.org/html/rfc3261#section-14.1 + * @public + */ +class ReInviteUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.INVITE, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.InviteClientTransaction, dialog.userAgentCore, message, delegate); + this.delegate = delegate; + dialog.signalingStateTransition(message); + // FIXME: TODO: next line obviously needs to be improved... + dialog.reinviteUserAgentClient = this; // let the dialog know re-invite request sent + this.dialog = dialog; + } + receiveResponse(message) { + if (!this.authenticationGuard(message, this.dialog)) { + return; + } + const statusCode = message.statusCode ? message.statusCode.toString() : ""; + if (!statusCode) { + throw new Error("Response status code undefined."); + } + switch (true) { + case /^100$/.test(statusCode): + if (this.delegate && this.delegate.onTrying) { + this.delegate.onTrying({ message }); + } + break; + case /^1[0-9]{2}$/.test(statusCode): + if (this.delegate && this.delegate.onProgress) { + this.delegate.onProgress({ + message, + session: this.dialog, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + prack: (options) => { + throw new Error("Unimplemented."); + } + }); + } + break; + case /^2[0-9]{2}$/.test(statusCode): + // Update dialog signaling state with offer/answer in body + this.dialog.signalingStateTransition(message); + if (this.delegate && this.delegate.onAccept) { + this.delegate.onAccept({ + message, + session: this.dialog, + ack: (options) => { + const outgoingAckRequest = this.dialog.ack(options); + return outgoingAckRequest; + } + }); + } + break; + case /^3[0-9]{2}$/.test(statusCode): + this.dialog.signalingStateRollback(); + this.dialog.reinviteUserAgentClient = undefined; // ACK was handled by transaction + if (this.delegate && this.delegate.onRedirect) { + this.delegate.onRedirect({ message }); + } + break; + case /^[4-6][0-9]{2}$/.test(statusCode): + this.dialog.signalingStateRollback(); + this.dialog.reinviteUserAgentClient = undefined; // ACK was handled by transaction + if (this.delegate && this.delegate.onReject) { + this.delegate.onReject({ message }); + } + else { + // If a UA receives a non-2xx final response to a re-INVITE, the session + // parameters MUST remain unchanged, as if no re-INVITE had been issued. + // Note that, as stated in Section 12.2.1.2, if the non-2xx final + // response is a 481 (Call/Transaction Does Not Exist), or a 408 + // (Request Timeout), or no response at all is received for the re- + // INVITE (that is, a timeout is returned by the INVITE client + // transaction), the UAC will terminate the dialog. + // + // If a UAC receives a 491 response to a re-INVITE, it SHOULD start a + // timer with a value T chosen as follows: + // + // 1. If the UAC is the owner of the Call-ID of the dialog ID + // (meaning it generated the value), T has a randomly chosen value + // between 2.1 and 4 seconds in units of 10 ms. + // + // 2. If the UAC is not the owner of the Call-ID of the dialog ID, T + // has a randomly chosen value of between 0 and 2 seconds in units + // of 10 ms. + // + // When the timer fires, the UAC SHOULD attempt the re-INVITE once more, + // if it still desires for that session modification to take place. For + // example, if the call was already hung up with a BYE, the re-INVITE + // would not take place. + // https://tools.ietf.org/html/rfc3261#section-14.1 + // FIXME: TODO: The above. + } + break; + default: + throw new Error(`Invalid status code ${statusCode}`); + } + } +} + + +/***/ }), +/* 76 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MessageUserAgentClient": () => (/* binding */ MessageUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + +/** + * MESSAGE UAC. + * @public + */ +class MessageUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteClientTransaction, core, message, delegate); + } +} + + +/***/ }), +/* 77 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NotifyUserAgentClient": () => (/* binding */ NotifyUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * NOTIFY UAS. + * @public + */ +class NotifyUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.NOTIFY, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, dialog.userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 78 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PrackUserAgentClient": () => (/* binding */ PrackUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * PRACK UAC. + * @public + */ +class PrackUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.PRACK, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, dialog.userAgentCore, message, delegate); + dialog.signalingStateTransition(message); + } +} + + +/***/ }), +/* 79 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReferUserAgentClient": () => (/* binding */ ReferUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * REFER UAC. + * @public + */ +class ReferUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.REFER, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, dialog.userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 80 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ByeUserAgentServer": () => (/* binding */ ByeUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * BYE UAS. + * @public + */ +class ByeUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(dialog, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, dialog.userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 81 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UserAgentServer": () => (/* binding */ UserAgentServer) +/* harmony export */ }); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(35); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83); +/* harmony import */ var _messages_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(63); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(82); + + + + +/** + * User Agent Server (UAS). + * @remarks + * A user agent server is a logical entity + * that generates a response to a SIP request. The response + * accepts, rejects, or redirects the request. This role lasts + * only for the duration of that transaction. In other words, if + * a piece of software responds to a request, it acts as a UAS for + * the duration of that transaction. If it generates a request + * later, it assumes the role of a user agent client for the + * processing of that transaction. + * https://tools.ietf.org/html/rfc3261#section-6 + * @public + */ +class UserAgentServer { + constructor(transactionConstructor, core, message, delegate) { + this.transactionConstructor = transactionConstructor; + this.core = core; + this.message = message; + this.delegate = delegate; + this.logger = this.loggerFactory.getLogger("sip.user-agent-server"); + this.toTag = message.toTag ? message.toTag : (0,_messages_utils__WEBPACK_IMPORTED_MODULE_0__.newTag)(); + this.init(); + } + dispose() { + this.transaction.dispose(); + } + get loggerFactory() { + return this.core.loggerFactory; + } + /** The transaction associated with this request. */ + get transaction() { + if (!this._transaction) { + throw new Error("Transaction undefined."); + } + return this._transaction; + } + accept(options = { statusCode: 200 }) { + if (!this.acceptable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError(`${this.message.method} not acceptable in state ${this.transaction.state}.`); + } + const statusCode = options.statusCode; + if (statusCode < 200 || statusCode > 299) { + throw new TypeError(`Invalid statusCode: ${statusCode}`); + } + const response = this.reply(options); + return response; + } + progress(options = { statusCode: 180 }) { + if (!this.progressable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError(`${this.message.method} not progressable in state ${this.transaction.state}.`); + } + const statusCode = options.statusCode; + if (statusCode < 101 || statusCode > 199) { + throw new TypeError(`Invalid statusCode: ${statusCode}`); + } + const response = this.reply(options); + return response; + } + redirect(contacts, options = { statusCode: 302 }) { + if (!this.redirectable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError(`${this.message.method} not redirectable in state ${this.transaction.state}.`); + } + const statusCode = options.statusCode; + if (statusCode < 300 || statusCode > 399) { + throw new TypeError(`Invalid statusCode: ${statusCode}`); + } + const contactHeaders = new Array(); + contacts.forEach((contact) => contactHeaders.push(`Contact: ${contact.toString()}`)); + options.extraHeaders = (options.extraHeaders || []).concat(contactHeaders); + const response = this.reply(options); + return response; + } + reject(options = { statusCode: 480 }) { + if (!this.rejectable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError(`${this.message.method} not rejectable in state ${this.transaction.state}.`); + } + const statusCode = options.statusCode; + if (statusCode < 400 || statusCode > 699) { + throw new TypeError(`Invalid statusCode: ${statusCode}`); + } + const response = this.reply(options); + return response; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + trying(options) { + if (!this.tryingable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError(`${this.message.method} not tryingable in state ${this.transaction.state}.`); + } + const response = this.reply({ statusCode: 100 }); + return response; + } + /** + * If the UAS did not find a matching transaction for the CANCEL + * according to the procedure above, it SHOULD respond to the CANCEL + * with a 481 (Call Leg/Transaction Does Not Exist). If the transaction + * for the original request still exists, the behavior of the UAS on + * receiving a CANCEL request depends on whether it has already sent a + * final response for the original request. If it has, the CANCEL + * request has no effect on the processing of the original request, no + * effect on any session state, and no effect on the responses generated + * for the original request. If the UAS has not issued a final response + * for the original request, its behavior depends on the method of the + * original request. If the original request was an INVITE, the UAS + * SHOULD immediately respond to the INVITE with a 487 (Request + * Terminated). A CANCEL request has no impact on the processing of + * transactions with any other method defined in this specification. + * https://tools.ietf.org/html/rfc3261#section-9.2 + * @param request - Incoming CANCEL request. + */ + receiveCancel(message) { + // Note: Currently CANCEL is being handled as a special case. + // No UAS is created to handle the CANCEL and the response to + // it CANCEL is being handled statelessly by the user agent core. + // As such, there is currently no way to externally impact the + // response to the a CANCEL request. + if (this.delegate && this.delegate.onCancel) { + this.delegate.onCancel(message); + } + } + get acceptable() { + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + return (this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding || this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Accepted); + } + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_4__.NonInviteServerTransaction) { + return (this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Trying || this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding); + } + throw new Error("Unknown transaction type."); + } + get progressable() { + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + return this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding; + } + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_4__.NonInviteServerTransaction) { + return false; // https://tools.ietf.org/html/rfc4320#section-4.1 + } + throw new Error("Unknown transaction type."); + } + get redirectable() { + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + return this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding; + } + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_4__.NonInviteServerTransaction) { + return (this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Trying || this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding); + } + throw new Error("Unknown transaction type."); + } + get rejectable() { + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + return this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding; + } + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_4__.NonInviteServerTransaction) { + return (this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Trying || this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding); + } + throw new Error("Unknown transaction type."); + } + get tryingable() { + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction) { + return this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Proceeding; + } + if (this.transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_4__.NonInviteServerTransaction) { + return this.transaction.state === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Trying; + } + throw new Error("Unknown transaction type."); + } + /** + * When a UAS wishes to construct a response to a request, it follows + * the general procedures detailed in the following subsections. + * Additional behaviors specific to the response code in question, which + * are not detailed in this section, may also be required. + * + * Once all procedures associated with the creation of a response have + * been completed, the UAS hands the response back to the server + * transaction from which it received the request. + * https://tools.ietf.org/html/rfc3261#section-8.2.6 + * @param statusCode - Status code to reply with. + * @param options - Reply options bucket. + */ + reply(options) { + if (!options.toTag && options.statusCode !== 100) { + options.toTag = this.toTag; + } + options.userAgent = options.userAgent || this.core.configuration.userAgentHeaderFieldValue; + options.supported = options.supported || this.core.configuration.supportedOptionTagsResponse; + const response = (0,_messages__WEBPACK_IMPORTED_MODULE_5__.constructOutgoingResponse)(this.message, options); + this.transaction.receiveResponse(options.statusCode, response.message); + return response; + } + init() { + // We are the transaction user. + const user = { + loggerFactory: this.loggerFactory, + onStateChange: (newState) => { + if (newState === _transactions__WEBPACK_IMPORTED_MODULE_3__.TransactionState.Terminated) { + // Remove the terminated transaction from the core. + // eslint-disable-next-line @typescript-eslint/no-use-before-define + this.core.userAgentServers.delete(userAgentServerId); + this.dispose(); + } + }, + onTransportError: (error) => { + this.logger.error(error.message); + if (this.delegate && this.delegate.onTransportError) { + this.delegate.onTransportError(error); + } + else { + this.logger.error("User agent server response transport error."); + } + } + }; + // Create a new transaction with us as the user. + const transaction = new this.transactionConstructor(this.message, this.core.transport, user); + this._transaction = transaction; + // Add the new transaction to the core. + const userAgentServerId = transaction.id; + this.core.userAgentServers.set(transaction.id, this); + } +} + + +/***/ }), +/* 82 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NonInviteServerTransaction": () => (/* binding */ NonInviteServerTransaction) +/* harmony export */ }); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(36); +/* harmony import */ var _server_transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72); +/* harmony import */ var _transaction_state__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63); + + + +/** + * Non-INVITE Server Transaction. + * @remarks + * https://tools.ietf.org/html/rfc3261#section-17.2.2 + * @public + */ +class NonInviteServerTransaction extends _server_transaction__WEBPACK_IMPORTED_MODULE_0__.ServerTransaction { + /** + * Constructor. + * After construction the transaction will be in the "trying": state and the transaction + * `id` will equal the branch parameter set in the Via header of the incoming request. + * https://tools.ietf.org/html/rfc3261#section-17.2.2 + * @param request - Incoming Non-INVITE request from the transport. + * @param transport - The transport. + * @param user - The transaction user. + */ + constructor(request, transport, user) { + super(request, transport, user, _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying, "sip.transaction.nist"); + } + /** + * Destructor. + */ + dispose() { + if (this.J) { + clearTimeout(this.J); + this.J = undefined; + } + super.dispose(); + } + /** Transaction kind. Deprecated. */ + get kind() { + return "nist"; + } + /** + * Receive requests from transport matching this transaction. + * @param request - Request matching this transaction. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + receiveRequest(request) { + switch (this.state) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying: + // Once in the "Trying" state, any further request retransmissions are discarded. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + // If a retransmission of the request is received while in the "Proceeding" state, + // the most recently sent provisional response MUST be passed to the transport layer for retransmission. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + if (!this.lastResponse) { + throw new Error("Last response undefined."); + } + this.send(this.lastResponse).catch((error) => { + this.logTransportError(error, "Failed to send retransmission of provisional response."); + }); + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + // While in the "Completed" state, the server transaction MUST pass the final response to the transport + // layer for retransmission whenever a retransmission of the request is received. Any other final responses + // passed by the TU to the server transaction MUST be discarded while in the "Completed" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + if (!this.lastResponse) { + throw new Error("Last response undefined."); + } + this.send(this.lastResponse).catch((error) => { + this.logTransportError(error, "Failed to send retransmission of final response."); + }); + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + break; + default: + throw new Error(`Invalid state ${this.state}`); + } + } + /** + * Receive responses from TU for this transaction. + * @param statusCode - Status code of response. 101-199 not allowed per RFC 4320. + * @param response - Response to send. + */ + receiveResponse(statusCode, response) { + if (statusCode < 100 || statusCode > 699) { + throw new Error(`Invalid status code ${statusCode}`); + } + // An SIP element MUST NOT send any provisional response with a + // Status-Code other than 100 to a non-INVITE request. + // An SIP element MUST NOT respond to a non-INVITE request with a + // Status-Code of 100 over any unreliable transport, such as UDP, + // before the amount of time it takes a client transaction's Timer E to be reset to T2. + // An SIP element MAY respond to a non-INVITE request with a + // Status-Code of 100 over a reliable transport at any time. + // https://tools.ietf.org/html/rfc4320#section-4.1 + if (statusCode > 100 && statusCode <= 199) { + throw new Error("Provisional response other than 100 not allowed."); + } + switch (this.state) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying: + // While in the "Trying" state, if the TU passes a provisional response + // to the server transaction, the server transaction MUST enter the "Proceeding" state. + // The response MUST be passed to the transport layer for transmission. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + this.lastResponse = response; + if (statusCode >= 100 && statusCode < 200) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding); + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send provisional response."); + }); + return; + } + if (statusCode >= 200 && statusCode <= 699) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send final response."); + }); + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + // Any further provisional responses that are received from the TU while + // in the "Proceeding" state MUST be passed to the transport layer for transmission. + // If the TU passes a final response (status codes 200-699) to the server while in + // the "Proceeding" state, the transaction MUST enter the "Completed" state, and + // the response MUST be passed to the transport layer for transmission. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + this.lastResponse = response; + if (statusCode >= 200 && statusCode <= 699) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed); + this.send(response).catch((error) => { + this.logTransportError(error, "Failed to send final response."); + }); + return; + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + // Any other final responses passed by the TU to the server + // transaction MUST be discarded while in the "Completed" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + return; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + break; + default: + throw new Error(`Invalid state ${this.state}`); + } + const message = `Non-INVITE server transaction received unexpected ${statusCode} response from TU while in state ${this.state}.`; + this.logger.error(message); + throw new Error(message); + } + /** + * First, the procedures in [4] are followed, which attempt to deliver the response to a backup. + * If those should all fail, based on the definition of failure in [4], the server transaction SHOULD + * inform the TU that a failure has occurred, and SHOULD transition to the terminated state. + * https://tools.ietf.org/html/rfc3261#section-17.2.4 + */ + onTransportError(error) { + if (this.user.onTransportError) { + this.user.onTransportError(error); + } + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated, true); + } + /** For logging. */ + typeToString() { + return "non-INVITE server transaction"; + } + stateTransition(newState, dueToTransportError = false) { + // Assert valid state transitions. + const invalidStateTransition = () => { + throw new Error(`Invalid state transition from ${this.state} to ${newState}`); + }; + switch (newState) { + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying: + invalidStateTransition(); + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Trying && this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding) { + invalidStateTransition(); + } + break; + case _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated: + if (this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Proceeding && this.state !== _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + if (!dueToTransportError) { + invalidStateTransition(); + } + } + break; + default: + invalidStateTransition(); + } + // When the server transaction enters the "Completed" state, it MUST set Timer J to fire + // in 64*T1 seconds for unreliable transports, and zero seconds for reliable transports. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + this.J = setTimeout(() => this.timerJ(), _timers__WEBPACK_IMPORTED_MODULE_2__.Timers.TIMER_J); + } + // The server transaction MUST be destroyed the instant it enters the "Terminated" state. + // https://tools.ietf.org/html/rfc3261#section-17.2.2 + if (newState === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated) { + this.dispose(); + } + this.setState(newState); + } + /** + * The server transaction remains in this state until Timer J fires, + * at which point it MUST transition to the "Terminated" state. + * https://tools.ietf.org/html/rfc3261#section-17.2.2 + */ + timerJ() { + this.logger.debug(`Timer J expired for NON-INVITE server transaction ${this.id}.`); + if (this.state === _transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Completed) { + this.stateTransition(_transaction_state__WEBPACK_IMPORTED_MODULE_1__.TransactionState.Terminated); + } + } +} + + +/***/ }), +/* 83 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "constructOutgoingResponse": () => (/* binding */ constructOutgoingResponse) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(20); + +/** + * When a UAS wishes to construct a response to a request, it follows + * the general procedures detailed in the following subsections. + * Additional behaviors specific to the response code in question, which + * are not detailed in this section, may also be required. + * https://tools.ietf.org/html/rfc3261#section-8.2.6 + * @internal + */ +function constructOutgoingResponse(message, options) { + const CRLF = "\r\n"; + if (options.statusCode < 100 || options.statusCode > 699) { + throw new TypeError("Invalid statusCode: " + options.statusCode); + } + const reasonPhrase = options.reasonPhrase ? options.reasonPhrase : (0,_utils__WEBPACK_IMPORTED_MODULE_0__.getReasonPhrase)(options.statusCode); + // SIP responses are distinguished from requests by having a Status-Line + // as their start-line. A Status-Line consists of the protocol version + // followed by a numeric Status-Code and its associated textual phrase, + // with each element separated by a single SP character. + // https://tools.ietf.org/html/rfc3261#section-7.2 + let response = "SIP/2.0 " + options.statusCode + " " + reasonPhrase + CRLF; + // One largely non-method-specific guideline for the generation of + // responses is that UASs SHOULD NOT issue a provisional response for a + // non-INVITE request. Rather, UASs SHOULD generate a final response to + // a non-INVITE request as soon as possible. + // https://tools.ietf.org/html/rfc3261#section-8.2.6.1 + if (options.statusCode >= 100 && options.statusCode < 200) { + // TODO + } + // When a 100 (Trying) response is generated, any Timestamp header field + // present in the request MUST be copied into this 100 (Trying) + // response. If there is a delay in generating the response, the UAS + // SHOULD add a delay value into the Timestamp value in the response. + // This value MUST contain the difference between the time of sending of + // the response and receipt of the request, measured in seconds. + // https://tools.ietf.org/html/rfc3261#section-8.2.6.1 + if (options.statusCode === 100) { + // TODO + } + // The From field of the response MUST equal the From header field of + // the request. The Call-ID header field of the response MUST equal the + // Call-ID header field of the request. The CSeq header field of the + // response MUST equal the CSeq field of the request. The Via header + // field values in the response MUST equal the Via header field values + // in the request and MUST maintain the same ordering. + // https://tools.ietf.org/html/rfc3261#section-8.2.6.2 + const fromHeader = "From: " + message.getHeader("From") + CRLF; + const callIdHeader = "Call-ID: " + message.callId + CRLF; + const cSeqHeader = "CSeq: " + message.cseq + " " + message.method + CRLF; + const viaHeaders = message.getHeaders("via").reduce((previous, current) => { + return previous + "Via: " + current + CRLF; + }, ""); + // If a request contained a To tag in the request, the To header field + // in the response MUST equal that of the request. However, if the To + // header field in the request did not contain a tag, the URI in the To + // header field in the response MUST equal the URI in the To header + // field; additionally, the UAS MUST add a tag to the To header field in + // the response (with the exception of the 100 (Trying) response, in + // which a tag MAY be present). This serves to identify the UAS that is + // responding, possibly resulting in a component of a dialog ID. The + // same tag MUST be used for all responses to that request, both final + // and provisional (again excepting the 100 (Trying)). + // https://tools.ietf.org/html/rfc3261#section-8.2.6.2 + let toHeader = "To: " + message.getHeader("to"); + if (options.statusCode > 100 && !message.parseHeader("to").hasParam("tag")) { + let toTag = options.toTag; + if (!toTag) { + // Stateless UAS Behavior... + // o To header tags MUST be generated for responses in a stateless + // manner - in a manner that will generate the same tag for the + // same request consistently. For information on tag construction + // see Section 19.3. + // https://tools.ietf.org/html/rfc3261#section-8.2.7 + toTag = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.newTag)(); // FIXME: newTag() currently generates random tags + } + toHeader += ";tag=" + toTag; + } + toHeader += CRLF; + // FIXME: TODO: needs review... moved to InviteUserAgentServer (as it is specific to that) + // let recordRouteHeaders = ""; + // if (request.method === C.INVITE && statusCode > 100 && statusCode <= 200) { + // recordRouteHeaders = request.getHeaders("record-route").reduce((previous, current) => { + // return previous + "Record-Route: " + current + CRLF; + // }, ""); + // } + // FIXME: TODO: needs review... + let supportedHeader = ""; + if (options.supported) { + supportedHeader = "Supported: " + options.supported.join(", ") + CRLF; + } + // FIXME: TODO: needs review... + let userAgentHeader = ""; + if (options.userAgent) { + userAgentHeader = "User-Agent: " + options.userAgent + CRLF; + } + let extensionHeaders = ""; + if (options.extraHeaders) { + extensionHeaders = options.extraHeaders.reduce((previous, current) => { + return previous + current.trim() + CRLF; + }, ""); + } + // The relative order of header fields with different field names is not + // significant. However, it is RECOMMENDED that header fields which are + // needed for proxy processing (Via, Route, Record-Route, Proxy-Require, + // Max-Forwards, and Proxy-Authorization, for example) appear towards + // the top of the message to facilitate rapid parsing. + // https://tools.ietf.org/html/rfc3261#section-7.3.1 + // response += recordRouteHeaders; + response += viaHeaders; + response += fromHeader; + response += toHeader; + response += cSeqHeader; + response += callIdHeader; + response += supportedHeader; + response += userAgentHeader; + response += extensionHeaders; + if (options.body) { + response += "Content-Type: " + options.body.contentType + CRLF; + response += "Content-Length: " + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.utf8Length)(options.body.content) + CRLF + CRLF; + response += options.body.content; + } + else { + response += "Content-Length: " + 0 + CRLF + CRLF; + } + return { message: response }; +} + + +/***/ }), +/* 84 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "InfoUserAgentServer": () => (/* binding */ InfoUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * INFO UAS. + * @public + */ +class InfoUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(dialog, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, dialog.userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 85 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReInviteUserAgentServer": () => (/* binding */ ReInviteUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * Re-INVITE UAS. + * @remarks + * 14 Modifying an Existing Session + * https://tools.ietf.org/html/rfc3261#section-14 + * 14.2 UAS Behavior + * https://tools.ietf.org/html/rfc3261#section-14.2 + * @public + */ +class ReInviteUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(dialog, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.InviteServerTransaction, dialog.userAgentCore, message, delegate); + dialog.reinviteUserAgentServer = this; + this.dialog = dialog; + } + /** + * Update the dialog signaling state on a 2xx response. + * @param options - Options bucket. + */ + accept(options = { statusCode: 200 }) { + // FIXME: The next two lines SHOULD go away, but I suppose it's technically harmless... + // These are here because some versions of SIP.js prior to 0.13.8 set the route set + // of all in dialog ACKs based on the Record-Route headers in the associated 2xx + // response. While this worked for dialog forming 2xx responses, it was technically + // broken for re-INVITE ACKS as it only worked if the UAS populated the Record-Route + // headers in the re-INVITE 2xx response (which is not required and a waste of bandwidth + // as the should be ignored if present in re-INVITE ACKS) and the UAS populated + // the Record-Route headers with the correct values (would be weird not too, but...). + // Anyway, for now the technically useless Record-Route headers are being added + // to maintain "backwards compatibility" with the older broken versions of SIP.js. + options.extraHeaders = options.extraHeaders || []; + options.extraHeaders = options.extraHeaders.concat(this.dialog.routeSet.map((route) => `Record-Route: ${route}`)); + // Send and return the response + const response = super.accept(options); + const session = this.dialog; + const result = Object.assign(Object.assign({}, response), { session }); + if (options.body) { + // Update dialog signaling state with offer/answer in body + this.dialog.signalingStateTransition(options.body); + } + // Update dialog + this.dialog.reConfirm(); + return result; + } + /** + * Update the dialog signaling state on a 1xx response. + * @param options - Progress options bucket. + */ + progress(options = { statusCode: 180 }) { + // Send and return the response + const response = super.progress(options); + const session = this.dialog; + const result = Object.assign(Object.assign({}, response), { session }); + // Update dialog signaling state + if (options.body) { + this.dialog.signalingStateTransition(options.body); + } + return result; + } + /** + * TODO: Not Yet Supported + * @param contacts - Contacts to redirect to. + * @param options - Redirect options bucket. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + redirect(contacts, options = { statusCode: 302 }) { + this.dialog.signalingStateRollback(); + this.dialog.reinviteUserAgentServer = undefined; // ACK will be handled by transaction + throw new Error("Unimplemented."); + } + /** + * 3.1 Background on Re-INVITE Handling by UASs + * An error response to a re-INVITE has the following semantics. As + * specified in Section 12.2.2 of RFC 3261 [RFC3261], if a re-INVITE is + * rejected, no state changes are performed. + * https://tools.ietf.org/html/rfc6141#section-3.1 + * @param options - Reject options bucket. + */ + reject(options = { statusCode: 488 }) { + this.dialog.signalingStateRollback(); + this.dialog.reinviteUserAgentServer = undefined; // ACK will be handled by transaction + return super.reject(options); + } +} + + +/***/ }), +/* 86 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "MessageUserAgentServer": () => (/* binding */ MessageUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * MESSAGE UAS. + * @public + */ +class MessageUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, core, message, delegate); + } +} + + +/***/ }), +/* 87 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "NotifyUserAgentServer": () => (/* binding */ NotifyUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function instanceOfDialog(object) { + return object.userAgentCore !== undefined; +} +/** + * NOTIFY UAS. + * @public + */ +class NotifyUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + /** + * NOTIFY UAS constructor. + * @param dialogOrCore - Dialog for in dialog NOTIFY, UserAgentCore for out of dialog NOTIFY (deprecated). + * @param message - Incoming NOTIFY request message. + */ + constructor(dialogOrCore, message, delegate) { + const userAgentCore = instanceOfDialog(dialogOrCore) ? dialogOrCore.userAgentCore : dialogOrCore; + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 88 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PrackUserAgentServer": () => (/* binding */ PrackUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * PRACK UAS. + * @public + */ +class PrackUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(dialog, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, dialog.userAgentCore, message, delegate); + // Update dialog signaling state with offer/answer in body + dialog.signalingStateTransition(message); + this.dialog = dialog; + } + /** + * Update the dialog signaling state on a 2xx response. + * @param options - Options bucket. + */ + accept(options = { statusCode: 200 }) { + if (options.body) { + // Update dialog signaling state with offer/answer in body + this.dialog.signalingStateTransition(options.body); + } + return super.accept(options); + } +} + + +/***/ }), +/* 89 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReferUserAgentServer": () => (/* binding */ ReferUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function instanceOfSessionDialog(object) { + return object.userAgentCore !== undefined; +} +/** + * REFER UAS. + * @public + */ +class ReferUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + /** + * REFER UAS constructor. + * @param dialogOrCore - Dialog for in dialog REFER, UserAgentCore for out of dialog REFER. + * @param message - Incoming REFER request message. + */ + constructor(dialogOrCore, message, delegate) { + const userAgentCore = instanceOfSessionDialog(dialogOrCore) ? dialogOrCore.userAgentCore : dialogOrCore; + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 90 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "PublishUserAgentClient": () => (/* binding */ PublishUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + +/** + * PUBLISH UAC. + * @public + */ +class PublishUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteClientTransaction, core, message, delegate); + } +} + + +/***/ }), +/* 91 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RegisterUserAgentClient": () => (/* binding */ RegisterUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + +/** + * REGISTER UAC. + * @public + */ +class RegisterUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteClientTransaction, core, message, delegate); + } +} + + +/***/ }), +/* 92 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SubscribeUserAgentClient": () => (/* binding */ SubscribeUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _dialogs_subscription_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(93); +/* harmony import */ var _subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(36); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + + + +/** + * SUBSCRIBE UAC. + * @remarks + * 4.1. Subscriber Behavior + * https://tools.ietf.org/html/rfc6665#section-4.1 + * + * User agent client for installation of a single subscription per SUBSCRIBE request. + * TODO: Support for installation of multiple subscriptions on forked SUBSCRIBE requests. + * @public + */ +class SubscribeUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(core, message, delegate) { + // Get event from request message. + const event = message.getHeader("Event"); + if (!event) { + throw new Error("Event undefined"); + } + // Get expires from request message. + const expires = message.getHeader("Expires"); + if (!expires) { + throw new Error("Expires undefined"); + } + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteClientTransaction, core, message, delegate); + this.delegate = delegate; + // FIXME: Subscriber id should also be matching on event id. + this.subscriberId = message.callId + message.fromTag + event; + this.subscriptionExpiresRequested = this.subscriptionExpires = Number(expires); + this.subscriptionEvent = event; + this.subscriptionState = _subscription__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.NotifyWait; + // Start waiting for a NOTIFY we can use to create a subscription. + this.waitNotifyStart(); + } + /** + * Destructor. + * Note that Timer N may live on waiting for an initial NOTIFY and + * the delegate may still receive that NOTIFY. If you don't want + * that behavior then either clear the delegate so the delegate + * doesn't get called (a 200 will be sent in response to the NOTIFY) + * or call `waitNotifyStop` which will clear Timer N and remove this + * UAC from the core (a 481 will be sent in response to the NOTIFY). + */ + dispose() { + super.dispose(); + } + /** + * Handle out of dialog NOTIFY associated with SUBSCRIBE request. + * This is the first NOTIFY received after the SUBSCRIBE request. + * @param uas - User agent server handling the subscription creating NOTIFY. + */ + onNotify(uas) { + // NOTIFY requests are matched to such SUBSCRIBE requests if they + // contain the same "Call-ID", a "To" header field "tag" parameter that + // matches the "From" header field "tag" parameter of the SUBSCRIBE + // request, and the same "Event" header field. Rules for comparisons of + // the "Event" header fields are described in Section 8.2.1. + // https://tools.ietf.org/html/rfc6665#section-4.4.1 + const event = uas.message.parseHeader("Event").event; + if (!event || event !== this.subscriptionEvent) { + this.logger.warn(`Failed to parse event.`); + uas.reject({ statusCode: 489 }); + return; + } + // NOTIFY requests MUST contain "Subscription-State" header fields that + // indicate the status of the subscription. + // https://tools.ietf.org/html/rfc6665#section-4.1.3 + const subscriptionState = uas.message.parseHeader("Subscription-State"); + if (!subscriptionState || !subscriptionState.state) { + this.logger.warn("Failed to parse subscription state."); + uas.reject({ statusCode: 489 }); + return; + } + // Validate subscription state. + const state = subscriptionState.state; + switch (state) { + case "pending": + break; + case "active": + break; + case "terminated": + break; + default: + this.logger.warn(`Invalid subscription state ${state}`); + uas.reject({ statusCode: 489 }); + return; + } + // Dialogs usages are created upon completion of a NOTIFY transaction + // for a new subscription, unless the NOTIFY request contains a + // "Subscription-State" of "terminated." + // https://tools.ietf.org/html/rfc6665#section-4.4.1 + if (state !== "terminated") { + // The Contact header field MUST be present and contain exactly one SIP + // or SIPS URI in any request that can result in the establishment of a + // dialog. + // https://tools.ietf.org/html/rfc3261#section-8.1.1.8 + const contact = uas.message.parseHeader("contact"); + if (!contact) { + this.logger.warn("Failed to parse contact."); + uas.reject({ statusCode: 489 }); + return; + } + } + // In accordance with the rules for proxying non-INVITE requests as + // defined in [RFC3261], successful SUBSCRIBE requests will receive only + // one 200-class response; however, due to forking, the subscription may + // have been accepted by multiple nodes. The subscriber MUST therefore + // be prepared to receive NOTIFY requests with "From:" tags that differ + // from the "To:" tag received in the SUBSCRIBE 200-class response. + // + // If multiple NOTIFY requests are received in different dialogs in + // response to a single SUBSCRIBE request, each dialog represents a + // different destination to which the SUBSCRIBE request was forked. + // Subscriber handling in such situations varies by event package; see + // Section 5.4.9 for details. + // https://tools.ietf.org/html/rfc6665#section-4.1.4 + // Each event package MUST specify whether forked SUBSCRIBE requests are + // allowed to install multiple subscriptions. + // + // If such behavior is not allowed, the first potential dialog- + // establishing message will create a dialog. All subsequent NOTIFY + // requests that correspond to the SUBSCRIBE request (i.e., have + // matching "To", "From", "Call-ID", and "Event" header fields, as well + // as "From" header field "tag" parameter and "Event" header field "id" + // parameter) but that do not match the dialog would be rejected with a + // 481 response. Note that the 200-class response to the SUBSCRIBE + // request can arrive after a matching NOTIFY request has been received; + // such responses might not correlate to the same dialog established by + // the NOTIFY request. Except as required to complete the SUBSCRIBE + // transaction, such non-matching 200-class responses are ignored. + // + // If installing of multiple subscriptions by way of a single forked + // SUBSCRIBE request is allowed, the subscriber establishes a new dialog + // towards each notifier by returning a 200-class response to each + // NOTIFY request. Each dialog is then handled as its own entity and is + // refreshed independently of the other dialogs. + // + // In the case that multiple subscriptions are allowed, the event + // package MUST specify whether merging of the notifications to form a + // single state is required, and how such merging is to be performed. + // Note that it is possible that some event packages may be defined in + // such a way that each dialog is tied to a mutually exclusive state + // that is unaffected by the other dialogs; this MUST be clearly stated + // if it is the case. + // https://tools.ietf.org/html/rfc6665#section-5.4.9 + // *** NOTE: This implementation is only for event packages which + // do not allow forked requests to install multiple subscriptions. + // As such and in accordance with the specification, we stop waiting + // and any future NOTIFY requests will be rejected with a 481. + if (this.dialog) { + throw new Error("Dialog already created. This implementation only supports install of single subscriptions."); + } + this.waitNotifyStop(); + // Update expires. + this.subscriptionExpires = subscriptionState.expires + ? Math.min(this.subscriptionExpires, Math.max(subscriptionState.expires, 0)) + : this.subscriptionExpires; + // Update subscription state. + switch (state) { + case "pending": + this.subscriptionState = _subscription__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Pending; + break; + case "active": + this.subscriptionState = _subscription__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Active; + break; + case "terminated": + this.subscriptionState = _subscription__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Terminated; + break; + default: + throw new Error(`Unrecognized state ${state}.`); + } + // Dialogs usages are created upon completion of a NOTIFY transaction + // for a new subscription, unless the NOTIFY request contains a + // "Subscription-State" of "terminated." + // https://tools.ietf.org/html/rfc6665#section-4.4.1 + if (this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_2__.SubscriptionState.Terminated) { + // Because the dialog usage is established by the NOTIFY request, the + // route set at the subscriber is taken from the NOTIFY request itself, + // as opposed to the route set present in the 200-class response to the + // SUBSCRIBE request. + // https://tools.ietf.org/html/rfc6665#section-4.4.1 + const dialogState = _dialogs_subscription_dialog__WEBPACK_IMPORTED_MODULE_3__.SubscriptionDialog.initialDialogStateForSubscription(this.message, uas.message); + // Subscription Initiated! :) + this.dialog = new _dialogs_subscription_dialog__WEBPACK_IMPORTED_MODULE_3__.SubscriptionDialog(this.subscriptionEvent, this.subscriptionExpires, this.subscriptionState, this.core, dialogState); + } + // Delegate. + if (this.delegate && this.delegate.onNotify) { + const request = uas; + const subscription = this.dialog; + this.delegate.onNotify({ request, subscription }); + } + else { + uas.accept(); + } + } + waitNotifyStart() { + if (!this.N) { + // Add ourselves to the core's subscriber map. + // This allows the core to route out of dialog NOTIFY messages to us. + this.core.subscribers.set(this.subscriberId, this); + this.N = setTimeout(() => this.timerN(), _timers__WEBPACK_IMPORTED_MODULE_4__.Timers.TIMER_N); + } + } + waitNotifyStop() { + if (this.N) { + // Remove ourselves to the core's subscriber map. + // Any future out of dialog NOTIFY messages will be rejected with a 481. + this.core.subscribers.delete(this.subscriberId); + clearTimeout(this.N); + this.N = undefined; + } + } + /** + * Receive a response from the transaction layer. + * @param message - Incoming response message. + */ + receiveResponse(message) { + if (!this.authenticationGuard(message)) { + return; + } + if (message.statusCode && message.statusCode >= 200 && message.statusCode < 300) { + // The "Expires" header field in a 200-class response to SUBSCRIBE + // request indicates the actual duration for which the subscription will + // remain active (unless refreshed). The received value might be + // smaller than the value indicated in the SUBSCRIBE request but cannot + // be larger; see Section 4.2.1 for details. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.1 + // The "Expires" values present in SUBSCRIBE 200-class responses behave + // in the same way as they do in REGISTER responses: the server MAY + // shorten the interval but MUST NOT lengthen it. + // + // If the duration specified in a SUBSCRIBE request is unacceptably + // short, the notifier may be able to send a 423 response, as + // described earlier in this section. + // + // 200-class responses to SUBSCRIBE requests will not generally contain + // any useful information beyond subscription duration; their primary + // purpose is to serve as a reliability mechanism. State information + // will be communicated via a subsequent NOTIFY request from the + // notifier. + // https://tools.ietf.org/html/rfc6665#section-4.2.1.1 + const expires = message.getHeader("Expires"); + if (!expires) { + this.logger.warn("Expires header missing in a 200-class response to SUBSCRIBE"); + } + else { + const subscriptionExpiresReceived = Number(expires); + if (subscriptionExpiresReceived > this.subscriptionExpiresRequested) { + this.logger.warn("Expires header in a 200-class response to SUBSCRIBE with a higher value than the one in the request"); + } + if (subscriptionExpiresReceived < this.subscriptionExpires) { + this.subscriptionExpires = subscriptionExpiresReceived; + } + } + // If a NOTIFY arrived before 200-class response a dialog may have been created. + // Updated the dialogs expiration only if this indicates earlier expiration. + if (this.dialog) { + if (this.dialog.subscriptionExpires > this.subscriptionExpires) { + this.dialog.subscriptionExpires = this.subscriptionExpires; + } + } + } + if (message.statusCode && message.statusCode >= 300 && message.statusCode < 700) { + this.waitNotifyStop(); // No NOTIFY will be sent after a negative final response. + } + super.receiveResponse(message); + } + /** + * To ensure that subscribers do not wait indefinitely for a + * subscription to be established, a subscriber starts a Timer N, set to + * 64*T1, when it sends a SUBSCRIBE request. If this Timer N expires + * prior to the receipt of a NOTIFY request, the subscriber considers + * the subscription failed, and cleans up any state associated with the + * subscription attempt. + * https://tools.ietf.org/html/rfc6665#section-4.1.2.4 + */ + timerN() { + this.logger.warn(`Timer N expired for SUBSCRIBE user agent client. Timed out waiting for NOTIFY.`); + this.waitNotifyStop(); + if (this.delegate && this.delegate.onNotifyTimeout) { + this.delegate.onNotifyTimeout(); + } + } +} + + +/***/ }), +/* 93 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SubscriptionDialog": () => (/* binding */ SubscriptionDialog) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29); +/* harmony import */ var _subscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(46); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(36); +/* harmony import */ var _user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(28); +/* harmony import */ var _user_agents_notify_user_agent_server__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(87); +/* harmony import */ var _user_agents_re_subscribe_user_agent_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(94); +/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69); + + + + + + + +/** + * Subscription Dialog. + * @remarks + * SIP-Specific Event Notification + * + * Abstract + * + * This document describes an extension to the Session Initiation + * Protocol (SIP) defined by RFC 3261. The purpose of this extension is + * to provide an extensible framework by which SIP nodes can request + * notification from remote nodes indicating that certain events have + * occurred. + * + * Note that the event notification mechanisms defined herein are NOT + * intended to be a general-purpose infrastructure for all classes of + * event subscription and notification. + * + * This document represents a backwards-compatible improvement on the + * original mechanism described by RFC 3265, taking into account several + * years of implementation experience. Accordingly, this document + * obsoletes RFC 3265. This document also updates RFC 4660 slightly to + * accommodate some small changes to the mechanism that were discussed + * in that document. + * + * https://tools.ietf.org/html/rfc6665 + * @public + */ +class SubscriptionDialog extends _dialog__WEBPACK_IMPORTED_MODULE_0__.Dialog { + constructor(subscriptionEvent, subscriptionExpires, subscriptionState, core, state, delegate) { + super(core, state); + this.delegate = delegate; + this._autoRefresh = false; + this._subscriptionEvent = subscriptionEvent; + this._subscriptionExpires = subscriptionExpires; + this._subscriptionExpiresInitial = subscriptionExpires; + this._subscriptionExpiresLastSet = Math.floor(Date.now() / 1000); + this._subscriptionRefresh = undefined; + this._subscriptionRefreshLastSet = undefined; + this._subscriptionState = subscriptionState; + this.logger = core.loggerFactory.getLogger("sip.subscribe-dialog"); + this.logger.log(`SUBSCRIBE dialog ${this.id} constructed`); + } + /** + * When a UAC receives a response that establishes a dialog, it + * constructs the state of the dialog. This state MUST be maintained + * for the duration of the dialog. + * https://tools.ietf.org/html/rfc3261#section-12.1.2 + * @param outgoingRequestMessage - Outgoing request message for dialog. + * @param incomingResponseMessage - Incoming response message creating dialog. + */ + static initialDialogStateForSubscription(outgoingSubscribeRequestMessage, incomingNotifyRequestMessage) { + // If the request was sent over TLS, and the Request-URI contained a + // SIPS URI, the "secure" flag is set to TRUE. + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + const secure = false; // FIXME: Currently no support for TLS. + // The route set MUST be set to the list of URIs in the Record-Route + // header field from the response, taken in reverse order and preserving + // all URI parameters. If no Record-Route header field is present in + // the response, the route set MUST be set to the empty set. This route + // set, even if empty, overrides any pre-existing route set for future + // requests in this dialog. The remote target MUST be set to the URI + // from the Contact header field of the response. + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + const routeSet = incomingNotifyRequestMessage.getHeaders("record-route"); + const contact = incomingNotifyRequestMessage.parseHeader("contact"); + if (!contact) { + // TODO: Review to make sure this will never happen + throw new Error("Contact undefined."); + } + if (!(contact instanceof _messages__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader)) { + throw new Error("Contact not instance of NameAddrHeader."); + } + const remoteTarget = contact.uri; + // The local sequence number MUST be set to the value of the sequence + // number in the CSeq header field of the request. The remote sequence + // number MUST be empty (it is established when the remote UA sends a + // request within the dialog). The call identifier component of the + // dialog ID MUST be set to the value of the Call-ID in the request. + // The local tag component of the dialog ID MUST be set to the tag in + // the From field in the request, and the remote tag component of the + // dialog ID MUST be set to the tag in the To field of the response. A + // UAC MUST be prepared to receive a response without a tag in the To + // field, in which case the tag is considered to have a value of null. + // + // This is to maintain backwards compatibility with RFC 2543, which + // did not mandate To tags. + // + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + const localSequenceNumber = outgoingSubscribeRequestMessage.cseq; + const remoteSequenceNumber = undefined; + const callId = outgoingSubscribeRequestMessage.callId; + const localTag = outgoingSubscribeRequestMessage.fromTag; + const remoteTag = incomingNotifyRequestMessage.fromTag; + if (!callId) { + // TODO: Review to make sure this will never happen + throw new Error("Call id undefined."); + } + if (!localTag) { + // TODO: Review to make sure this will never happen + throw new Error("From tag undefined."); + } + if (!remoteTag) { + // TODO: Review to make sure this will never happen + throw new Error("To tag undefined."); // FIXME: No backwards compatibility with RFC 2543 + } + // The remote URI MUST be set to the URI in the To field, and the local + // URI MUST be set to the URI in the From field. + // https://tools.ietf.org/html/rfc3261#section-12.1.2 + if (!outgoingSubscribeRequestMessage.from) { + // TODO: Review to make sure this will never happen + throw new Error("From undefined."); + } + if (!outgoingSubscribeRequestMessage.to) { + // TODO: Review to make sure this will never happen + throw new Error("To undefined."); + } + const localURI = outgoingSubscribeRequestMessage.from.uri; + const remoteURI = outgoingSubscribeRequestMessage.to.uri; + // A dialog can also be in the "early" state, which occurs when it is + // created with a provisional response, and then transition to the + // "confirmed" state when a 2xx final response arrives. + // https://tools.ietf.org/html/rfc3261#section-12 + const early = false; + const dialogState = { + id: callId + localTag + remoteTag, + early, + callId, + localTag, + remoteTag, + localSequenceNumber, + remoteSequenceNumber, + localURI, + remoteURI, + remoteTarget, + routeSet, + secure + }; + return dialogState; + } + dispose() { + super.dispose(); + if (this.N) { + clearTimeout(this.N); + this.N = undefined; + } + this.refreshTimerClear(); + this.logger.log(`SUBSCRIBE dialog ${this.id} destroyed`); + } + get autoRefresh() { + return this._autoRefresh; + } + set autoRefresh(autoRefresh) { + this._autoRefresh = true; + this.refreshTimerSet(); + } + get subscriptionEvent() { + return this._subscriptionEvent; + } + /** Number of seconds until subscription expires. */ + get subscriptionExpires() { + const secondsSinceLastSet = Math.floor(Date.now() / 1000) - this._subscriptionExpiresLastSet; + const secondsUntilExpires = this._subscriptionExpires - secondsSinceLastSet; + return Math.max(secondsUntilExpires, 0); + } + set subscriptionExpires(expires) { + if (expires < 0) { + throw new Error("Expires must be greater than or equal to zero."); + } + this._subscriptionExpires = expires; + this._subscriptionExpiresLastSet = Math.floor(Date.now() / 1000); + if (this.autoRefresh) { + const refresh = this.subscriptionRefresh; + if (refresh === undefined || refresh >= expires) { + this.refreshTimerSet(); + } + } + } + get subscriptionExpiresInitial() { + return this._subscriptionExpiresInitial; + } + /** Number of seconds until subscription auto refresh. */ + get subscriptionRefresh() { + if (this._subscriptionRefresh === undefined || this._subscriptionRefreshLastSet === undefined) { + return undefined; + } + const secondsSinceLastSet = Math.floor(Date.now() / 1000) - this._subscriptionRefreshLastSet; + const secondsUntilExpires = this._subscriptionRefresh - secondsSinceLastSet; + return Math.max(secondsUntilExpires, 0); + } + get subscriptionState() { + return this._subscriptionState; + } + /** + * Receive in dialog request message from transport. + * @param message - The incoming request message. + */ + receiveRequest(message) { + this.logger.log(`SUBSCRIBE dialog ${this.id} received ${message.method} request`); + // Request within a dialog out of sequence guard. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + if (!this.sequenceGuard(message)) { + this.logger.log(`SUBSCRIBE dialog ${this.id} rejected out of order ${message.method} request.`); + return; + } + // Request within a dialog common processing. + // https://tools.ietf.org/html/rfc3261#section-12.2.2 + super.receiveRequest(message); + // Switch on method and then delegate. + switch (message.method) { + case _messages__WEBPACK_IMPORTED_MODULE_2__.C.NOTIFY: + this.onNotify(message); + break; + default: + this.logger.log(`SUBSCRIBE dialog ${this.id} received unimplemented ${message.method} request`); + this.core.replyStateless(message, { statusCode: 501 }); + break; + } + } + /** + * 4.1.2.2. Refreshing of Subscriptions + * https://tools.ietf.org/html/rfc6665#section-4.1.2.2 + */ + refresh() { + const allowHeader = "Allow: " + _user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_3__.AllowedMethods.toString(); + const options = {}; + options.extraHeaders = (options.extraHeaders || []).slice(); + options.extraHeaders.push(allowHeader); + options.extraHeaders.push("Event: " + this.subscriptionEvent); + options.extraHeaders.push("Expires: " + this.subscriptionExpiresInitial); + options.extraHeaders.push("Contact: " + this.core.configuration.contact.toString()); + return this.subscribe(undefined, options); + } + /** + * 4.1.2.2. Refreshing of Subscriptions + * https://tools.ietf.org/html/rfc6665#section-4.1.2.2 + * @param delegate - Delegate to handle responses. + * @param options - Options bucket. + */ + subscribe(delegate, options = {}) { + if (this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending && this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Active) { + // FIXME: This needs to be a proper exception + throw new Error(`Invalid state ${this.subscriptionState}. May only re-subscribe while in state "pending" or "active".`); + } + this.logger.log(`SUBSCRIBE dialog ${this.id} sending SUBSCRIBE request`); + const uac = new _user_agents_re_subscribe_user_agent_client__WEBPACK_IMPORTED_MODULE_5__.ReSubscribeUserAgentClient(this, delegate, options); + // Abort any outstanding timer (as it would otherwise become guaranteed to terminate us). + if (this.N) { + clearTimeout(this.N); + this.N = undefined; + } + // When refreshing a subscription, a subscriber starts Timer N, set to + // 64*T1, when it sends the SUBSCRIBE request. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.2 + this.N = setTimeout(() => this.timerN(), _timers__WEBPACK_IMPORTED_MODULE_6__.Timers.TIMER_N); + return uac; + } + /** + * 4.4.1. Dialog Creation and Termination + * A subscription is destroyed after a notifier sends a NOTIFY request + * with a "Subscription-State" of "terminated", or in certain error + * situations described elsewhere in this document. + * https://tools.ietf.org/html/rfc6665#section-4.4.1 + */ + terminate() { + this.stateTransition(_subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Terminated); + this.onTerminated(); + } + /** + * 4.1.2.3. Unsubscribing + * https://tools.ietf.org/html/rfc6665#section-4.1.2.3 + */ + unsubscribe() { + const allowHeader = "Allow: " + _user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_3__.AllowedMethods.toString(); + const options = {}; + options.extraHeaders = (options.extraHeaders || []).slice(); + options.extraHeaders.push(allowHeader); + options.extraHeaders.push("Event: " + this.subscriptionEvent); + options.extraHeaders.push("Expires: 0"); + options.extraHeaders.push("Contact: " + this.core.configuration.contact.toString()); + return this.subscribe(undefined, options); + } + /** + * Handle in dialog NOTIFY requests. + * This does not include the first NOTIFY which created the dialog. + * @param message - The incoming NOTIFY request message. + */ + onNotify(message) { + // If, for some reason, the event package designated in the "Event" + // header field of the NOTIFY request is not supported, the subscriber + // will respond with a 489 (Bad Event) response. + // https://tools.ietf.org/html/rfc6665#section-4.1.3 + const event = message.parseHeader("Event").event; + if (!event || event !== this.subscriptionEvent) { + this.core.replyStateless(message, { statusCode: 489 }); + return; + } + // In the state diagram, "Re-subscription times out" means that an + // attempt to refresh or update the subscription using a new SUBSCRIBE + // request does not result in a NOTIFY request before the corresponding + // Timer N expires. + // https://tools.ietf.org/html/rfc6665#section-4.1.2 + if (this.N) { + clearTimeout(this.N); + this.N = undefined; + } + // NOTIFY requests MUST contain "Subscription-State" header fields that + // indicate the status of the subscription. + // https://tools.ietf.org/html/rfc6665#section-4.1.3 + const subscriptionState = message.parseHeader("Subscription-State"); + if (!subscriptionState || !subscriptionState.state) { + this.core.replyStateless(message, { statusCode: 489 }); + return; + } + const state = subscriptionState.state; + const expires = subscriptionState.expires ? Math.max(subscriptionState.expires, 0) : undefined; + // Update our state and expiration. + switch (state) { + case "pending": + this.stateTransition(_subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending, expires); + break; + case "active": + this.stateTransition(_subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Active, expires); + break; + case "terminated": + this.stateTransition(_subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Terminated, expires); + break; + default: + this.logger.warn("Unrecognized subscription state."); + break; + } + // Delegate remainder of NOTIFY handling. + const uas = new _user_agents_notify_user_agent_server__WEBPACK_IMPORTED_MODULE_7__.NotifyUserAgentServer(this, message); + if (this.delegate && this.delegate.onNotify) { + this.delegate.onNotify(uas); + } + else { + uas.accept(); + } + } + onRefresh(request) { + if (this.delegate && this.delegate.onRefresh) { + this.delegate.onRefresh(request); + } + } + onTerminated() { + if (this.delegate && this.delegate.onTerminated) { + this.delegate.onTerminated(); + } + } + refreshTimerClear() { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer); + this.refreshTimer = undefined; + } + } + refreshTimerSet() { + this.refreshTimerClear(); + if (this.autoRefresh && this.subscriptionExpires > 0) { + const refresh = this.subscriptionExpires * 900; + this._subscriptionRefresh = Math.floor(refresh / 1000); + this._subscriptionRefreshLastSet = Math.floor(Date.now() / 1000); + this.refreshTimer = setTimeout(() => { + this.refreshTimer = undefined; + this._subscriptionRefresh = undefined; + this._subscriptionRefreshLastSet = undefined; + this.onRefresh(this.refresh()); + }, refresh); + } + } + stateTransition(newState, newExpires) { + // Assert valid state transitions. + const invalidStateTransition = () => { + this.logger.warn(`Invalid subscription state transition from ${this.subscriptionState} to ${newState}`); + }; + switch (newState) { + case _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Initial: + invalidStateTransition(); + return; + case _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.NotifyWait: + invalidStateTransition(); + return; + case _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending: + if (this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.NotifyWait && + this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending) { + invalidStateTransition(); + return; + } + break; + case _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Active: + if (this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.NotifyWait && + this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending && + this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Active) { + invalidStateTransition(); + return; + } + break; + case _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Terminated: + if (this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.NotifyWait && + this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending && + this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Active) { + invalidStateTransition(); + return; + } + break; + default: + invalidStateTransition(); + return; + } + // If the "Subscription-State" value is "pending", the subscription has + // been received by the notifier, but there is insufficient policy + // information to grant or deny the subscription yet. If the header + // field also contains an "expires" parameter, the subscriber SHOULD + // take it as the authoritative subscription duration and adjust + // accordingly. No further action is necessary on the part of the + // subscriber. The "retry-after" and "reason" parameters have no + // semantics for "pending". + // https://tools.ietf.org/html/rfc6665#section-4.1.3 + if (newState === _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Pending) { + if (newExpires) { + this.subscriptionExpires = newExpires; + } + } + // If the "Subscription-State" header field value is "active", it means + // that the subscription has been accepted and (in general) has been + // authorized. If the header field also contains an "expires" + // parameter, the subscriber SHOULD take it as the authoritative + // subscription duration and adjust accordingly. The "retry-after" and + // "reason" parameters have no semantics for "active". + // https://tools.ietf.org/html/rfc6665#section-4.1.3 + if (newState === _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Active) { + if (newExpires) { + this.subscriptionExpires = newExpires; + } + } + // If the "Subscription-State" value is "terminated", the subscriber + // MUST consider the subscription terminated. The "expires" parameter + // has no semantics for "terminated" -- notifiers SHOULD NOT include an + // "expires" parameter on a "Subscription-State" header field with a + // value of "terminated", and subscribers MUST ignore any such + // parameter, if present. + if (newState === _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Terminated) { + this.dispose(); + } + this._subscriptionState = newState; + } + /** + * When refreshing a subscription, a subscriber starts Timer N, set to + * 64*T1, when it sends the SUBSCRIBE request. If this Timer N expires + * prior to the receipt of a NOTIFY request, the subscriber considers + * the subscription terminated. If the subscriber receives a success + * response to the SUBSCRIBE request that indicates that no NOTIFY + * request will be generated -- such as the 204 response defined for use + * with the optional extension described in [RFC5839] -- then it MUST + * cancel Timer N. + * https://tools.ietf.org/html/rfc6665#section-4.1.2.2 + */ + timerN() { + this.logger.warn(`Timer N expired for SUBSCRIBE dialog. Timed out waiting for NOTIFY.`); + if (this.subscriptionState !== _subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Terminated) { + this.stateTransition(_subscription__WEBPACK_IMPORTED_MODULE_4__.SubscriptionState.Terminated); + this.onTerminated(); + } + } +} + + +/***/ }), +/* 94 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReSubscribeUserAgentClient": () => (/* binding */ ReSubscribeUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + + +/** + * Re-SUBSCRIBE UAC. + * @public + */ +class ReSubscribeUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(dialog, delegate, options) { + const message = dialog.createOutgoingRequestMessage(_messages__WEBPACK_IMPORTED_MODULE_1__.C.SUBSCRIBE, options); + super(_transactions__WEBPACK_IMPORTED_MODULE_2__.NonInviteClientTransaction, dialog.userAgentCore, message, delegate); + this.dialog = dialog; + } + waitNotifyStop() { + // TODO: Placeholder. Not utilized currently. + return; + } + /** + * Receive a response from the transaction layer. + * @param message - Incoming response message. + */ + receiveResponse(message) { + if (message.statusCode && message.statusCode >= 200 && message.statusCode < 300) { + // The "Expires" header field in a 200-class response to SUBSCRIBE + // request indicates the actual duration for which the subscription will + // remain active (unless refreshed). The received value might be + // smaller than the value indicated in the SUBSCRIBE request but cannot + // be larger; see Section 4.2.1 for details. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.1 + const expires = message.getHeader("Expires"); + if (!expires) { + this.logger.warn("Expires header missing in a 200-class response to SUBSCRIBE"); + } + else { + const subscriptionExpiresReceived = Number(expires); + if (this.dialog.subscriptionExpires > subscriptionExpiresReceived) { + this.dialog.subscriptionExpires = subscriptionExpiresReceived; + } + } + } + if (message.statusCode && message.statusCode >= 400 && message.statusCode < 700) { + // If a SUBSCRIBE request to refresh a subscription receives a 404, 405, + // 410, 416, 480-485, 489, 501, or 604 response, the subscriber MUST + // consider the subscription terminated. (See [RFC5057] for further + // details and notes about the effect of error codes on dialogs and + // usages within dialog, such as subscriptions). If the subscriber + // wishes to re-subscribe to the state, he does so by composing an + // unrelated initial SUBSCRIBE request with a freshly generated Call-ID + // and a new, unique "From" tag (see Section 4.1.2.1). + // https://tools.ietf.org/html/rfc6665#section-4.1.2.2 + const errorCodes = [404, 405, 410, 416, 480, 481, 482, 483, 484, 485, 489, 501, 604]; + if (errorCodes.includes(message.statusCode)) { + this.dialog.terminate(); + } + // If a SUBSCRIBE request to refresh a subscription fails with any error + // code other than those listed above, the original subscription is + // still considered valid for the duration of the most recently known + // "Expires" value as negotiated by the most recent successful SUBSCRIBE + // transaction, or as communicated by a NOTIFY request in its + // "Subscription-State" header field "expires" parameter. + // https://tools.ietf.org/html/rfc6665#section-4.1.2.2 + } + super.receiveResponse(message); + } +} + + +/***/ }), +/* 95 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "InviteUserAgentServer": () => (/* binding */ InviteUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _dialogs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69); +/* harmony import */ var _dialogs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(35); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(30); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71); +/* harmony import */ var _user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + + + + + +/** + * INVITE UAS. + * @remarks + * 13 Initiating a Session + * https://tools.ietf.org/html/rfc3261#section-13 + * 13.1 Overview + * https://tools.ietf.org/html/rfc3261#section-13.1 + * 13.3 UAS Processing + * https://tools.ietf.org/html/rfc3261#section-13.3 + * @public + */ +class InviteUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.InviteServerTransaction, core, message, delegate); + this.core = core; + } + dispose() { + if (this.earlyDialog) { + this.earlyDialog.dispose(); + } + super.dispose(); + } + /** + * 13.3.1.4 The INVITE is Accepted + * The UAS core generates a 2xx response. This response establishes a + * dialog, and therefore follows the procedures of Section 12.1.1 in + * addition to those of Section 8.2.6. + * https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + * @param options - Accept options bucket. + */ + accept(options = { statusCode: 200 }) { + if (!this.acceptable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_2__.TransactionStateError(`${this.message.method} not acceptable in state ${this.transaction.state}.`); + } + // This response establishes a dialog... + // https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + if (!this.confirmedDialog) { + if (this.earlyDialog) { + this.earlyDialog.confirm(); + this.confirmedDialog = this.earlyDialog; + this.earlyDialog = undefined; + } + else { + const transaction = this.transaction; + if (!(transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_1__.InviteServerTransaction)) { + throw new Error("Transaction not instance of InviteClientTransaction."); + } + const state = _dialogs__WEBPACK_IMPORTED_MODULE_3__.Dialog.initialDialogStateForUserAgentServer(this.message, this.toTag); + this.confirmedDialog = new _dialogs__WEBPACK_IMPORTED_MODULE_4__.SessionDialog(transaction, this.core, state); + } + } + // When a UAS responds to a request with a response that establishes a + // dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route + // header field values from the request into the response (including the + // URIs, URI parameters, and any Record-Route header field parameters, + // whether they are known or unknown to the UAS) and MUST maintain the + // order of those values. The UAS MUST add a Contact header field to + // the response. The Contact header field contains an address where the + // UAS would like to be contacted for subsequent requests in the dialog + // (which includes the ACK for a 2xx response in the case of an INVITE). + // Generally, the host portion of this URI is the IP address or FQDN of + // the host. The URI provided in the Contact header field MUST be a SIP + // or SIPS URI. If the request that initiated the dialog contained a + // SIPS URI in the Request-URI or in the top Record-Route header field + // value, if there was any, or the Contact header field if there was no + // Record-Route header field, the Contact header field in the response + // MUST be a SIPS URI. The URI SHOULD have global scope (that is, the + // same URI can be used in messages outside this dialog). The same way, + // the scope of the URI in the Contact header field of the INVITE is not + // limited to this dialog either. It can therefore be used in messages + // to the UAC even outside this dialog. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const recordRouteHeader = this.message.getHeaders("record-route").map((header) => `Record-Route: ${header}`); + const contactHeader = `Contact: ${this.core.configuration.contact.toString()}`; + // A 2xx response to an INVITE SHOULD contain the Allow header field and + // the Supported header field, and MAY contain the Accept header field. + // Including these header fields allows the UAC to determine the + // features and extensions supported by the UAS for the duration of the + // call, without probing. + // https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + // FIXME: TODO: This should not be hard coded. + const allowHeader = "Allow: " + _user_agent_core_allowed_methods__WEBPACK_IMPORTED_MODULE_5__.AllowedMethods.toString(); + // FIXME: TODO: Supported header (see reply()) + // FIXME: TODO: Accept header + // If the INVITE request contained an offer, and the UAS had not yet + // sent an answer, the 2xx MUST contain an answer. If the INVITE did + // not contain an offer, the 2xx MUST contain an offer if the UAS had + // not yet sent an offer. + // https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + if (!options.body) { + if (this.confirmedDialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Stable) { + options.body = this.confirmedDialog.answer; // resend the answer sent in provisional response + } + else if (this.confirmedDialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Initial || + this.confirmedDialog.signalingState === _session__WEBPACK_IMPORTED_MODULE_6__.SignalingState.HaveRemoteOffer) { + throw new Error("Response must have a body."); + } + } + options.statusCode = options.statusCode || 200; + options.extraHeaders = options.extraHeaders || []; + options.extraHeaders = options.extraHeaders.concat(recordRouteHeader); + options.extraHeaders.push(allowHeader); + options.extraHeaders.push(contactHeader); + const response = super.accept(options); + const session = this.confirmedDialog; + const result = Object.assign(Object.assign({}, response), { session }); + // Update dialog signaling state + if (options.body) { + // Once the UAS has sent or received an answer to the initial + // offer, it MUST NOT generate subsequent offers in any responses + // to the initial INVITE. This means that a UAS based on this + // specification alone can never generate subsequent offers until + // completion of the initial transaction. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + if (this.confirmedDialog.signalingState !== _session__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Stable) { + this.confirmedDialog.signalingStateTransition(options.body); + } + } + return result; + } + /** + * 13.3.1.1 Progress + * If the UAS is not able to answer the invitation immediately, it can + * choose to indicate some kind of progress to the UAC (for example, an + * indication that a phone is ringing). This is accomplished with a + * provisional response between 101 and 199. These provisional + * responses establish early dialogs and therefore follow the procedures + * of Section 12.1.1 in addition to those of Section 8.2.6. A UAS MAY + * send as many provisional responses as it likes. Each of these MUST + * indicate the same dialog ID. However, these will not be delivered + * reliably. + * + * If the UAS desires an extended period of time to answer the INVITE, + * it will need to ask for an "extension" in order to prevent proxies + * from canceling the transaction. A proxy has the option of canceling + * a transaction when there is a gap of 3 minutes between responses in a + * transaction. To prevent cancellation, the UAS MUST send a non-100 + * provisional response at every minute, to handle the possibility of + * lost provisional responses. + * https://tools.ietf.org/html/rfc3261#section-13.3.1.1 + * @param options - Progress options bucket. + */ + progress(options = { statusCode: 180 }) { + if (!this.progressable) { + throw new _exceptions__WEBPACK_IMPORTED_MODULE_2__.TransactionStateError(`${this.message.method} not progressable in state ${this.transaction.state}.`); + } + // This response establishes a dialog... + // https://tools.ietf.org/html/rfc3261#section-13.3.1.4 + if (!this.earlyDialog) { + const transaction = this.transaction; + if (!(transaction instanceof _transactions__WEBPACK_IMPORTED_MODULE_1__.InviteServerTransaction)) { + throw new Error("Transaction not instance of InviteClientTransaction."); + } + const state = _dialogs__WEBPACK_IMPORTED_MODULE_3__.Dialog.initialDialogStateForUserAgentServer(this.message, this.toTag, true); + this.earlyDialog = new _dialogs__WEBPACK_IMPORTED_MODULE_4__.SessionDialog(transaction, this.core, state); + } + // When a UAS responds to a request with a response that establishes a + // dialog (such as a 2xx to INVITE), the UAS MUST copy all Record-Route + // header field values from the request into the response (including the + // URIs, URI parameters, and any Record-Route header field parameters, + // whether they are known or unknown to the UAS) and MUST maintain the + // order of those values. The UAS MUST add a Contact header field to + // the response. The Contact header field contains an address where the + // UAS would like to be contacted for subsequent requests in the dialog + // (which includes the ACK for a 2xx response in the case of an INVITE). + // Generally, the host portion of this URI is the IP address or FQDN of + // the host. The URI provided in the Contact header field MUST be a SIP + // or SIPS URI. If the request that initiated the dialog contained a + // SIPS URI in the Request-URI or in the top Record-Route header field + // value, if there was any, or the Contact header field if there was no + // Record-Route header field, the Contact header field in the response + // MUST be a SIPS URI. The URI SHOULD have global scope (that is, the + // same URI can be used in messages outside this dialog). The same way, + // the scope of the URI in the Contact header field of the INVITE is not + // limited to this dialog either. It can therefore be used in messages + // to the UAC even outside this dialog. + // https://tools.ietf.org/html/rfc3261#section-12.1.1 + const recordRouteHeader = this.message.getHeaders("record-route").map((header) => `Record-Route: ${header}`); + const contactHeader = `Contact: ${this.core.configuration.contact}`; + options.extraHeaders = options.extraHeaders || []; + options.extraHeaders = options.extraHeaders.concat(recordRouteHeader); + options.extraHeaders.push(contactHeader); + const response = super.progress(options); + const session = this.earlyDialog; + const result = Object.assign(Object.assign({}, response), { session }); + // Update dialog signaling state + if (options.body) { + // Once the UAS has sent or received an answer to the initial + // offer, it MUST NOT generate subsequent offers in any responses + // to the initial INVITE. This means that a UAS based on this + // specification alone can never generate subsequent offers until + // completion of the initial transaction. + // https://tools.ietf.org/html/rfc3261#section-13.2.1 + if (this.earlyDialog.signalingState !== _session__WEBPACK_IMPORTED_MODULE_6__.SignalingState.Stable) { + this.earlyDialog.signalingStateTransition(options.body); + } + } + return result; + } + /** + * 13.3.1.2 The INVITE is Redirected + * If the UAS decides to redirect the call, a 3xx response is sent. A + * 300 (Multiple Choices), 301 (Moved Permanently) or 302 (Moved + * Temporarily) response SHOULD contain a Contact header field + * containing one or more URIs of new addresses to be tried. The + * response is passed to the INVITE server transaction, which will deal + * with its retransmissions. + * https://tools.ietf.org/html/rfc3261#section-13.3.1.2 + * @param contacts - Contacts to redirect to. + * @param options - Redirect options bucket. + */ + redirect(contacts, options = { statusCode: 302 }) { + return super.redirect(contacts, options); + } + /** + * 13.3.1.3 The INVITE is Rejected + * A common scenario occurs when the callee is currently not willing or + * able to take additional calls at this end system. A 486 (Busy Here) + * SHOULD be returned in such a scenario. + * https://tools.ietf.org/html/rfc3261#section-13.3.1.3 + * @param options - Reject options bucket. + */ + reject(options = { statusCode: 486 }) { + return super.reject(options); + } +} + + +/***/ }), +/* 96 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "RegisterUserAgentServer": () => (/* binding */ RegisterUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * REGISTER UAS. + * @public + */ +class RegisterUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, core, message, delegate); + this.core = core; + } +} + + +/***/ }), +/* 97 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SubscribeUserAgentServer": () => (/* binding */ SubscribeUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * SUBSCRIBE UAS. + * @public + */ +class SubscribeUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, core, message, delegate); + this.core = core; + } +} + + +/***/ }), +/* 98 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Parser": () => (/* binding */ Parser) +/* harmony export */ }); +/* harmony import */ var _grammar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21); +/* harmony import */ var _incoming_request_message__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(18); +/* harmony import */ var _incoming_response_message__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26); +/* eslint-disable no-inner-declarations */ +/* eslint-disable @typescript-eslint/no-namespace */ + + + +/** + * Extract and parse every header of a SIP message. + * @internal + */ +var Parser; +(function (Parser) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function getHeader(data, headerStart) { + // 'start' position of the header. + let start = headerStart; + // 'end' position of the header. + let end = 0; + // 'partial end' position of the header. + let partialEnd = 0; + // End of message. + if (data.substring(start, start + 2).match(/(^\r\n)/)) { + return -2; + } + while (end === 0) { + // Partial End of Header. + partialEnd = data.indexOf("\r\n", start); + // 'indexOf' returns -1 if the value to be found never occurs. + if (partialEnd === -1) { + return partialEnd; + } + if (!data.substring(partialEnd + 2, partialEnd + 4).match(/(^\r\n)/) && + data.charAt(partialEnd + 2).match(/(^\s+)/)) { + // Not the end of the message. Continue from the next position. + start = partialEnd + 2; + } + else { + end = partialEnd; + } + } + return end; + } + Parser.getHeader = getHeader; + function parseHeader(message, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data, headerStart, headerEnd) { + const hcolonIndex = data.indexOf(":", headerStart); + const headerName = data.substring(headerStart, hcolonIndex).trim(); + const headerValue = data.substring(hcolonIndex + 1, headerEnd).trim(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let parsed; + // If header-field is well-known, parse it. + switch (headerName.toLowerCase()) { + case "via": + case "v": + message.addHeader("via", headerValue); + if (message.getHeaders("via").length === 1) { + parsed = message.parseHeader("Via"); + if (parsed) { + message.via = parsed; + message.viaBranch = parsed.branch; + } + } + else { + parsed = 0; + } + break; + case "from": + case "f": + message.setHeader("from", headerValue); + parsed = message.parseHeader("from"); + if (parsed) { + message.from = parsed; + message.fromTag = parsed.getParam("tag"); + } + break; + case "to": + case "t": + message.setHeader("to", headerValue); + parsed = message.parseHeader("to"); + if (parsed) { + message.to = parsed; + message.toTag = parsed.getParam("tag"); + } + break; + case "record-route": + parsed = _grammar__WEBPACK_IMPORTED_MODULE_0__.Grammar.parse(headerValue, "Record_Route"); + if (parsed === -1) { + parsed = undefined; + break; + } + if (!(parsed instanceof Array)) { + parsed = undefined; + break; + } + parsed.forEach((header) => { + message.addHeader("record-route", headerValue.substring(header.position, header.offset)); + message.headers["Record-Route"][message.getHeaders("record-route").length - 1].parsed = header.parsed; + }); + break; + case "call-id": + case "i": + message.setHeader("call-id", headerValue); + parsed = message.parseHeader("call-id"); + if (parsed) { + message.callId = headerValue; + } + break; + case "contact": + case "m": + parsed = _grammar__WEBPACK_IMPORTED_MODULE_0__.Grammar.parse(headerValue, "Contact"); + if (parsed === -1) { + parsed = undefined; + break; + } + if (!(parsed instanceof Array)) { + parsed = undefined; + break; + } + parsed.forEach((header) => { + message.addHeader("contact", headerValue.substring(header.position, header.offset)); + message.headers.Contact[message.getHeaders("contact").length - 1].parsed = header.parsed; + }); + break; + case "content-length": + case "l": + message.setHeader("content-length", headerValue); + parsed = message.parseHeader("content-length"); + break; + case "content-type": + case "c": + message.setHeader("content-type", headerValue); + parsed = message.parseHeader("content-type"); + break; + case "cseq": + message.setHeader("cseq", headerValue); + parsed = message.parseHeader("cseq"); + if (parsed) { + message.cseq = parsed.value; + } + if (message instanceof _incoming_response_message__WEBPACK_IMPORTED_MODULE_1__.IncomingResponseMessage) { + message.method = parsed.method; + } + break; + case "max-forwards": + message.setHeader("max-forwards", headerValue); + parsed = message.parseHeader("max-forwards"); + break; + case "www-authenticate": + message.setHeader("www-authenticate", headerValue); + parsed = message.parseHeader("www-authenticate"); + break; + case "proxy-authenticate": + message.setHeader("proxy-authenticate", headerValue); + parsed = message.parseHeader("proxy-authenticate"); + break; + case "refer-to": + case "r": + message.setHeader("refer-to", headerValue); + parsed = message.parseHeader("refer-to"); + if (parsed) { + message.referTo = parsed; + } + break; + default: + // Do not parse this header. + message.addHeader(headerName.toLowerCase(), headerValue); + parsed = 0; + } + if (parsed === undefined) { + return { + error: "error parsing header '" + headerName + "'" + }; + } + else { + return true; + } + } + Parser.parseHeader = parseHeader; + function parseMessage(data, logger) { + let headerStart = 0; + let headerEnd = data.indexOf("\r\n"); + if (headerEnd === -1) { + logger.warn("no CRLF found, not a SIP message, discarded"); + return; + } + // Parse first line. Check if it is a Request or a Reply. + const firstLine = data.substring(0, headerEnd); + const parsed = _grammar__WEBPACK_IMPORTED_MODULE_0__.Grammar.parse(firstLine, "Request_Response"); + let message; + if (parsed === -1) { + logger.warn('error parsing first line of SIP message: "' + firstLine + '"'); + return; + } + else if (!parsed.status_code) { + message = new _incoming_request_message__WEBPACK_IMPORTED_MODULE_2__.IncomingRequestMessage(); + message.method = parsed.method; + message.ruri = parsed.uri; + } + else { + message = new _incoming_response_message__WEBPACK_IMPORTED_MODULE_1__.IncomingResponseMessage(); + message.statusCode = parsed.status_code; + message.reasonPhrase = parsed.reason_phrase; + } + message.data = data; + headerStart = headerEnd + 2; + // Loop over every line in data. Detect the end of each header and parse + // it or simply add to the headers collection. + let bodyStart; + // eslint-disable-next-line no-constant-condition + while (true) { + headerEnd = getHeader(data, headerStart); + // The SIP message has normally finished. + if (headerEnd === -2) { + bodyStart = headerStart + 2; + break; + } + else if (headerEnd === -1) { + // data.indexOf returned -1 due to a malformed message. + logger.error("malformed message"); + return; + } + const parsedHeader = parseHeader(message, data, headerStart, headerEnd); + if (parsedHeader && parsedHeader !== true) { + logger.error(parsedHeader.error); + return; + } + headerStart = headerEnd + 2; + } + // RFC3261 18.3. + // If there are additional bytes in the transport packet + // beyond the end of the body, they MUST be discarded. + if (message.hasHeader("content-length")) { + message.body = data.substr(bodyStart, Number(message.getHeader("content-length"))); + } + else { + message.body = data.substring(bodyStart); + } + return message; + } + Parser.parseMessage = parseMessage; +})(Parser || (Parser = {})); + + +/***/ }), +/* 99 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Grammar": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_0__.Grammar), +/* harmony export */ "NameAddrHeader": () => (/* reexport safe */ _name_addr_header__WEBPACK_IMPORTED_MODULE_1__.NameAddrHeader), +/* harmony export */ "Parameters": () => (/* reexport safe */ _parameters__WEBPACK_IMPORTED_MODULE_2__.Parameters), +/* harmony export */ "URI": () => (/* reexport safe */ _uri__WEBPACK_IMPORTED_MODULE_3__.URI), +/* harmony export */ "equivalentURI": () => (/* reexport safe */ _uri__WEBPACK_IMPORTED_MODULE_3__.equivalentURI) +/* harmony export */ }); +/* harmony import */ var _grammar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21); +/* harmony import */ var _name_addr_header__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25); +/* harmony import */ var _parameters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(24); +/* harmony import */ var _uri__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23); + + + + + + +/***/ }), +/* 100 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dialog": () => (/* reexport safe */ _dialogs__WEBPACK_IMPORTED_MODULE_0__.Dialog), +/* harmony export */ "SessionDialog": () => (/* reexport safe */ _dialogs__WEBPACK_IMPORTED_MODULE_0__.SessionDialog), +/* harmony export */ "SubscriptionDialog": () => (/* reexport safe */ _dialogs__WEBPACK_IMPORTED_MODULE_0__.SubscriptionDialog), +/* harmony export */ "Exception": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_1__.Exception), +/* harmony export */ "TransactionStateError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError), +/* harmony export */ "TransportError": () => (/* reexport safe */ _exceptions__WEBPACK_IMPORTED_MODULE_1__.TransportError), +/* harmony export */ "Levels": () => (/* reexport safe */ _log__WEBPACK_IMPORTED_MODULE_2__.Levels), +/* harmony export */ "Logger": () => (/* reexport safe */ _log__WEBPACK_IMPORTED_MODULE_2__.Logger), +/* harmony export */ "LoggerFactory": () => (/* reexport safe */ _log__WEBPACK_IMPORTED_MODULE_2__.LoggerFactory), +/* harmony export */ "C": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.C), +/* harmony export */ "DigestAuthentication": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.DigestAuthentication), +/* harmony export */ "Grammar": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.Grammar), +/* harmony export */ "IncomingMessage": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.IncomingMessage), +/* harmony export */ "IncomingRequestMessage": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.IncomingRequestMessage), +/* harmony export */ "IncomingResponseMessage": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.IncomingResponseMessage), +/* harmony export */ "NameAddrHeader": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.NameAddrHeader), +/* harmony export */ "OutgoingRequestMessage": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.OutgoingRequestMessage), +/* harmony export */ "Parameters": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.Parameters), +/* harmony export */ "Parser": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.Parser), +/* harmony export */ "URI": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.URI), +/* harmony export */ "constructOutgoingResponse": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.constructOutgoingResponse), +/* harmony export */ "equivalentURI": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.equivalentURI), +/* harmony export */ "fromBodyLegacy": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.fromBodyLegacy), +/* harmony export */ "getBody": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.getBody), +/* harmony export */ "isBody": () => (/* reexport safe */ _messages__WEBPACK_IMPORTED_MODULE_3__.isBody), +/* harmony export */ "SessionState": () => (/* reexport safe */ _session__WEBPACK_IMPORTED_MODULE_4__.SessionState), +/* harmony export */ "SignalingState": () => (/* reexport safe */ _session__WEBPACK_IMPORTED_MODULE_4__.SignalingState), +/* harmony export */ "SubscriptionState": () => (/* reexport safe */ _subscription__WEBPACK_IMPORTED_MODULE_5__.SubscriptionState), +/* harmony export */ "ClientTransaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.ClientTransaction), +/* harmony export */ "InviteClientTransaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.InviteClientTransaction), +/* harmony export */ "InviteServerTransaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.InviteServerTransaction), +/* harmony export */ "NonInviteClientTransaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.NonInviteClientTransaction), +/* harmony export */ "NonInviteServerTransaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.NonInviteServerTransaction), +/* harmony export */ "ServerTransaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.ServerTransaction), +/* harmony export */ "Transaction": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.Transaction), +/* harmony export */ "TransactionState": () => (/* reexport safe */ _transactions__WEBPACK_IMPORTED_MODULE_6__.TransactionState), +/* harmony export */ "UserAgentCore": () => (/* reexport safe */ _user_agent_core__WEBPACK_IMPORTED_MODULE_7__.UserAgentCore), +/* harmony export */ "ByeUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ByeUserAgentClient), +/* harmony export */ "ByeUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ByeUserAgentServer), +/* harmony export */ "CancelUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.CancelUserAgentClient), +/* harmony export */ "InfoUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.InfoUserAgentClient), +/* harmony export */ "InfoUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.InfoUserAgentServer), +/* harmony export */ "InviteUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.InviteUserAgentClient), +/* harmony export */ "InviteUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.InviteUserAgentServer), +/* harmony export */ "MessageUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.MessageUserAgentClient), +/* harmony export */ "MessageUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.MessageUserAgentServer), +/* harmony export */ "NotifyUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.NotifyUserAgentClient), +/* harmony export */ "NotifyUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.NotifyUserAgentServer), +/* harmony export */ "PrackUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.PrackUserAgentClient), +/* harmony export */ "PrackUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.PrackUserAgentServer), +/* harmony export */ "PublishUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.PublishUserAgentClient), +/* harmony export */ "ReInviteUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ReInviteUserAgentClient), +/* harmony export */ "ReInviteUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ReInviteUserAgentServer), +/* harmony export */ "ReSubscribeUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ReSubscribeUserAgentClient), +/* harmony export */ "ReSubscribeUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ReSubscribeUserAgentServer), +/* harmony export */ "ReferUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ReferUserAgentClient), +/* harmony export */ "ReferUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.ReferUserAgentServer), +/* harmony export */ "RegisterUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.RegisterUserAgentClient), +/* harmony export */ "RegisterUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.RegisterUserAgentServer), +/* harmony export */ "SubscribeUserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.SubscribeUserAgentClient), +/* harmony export */ "SubscribeUserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.SubscribeUserAgentServer), +/* harmony export */ "UserAgentClient": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.UserAgentClient), +/* harmony export */ "UserAgentServer": () => (/* reexport safe */ _user_agents__WEBPACK_IMPORTED_MODULE_8__.UserAgentServer), +/* harmony export */ "Timers": () => (/* reexport safe */ _timers__WEBPACK_IMPORTED_MODULE_9__.Timers) +/* harmony export */ }); +/* harmony import */ var _dialogs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(101); +/* harmony import */ var _exceptions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(102); +/* harmony import */ var _log__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(103); +/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(104); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(106); +/* harmony import */ var _subscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(107); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(108); +/* harmony import */ var _user_agent_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(109); +/* harmony import */ var _user_agents__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(110); +/* harmony import */ var _timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(36); +/** + * A core library implementing low level SIP protocol elements. + * @packageDocumentation + */ +// Directories + + + + + + + + + +// Files + + + + +/***/ }), +/* 101 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Dialog": () => (/* reexport safe */ _dialog__WEBPACK_IMPORTED_MODULE_0__.Dialog), +/* harmony export */ "SessionDialog": () => (/* reexport safe */ _session_dialog__WEBPACK_IMPORTED_MODULE_1__.SessionDialog), +/* harmony export */ "SubscriptionDialog": () => (/* reexport safe */ _subscription_dialog__WEBPACK_IMPORTED_MODULE_2__.SubscriptionDialog) +/* harmony export */ }); +/* harmony import */ var _dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69); +/* harmony import */ var _session_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70); +/* harmony import */ var _subscription_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(93); + + + + + + +/***/ }), +/* 102 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Exception": () => (/* reexport safe */ _exception__WEBPACK_IMPORTED_MODULE_0__.Exception), +/* harmony export */ "TransactionStateError": () => (/* reexport safe */ _transaction_state_error__WEBPACK_IMPORTED_MODULE_1__.TransactionStateError), +/* harmony export */ "TransportError": () => (/* reexport safe */ _transport_error__WEBPACK_IMPORTED_MODULE_2__.TransportError) +/* harmony export */ }); +/* harmony import */ var _exception__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); +/* harmony import */ var _transaction_state_error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(35); +/* harmony import */ var _transport_error__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(67); + + + + + +/***/ }), +/* 103 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Levels": () => (/* reexport safe */ _levels__WEBPACK_IMPORTED_MODULE_0__.Levels), +/* harmony export */ "LoggerFactory": () => (/* reexport safe */ _logger_factory__WEBPACK_IMPORTED_MODULE_1__.LoggerFactory), +/* harmony export */ "Logger": () => (/* reexport safe */ _logger__WEBPACK_IMPORTED_MODULE_2__.Logger) +/* harmony export */ }); +/* harmony import */ var _levels__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51); +/* harmony import */ var _logger_factory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50); +/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(52); + + + + + +/***/ }), +/* 104 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Grammar": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_0__.Grammar), +/* harmony export */ "NameAddrHeader": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_0__.NameAddrHeader), +/* harmony export */ "Parameters": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_0__.Parameters), +/* harmony export */ "URI": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_0__.URI), +/* harmony export */ "equivalentURI": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_0__.equivalentURI), +/* harmony export */ "C": () => (/* reexport safe */ _methods__WEBPACK_IMPORTED_MODULE_1__.C), +/* harmony export */ "fromBodyLegacy": () => (/* reexport safe */ _body__WEBPACK_IMPORTED_MODULE_2__.fromBodyLegacy), +/* harmony export */ "getBody": () => (/* reexport safe */ _body__WEBPACK_IMPORTED_MODULE_2__.getBody), +/* harmony export */ "isBody": () => (/* reexport safe */ _body__WEBPACK_IMPORTED_MODULE_2__.isBody), +/* harmony export */ "DigestAuthentication": () => (/* reexport safe */ _digest_authentication__WEBPACK_IMPORTED_MODULE_3__.DigestAuthentication), +/* harmony export */ "IncomingMessage": () => (/* reexport safe */ _incoming_message__WEBPACK_IMPORTED_MODULE_4__.IncomingMessage), +/* harmony export */ "IncomingRequestMessage": () => (/* reexport safe */ _incoming_request_message__WEBPACK_IMPORTED_MODULE_5__.IncomingRequestMessage), +/* harmony export */ "IncomingResponseMessage": () => (/* reexport safe */ _incoming_response_message__WEBPACK_IMPORTED_MODULE_6__.IncomingResponseMessage), +/* harmony export */ "OutgoingRequestMessage": () => (/* reexport safe */ _outgoing_request_message__WEBPACK_IMPORTED_MODULE_7__.OutgoingRequestMessage), +/* harmony export */ "constructOutgoingResponse": () => (/* reexport safe */ _outgoing_response__WEBPACK_IMPORTED_MODULE_8__.constructOutgoingResponse), +/* harmony export */ "Parser": () => (/* reexport safe */ _parser__WEBPACK_IMPORTED_MODULE_9__.Parser) +/* harmony export */ }); +/* harmony import */ var _grammar__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99); +/* harmony import */ var _methods__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(105); +/* harmony import */ var _body__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17); +/* harmony import */ var _digest_authentication__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58); +/* harmony import */ var _incoming_message__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(19); +/* harmony import */ var _incoming_request_message__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18); +/* harmony import */ var _incoming_response_message__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(26); +/* harmony import */ var _outgoing_request_message__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(27); +/* harmony import */ var _outgoing_response__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(83); +/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(98); +// Grammar + +// Directories + +// Files + + + + + + + + + + + + + +/***/ }), +/* 105 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "C": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_0__.C) +/* harmony export */ }); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29); + + + + + + + + + + + + + + + +/***/ }), +/* 106 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SessionState": () => (/* reexport safe */ _session__WEBPACK_IMPORTED_MODULE_0__.SessionState), +/* harmony export */ "SignalingState": () => (/* reexport safe */ _session__WEBPACK_IMPORTED_MODULE_0__.SignalingState) +/* harmony export */ }); +/* harmony import */ var _session__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(30); + + + + +/***/ }), +/* 107 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SubscriptionState": () => (/* reexport safe */ _subscription__WEBPACK_IMPORTED_MODULE_0__.SubscriptionState) +/* harmony export */ }); +/* harmony import */ var _subscription__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46); + + + + +/***/ }), +/* 108 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ClientTransaction": () => (/* reexport safe */ _client_transaction__WEBPACK_IMPORTED_MODULE_0__.ClientTransaction), +/* harmony export */ "InviteClientTransaction": () => (/* reexport safe */ _invite_client_transaction__WEBPACK_IMPORTED_MODULE_1__.InviteClientTransaction), +/* harmony export */ "InviteServerTransaction": () => (/* reexport safe */ _invite_server_transaction__WEBPACK_IMPORTED_MODULE_2__.InviteServerTransaction), +/* harmony export */ "NonInviteClientTransaction": () => (/* reexport safe */ _non_invite_client_transaction__WEBPACK_IMPORTED_MODULE_3__.NonInviteClientTransaction), +/* harmony export */ "NonInviteServerTransaction": () => (/* reexport safe */ _non_invite_server_transaction__WEBPACK_IMPORTED_MODULE_4__.NonInviteServerTransaction), +/* harmony export */ "ServerTransaction": () => (/* reexport safe */ _server_transaction__WEBPACK_IMPORTED_MODULE_5__.ServerTransaction), +/* harmony export */ "TransactionState": () => (/* reexport safe */ _transaction_state__WEBPACK_IMPORTED_MODULE_6__.TransactionState), +/* harmony export */ "Transaction": () => (/* reexport safe */ _transaction__WEBPACK_IMPORTED_MODULE_7__.Transaction) +/* harmony export */ }); +/* harmony import */ var _client_transaction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65); +/* harmony import */ var _invite_client_transaction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68); +/* harmony import */ var _invite_server_transaction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71); +/* harmony import */ var _non_invite_client_transaction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(64); +/* harmony import */ var _non_invite_server_transaction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(82); +/* harmony import */ var _server_transaction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(72); +/* harmony import */ var _transaction_state__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(63); +/* harmony import */ var _transaction__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(66); + + + + + + + + + + + + +/***/ }), +/* 109 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "UserAgentCore": () => (/* reexport safe */ _user_agent_core__WEBPACK_IMPORTED_MODULE_0__.UserAgentCore) +/* harmony export */ }); +/* harmony import */ var _user_agent_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60); + + + + + +/***/ }), +/* 110 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ByeUserAgentClient": () => (/* reexport safe */ _bye_user_agent_client__WEBPACK_IMPORTED_MODULE_0__.ByeUserAgentClient), +/* harmony export */ "ByeUserAgentServer": () => (/* reexport safe */ _bye_user_agent_server__WEBPACK_IMPORTED_MODULE_1__.ByeUserAgentServer), +/* harmony export */ "CancelUserAgentClient": () => (/* reexport safe */ _cancel_user_agent_client__WEBPACK_IMPORTED_MODULE_2__.CancelUserAgentClient), +/* harmony export */ "InfoUserAgentClient": () => (/* reexport safe */ _info_user_agent_client__WEBPACK_IMPORTED_MODULE_3__.InfoUserAgentClient), +/* harmony export */ "InfoUserAgentServer": () => (/* reexport safe */ _info_user_agent_server__WEBPACK_IMPORTED_MODULE_4__.InfoUserAgentServer), +/* harmony export */ "InviteUserAgentClient": () => (/* reexport safe */ _invite_user_agent_client__WEBPACK_IMPORTED_MODULE_5__.InviteUserAgentClient), +/* harmony export */ "InviteUserAgentServer": () => (/* reexport safe */ _invite_user_agent_server__WEBPACK_IMPORTED_MODULE_6__.InviteUserAgentServer), +/* harmony export */ "MessageUserAgentClient": () => (/* reexport safe */ _message_user_agent_client__WEBPACK_IMPORTED_MODULE_7__.MessageUserAgentClient), +/* harmony export */ "MessageUserAgentServer": () => (/* reexport safe */ _message_user_agent_server__WEBPACK_IMPORTED_MODULE_8__.MessageUserAgentServer), +/* harmony export */ "NotifyUserAgentClient": () => (/* reexport safe */ _notify_user_agent_client__WEBPACK_IMPORTED_MODULE_9__.NotifyUserAgentClient), +/* harmony export */ "NotifyUserAgentServer": () => (/* reexport safe */ _notify_user_agent_server__WEBPACK_IMPORTED_MODULE_10__.NotifyUserAgentServer), +/* harmony export */ "PublishUserAgentClient": () => (/* reexport safe */ _publish_user_agent_client__WEBPACK_IMPORTED_MODULE_11__.PublishUserAgentClient), +/* harmony export */ "PrackUserAgentClient": () => (/* reexport safe */ _prack_user_agent_client__WEBPACK_IMPORTED_MODULE_12__.PrackUserAgentClient), +/* harmony export */ "PrackUserAgentServer": () => (/* reexport safe */ _prack_user_agent_server__WEBPACK_IMPORTED_MODULE_13__.PrackUserAgentServer), +/* harmony export */ "ReInviteUserAgentClient": () => (/* reexport safe */ _re_invite_user_agent_client__WEBPACK_IMPORTED_MODULE_14__.ReInviteUserAgentClient), +/* harmony export */ "ReInviteUserAgentServer": () => (/* reexport safe */ _re_invite_user_agent_server__WEBPACK_IMPORTED_MODULE_15__.ReInviteUserAgentServer), +/* harmony export */ "ReSubscribeUserAgentClient": () => (/* reexport safe */ _re_subscribe_user_agent_client__WEBPACK_IMPORTED_MODULE_16__.ReSubscribeUserAgentClient), +/* harmony export */ "ReSubscribeUserAgentServer": () => (/* reexport safe */ _re_subscribe_user_agent_server__WEBPACK_IMPORTED_MODULE_17__.ReSubscribeUserAgentServer), +/* harmony export */ "ReferUserAgentClient": () => (/* reexport safe */ _refer_user_agent_client__WEBPACK_IMPORTED_MODULE_18__.ReferUserAgentClient), +/* harmony export */ "ReferUserAgentServer": () => (/* reexport safe */ _refer_user_agent_server__WEBPACK_IMPORTED_MODULE_19__.ReferUserAgentServer), +/* harmony export */ "RegisterUserAgentClient": () => (/* reexport safe */ _register_user_agent_client__WEBPACK_IMPORTED_MODULE_20__.RegisterUserAgentClient), +/* harmony export */ "RegisterUserAgentServer": () => (/* reexport safe */ _register_user_agent_server__WEBPACK_IMPORTED_MODULE_21__.RegisterUserAgentServer), +/* harmony export */ "SubscribeUserAgentClient": () => (/* reexport safe */ _subscribe_user_agent_client__WEBPACK_IMPORTED_MODULE_22__.SubscribeUserAgentClient), +/* harmony export */ "SubscribeUserAgentServer": () => (/* reexport safe */ _subscribe_user_agent_server__WEBPACK_IMPORTED_MODULE_23__.SubscribeUserAgentServer), +/* harmony export */ "UserAgentClient": () => (/* reexport safe */ _user_agent_client__WEBPACK_IMPORTED_MODULE_24__.UserAgentClient), +/* harmony export */ "UserAgentServer": () => (/* reexport safe */ _user_agent_server__WEBPACK_IMPORTED_MODULE_25__.UserAgentServer) +/* harmony export */ }); +/* harmony import */ var _bye_user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(73); +/* harmony import */ var _bye_user_agent_server__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(80); +/* harmony import */ var _cancel_user_agent_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(111); +/* harmony import */ var _info_user_agent_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74); +/* harmony import */ var _info_user_agent_server__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(84); +/* harmony import */ var _invite_user_agent_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(61); +/* harmony import */ var _invite_user_agent_server__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(95); +/* harmony import */ var _message_user_agent_client__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(76); +/* harmony import */ var _message_user_agent_server__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(86); +/* harmony import */ var _notify_user_agent_client__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(77); +/* harmony import */ var _notify_user_agent_server__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(87); +/* harmony import */ var _publish_user_agent_client__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(90); +/* harmony import */ var _prack_user_agent_client__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(78); +/* harmony import */ var _prack_user_agent_server__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(88); +/* harmony import */ var _re_invite_user_agent_client__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(75); +/* harmony import */ var _re_invite_user_agent_server__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(85); +/* harmony import */ var _re_subscribe_user_agent_client__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(94); +/* harmony import */ var _re_subscribe_user_agent_server__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(112); +/* harmony import */ var _refer_user_agent_client__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(79); +/* harmony import */ var _refer_user_agent_server__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(89); +/* harmony import */ var _register_user_agent_client__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(91); +/* harmony import */ var _register_user_agent_server__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(96); +/* harmony import */ var _subscribe_user_agent_client__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(92); +/* harmony import */ var _subscribe_user_agent_server__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(97); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(62); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(81); + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/***/ }), +/* 111 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CancelUserAgentClient": () => (/* binding */ CancelUserAgentClient) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64); +/* harmony import */ var _user_agent_client__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62); + + +/** + * CANCEL UAC. + * @public + */ +class CancelUserAgentClient extends _user_agent_client__WEBPACK_IMPORTED_MODULE_0__.UserAgentClient { + constructor(core, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteClientTransaction, core, message, delegate); + } +} + + +/***/ }), +/* 112 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ReSubscribeUserAgentServer": () => (/* binding */ ReSubscribeUserAgentServer) +/* harmony export */ }); +/* harmony import */ var _transactions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82); +/* harmony import */ var _user_agent_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81); + + +/** + * Re-SUBSCRIBE UAS. + * @public + */ +class ReSubscribeUserAgentServer extends _user_agent_server__WEBPACK_IMPORTED_MODULE_0__.UserAgentServer { + constructor(dialog, message, delegate) { + super(_transactions__WEBPACK_IMPORTED_MODULE_1__.NonInviteServerTransaction, dialog.userAgentCore, message, delegate); + } +} + + +/***/ }), +/* 113 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "addMidLines": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.addMidLines), +/* harmony export */ "cleanJitsiSdpImageattr": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.cleanJitsiSdpImageattr), +/* harmony export */ "holdModifier": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.holdModifier), +/* harmony export */ "stripG722": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripG722), +/* harmony export */ "stripRtpPayload": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripRtpPayload), +/* harmony export */ "stripTcpCandidates": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripTcpCandidates), +/* harmony export */ "stripTelephoneEvent": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripTelephoneEvent), +/* harmony export */ "stripVideo": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripVideo), +/* harmony export */ "SessionDescriptionHandler": () => (/* reexport safe */ _session_description_handler__WEBPACK_IMPORTED_MODULE_1__.SessionDescriptionHandler), +/* harmony export */ "defaultMediaStreamFactory": () => (/* reexport safe */ _session_description_handler__WEBPACK_IMPORTED_MODULE_1__.defaultMediaStreamFactory), +/* harmony export */ "defaultPeerConnectionConfiguration": () => (/* reexport safe */ _session_description_handler__WEBPACK_IMPORTED_MODULE_1__.defaultPeerConnectionConfiguration), +/* harmony export */ "defaultSessionDescriptionHandlerFactory": () => (/* reexport safe */ _session_description_handler__WEBPACK_IMPORTED_MODULE_1__.defaultSessionDescriptionHandlerFactory), +/* harmony export */ "SimpleUser": () => (/* reexport safe */ _simple_user__WEBPACK_IMPORTED_MODULE_2__.SimpleUser), +/* harmony export */ "Transport": () => (/* reexport safe */ _transport__WEBPACK_IMPORTED_MODULE_3__.Transport) +/* harmony export */ }); +/* harmony import */ var _modifiers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(114); +/* harmony import */ var _session_description_handler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(116); +/* harmony import */ var _simple_user__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(117); +/* harmony import */ var _transport__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(119); + + + + + + +/***/ }), +/* 114 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "addMidLines": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.addMidLines), +/* harmony export */ "cleanJitsiSdpImageattr": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.cleanJitsiSdpImageattr), +/* harmony export */ "holdModifier": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.holdModifier), +/* harmony export */ "stripG722": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripG722), +/* harmony export */ "stripRtpPayload": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripRtpPayload), +/* harmony export */ "stripTcpCandidates": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripTcpCandidates), +/* harmony export */ "stripTelephoneEvent": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripTelephoneEvent), +/* harmony export */ "stripVideo": () => (/* reexport safe */ _modifiers__WEBPACK_IMPORTED_MODULE_0__.stripVideo) +/* harmony export */ }); +/* harmony import */ var _modifiers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(115); +/** + * SessionDescriptionHandlerModifer functions for web browsers. + * @packageDocumentation + */ + + + +/***/ }), +/* 115 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "stripTcpCandidates": () => (/* binding */ stripTcpCandidates), +/* harmony export */ "stripTelephoneEvent": () => (/* binding */ stripTelephoneEvent), +/* harmony export */ "cleanJitsiSdpImageattr": () => (/* binding */ cleanJitsiSdpImageattr), +/* harmony export */ "stripG722": () => (/* binding */ stripG722), +/* harmony export */ "stripRtpPayload": () => (/* binding */ stripRtpPayload), +/* harmony export */ "stripVideo": () => (/* binding */ stripVideo), +/* harmony export */ "addMidLines": () => (/* binding */ addMidLines), +/* harmony export */ "holdModifier": () => (/* binding */ holdModifier) +/* harmony export */ }); +const stripPayload = (sdp, payload) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const mediaDescs = []; + const lines = sdp.split(/\r\n/); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let currentMediaDesc; + for (let i = 0; i < lines.length;) { + const line = lines[i]; + if (/^m=(?:audio|video)/.test(line)) { + currentMediaDesc = { + index: i, + stripped: [] + }; + mediaDescs.push(currentMediaDesc); + } + else if (currentMediaDesc) { + const rtpmap = /^a=rtpmap:(\d+) ([^/]+)\//.exec(line); + if (rtpmap && payload === rtpmap[2]) { + lines.splice(i, 1); + currentMediaDesc.stripped.push(rtpmap[1]); + continue; // Don't increment 'i' + } + } + i++; + } + for (const mediaDesc of mediaDescs) { + const mline = lines[mediaDesc.index].split(" "); + // Ignore the first 3 parameters of the mline. The codec information is after that + for (let j = 3; j < mline.length;) { + if (mediaDesc.stripped.indexOf(mline[j]) !== -1) { + mline.splice(j, 1); + continue; + } + j++; + } + lines[mediaDesc.index] = mline.join(" "); + } + return lines.join("\r\n"); +}; +const stripMediaDescription = (sdp, description) => { + const descriptionRegExp = new RegExp("m=" + description + ".*$", "gm"); + const groupRegExp = new RegExp("^a=group:.*$", "gm"); + if (descriptionRegExp.test(sdp)) { + let midLineToRemove; + sdp = sdp.split(/^m=/gm).filter((section) => { + if (section.substr(0, description.length) === description) { + midLineToRemove = section.match(/^a=mid:.*$/gm); + if (midLineToRemove) { + const step = midLineToRemove[0].match(/:.+$/g); + if (step) { + midLineToRemove = step[0].substr(1); + } + } + return false; + } + return true; + }).join("m="); + const groupLine = sdp.match(groupRegExp); + if (groupLine && groupLine.length === 1) { + let groupLinePortion = groupLine[0]; + // eslint-disable-next-line no-useless-escape + const groupRegExpReplace = new RegExp("\ *" + midLineToRemove + "[^\ ]*", "g"); + groupLinePortion = groupLinePortion.replace(groupRegExpReplace, ""); + sdp = sdp.split(groupRegExp).join(groupLinePortion); + } + } + return sdp; +}; +/** + * Modifier. + * @public + */ +function stripTcpCandidates(description) { + description.sdp = (description.sdp || "").replace(/^a=candidate:\d+ \d+ tcp .*?\r\n/img, ""); + return Promise.resolve(description); +} +/** + * Modifier. + * @public + */ +function stripTelephoneEvent(description) { + description.sdp = stripPayload(description.sdp || "", "telephone-event"); + return Promise.resolve(description); +} +/** + * Modifier. + * @public + */ +function cleanJitsiSdpImageattr(description) { + description.sdp = (description.sdp || "").replace(/^(a=imageattr:.*?)(x|y)=\[0-/gm, "$1$2=[1:"); + return Promise.resolve(description); +} +/** + * Modifier. + * @public + */ +function stripG722(description) { + description.sdp = stripPayload(description.sdp || "", "G722"); + return Promise.resolve(description); +} +/** + * Modifier. + * @public + */ +function stripRtpPayload(payload) { + return (description) => { + description.sdp = stripPayload(description.sdp || "", payload); + return Promise.resolve(description); + }; +} +/** + * Modifier. + * @public + */ +function stripVideo(description) { + description.sdp = stripMediaDescription(description.sdp || "", "video"); + return Promise.resolve(description); +} +/** + * Modifier. + * @public + */ +function addMidLines(description) { + let sdp = description.sdp || ""; + if (sdp.search(/^a=mid.*$/gm) === -1) { + const mlines = sdp.match(/^m=.*$/gm); + const sdpArray = sdp.split(/^m=.*$/gm); + if (mlines) { + mlines.forEach((elem, idx) => { + mlines[idx] = elem + "\na=mid:" + idx; + }); + } + sdpArray.forEach((elem, idx) => { + if (mlines && mlines[idx]) { + sdpArray[idx] = elem + mlines[idx]; + } + }); + sdp = sdpArray.join(""); + description.sdp = sdp; + } + return Promise.resolve(description); +} +/** + * The modifier that should be used when the session would like to place the call on hold. + * @param description - The description that will be modified. + */ +function holdModifier(description) { + if (!description.sdp || !description.type) { + throw new Error("Invalid SDP"); + } + let sdp = description.sdp; + const type = description.type; + if (sdp) { + if (!/a=(sendrecv|sendonly|recvonly|inactive)/.test(sdp)) { + sdp = sdp.replace(/(m=[^\r]*\r\n)/g, "$1a=sendonly\r\n"); + } + else { + sdp = sdp.replace(/a=sendrecv\r\n/g, "a=sendonly\r\n"); + sdp = sdp.replace(/a=recvonly\r\n/g, "a=inactive\r\n"); + } + } + return Promise.resolve({ sdp, type }); +} + + +/***/ }), +/* 116 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "defaultMediaStreamFactory": () => (/* reexport safe */ _media_stream_factory_default__WEBPACK_IMPORTED_MODULE_0__.defaultMediaStreamFactory), +/* harmony export */ "defaultPeerConnectionConfiguration": () => (/* reexport safe */ _peer_connection_configuration_default__WEBPACK_IMPORTED_MODULE_1__.defaultPeerConnectionConfiguration), +/* harmony export */ "defaultSessionDescriptionHandlerFactory": () => (/* reexport safe */ _session_description_handler_factory_default__WEBPACK_IMPORTED_MODULE_2__.defaultSessionDescriptionHandlerFactory), +/* harmony export */ "SessionDescriptionHandler": () => (/* reexport safe */ _session_description_handler__WEBPACK_IMPORTED_MODULE_3__.SessionDescriptionHandler) +/* harmony export */ }); +/* harmony import */ var _media_stream_factory_default__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(54); +/* harmony import */ var _peer_connection_configuration_default__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55); +/* harmony import */ var _session_description_handler_factory_default__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(53); +/* harmony import */ var _session_description_handler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56); +/** + * A SessionDescriptionHandler for web browsers. + * @packageDocumentation + */ + + + + + + + + + + + + +/***/ }), +/* 117 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SimpleUser": () => (/* reexport safe */ _simple_user__WEBPACK_IMPORTED_MODULE_0__.SimpleUser) +/* harmony export */ }); +/* harmony import */ var _simple_user__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(118); +/** + * A simple SIP user implementation for web browsers. + * @packageDocumentation + */ + + + + + +/***/ }), +/* 118 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "SimpleUser": () => (/* binding */ SimpleUser) +/* harmony export */ }); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(48); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(42); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(41); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(37); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(14); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(38); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(16); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(6); +/* harmony import */ var _session_description_handler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56); +/* harmony import */ var _transport__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(57); + + + +/** + * A simple SIP user class. + * @remarks + * While this class is completely functional for simple use cases, it is not intended + * to provide an interface which is suitable for most (must less all) applications. + * While this class has many limitations (for example, it only handles a single concurrent session), + * it is, however, intended to serve as a simple example of using the SIP.js API. + * @public + */ +class SimpleUser { + /** + * Constructs a new instance of the `SimpleUser` class. + * @param server - SIP WebSocket Server URL. + * @param options - Options bucket. See {@link SimpleUserOptions} for details. + */ + constructor(server, options = {}) { + this.attemptingReconnection = false; + this.connectRequested = false; + this.held = false; + this.muted = false; + this.registerer = undefined; + this.registerRequested = false; + this.session = undefined; + // Delegate + this.delegate = options.delegate; + // Copy options + this.options = Object.assign({}, options); + // UserAgentOptions + const userAgentOptions = Object.assign({}, options.userAgentOptions); + // Transport + if (!userAgentOptions.transportConstructor) { + userAgentOptions.transportConstructor = _transport__WEBPACK_IMPORTED_MODULE_0__.Transport; + } + // TransportOptions + if (!userAgentOptions.transportOptions) { + userAgentOptions.transportOptions = { + server + }; + } + // URI + if (!userAgentOptions.uri) { + // If an AOR was provided, convert it to a URI + if (options.aor) { + const uri = _api__WEBPACK_IMPORTED_MODULE_1__.UserAgent.makeURI(options.aor); + if (!uri) { + throw new Error(`Failed to create valid URI from ${options.aor}`); + } + userAgentOptions.uri = uri; + } + } + // UserAgent + this.userAgent = new _api__WEBPACK_IMPORTED_MODULE_1__.UserAgent(userAgentOptions); + // UserAgent's delegate + this.userAgent.delegate = { + // Handle connection with server established + onConnect: () => { + this.logger.log(`[${this.id}] Connected`); + if (this.delegate && this.delegate.onServerConnect) { + this.delegate.onServerConnect(); + } + if (this.registerer && this.registerRequested) { + this.logger.log(`[${this.id}] Registering...`); + this.registerer.register().catch((e) => { + this.logger.error(`[${this.id}] Error occurred registering after connection with server was obtained.`); + this.logger.error(e.toString()); + }); + } + }, + // Handle connection with server lost + onDisconnect: (error) => { + this.logger.log(`[${this.id}] Disconnected`); + if (this.delegate && this.delegate.onServerDisconnect) { + this.delegate.onServerDisconnect(error); + } + if (this.session) { + this.logger.log(`[${this.id}] Hanging up...`); + this.hangup() // cleanup hung calls + .catch((e) => { + this.logger.error(`[${this.id}] Error occurred hanging up call after connection with server was lost.`); + this.logger.error(e.toString()); + }); + } + if (this.registerer) { + this.logger.log(`[${this.id}] Unregistering...`); + this.registerer + .unregister() // cleanup invalid registrations + .catch((e) => { + this.logger.error(`[${this.id}] Error occurred unregistering after connection with server was lost.`); + this.logger.error(e.toString()); + }); + } + // Only attempt to reconnect if network/server dropped the connection. + if (error) { + this.attemptReconnection(); + } + }, + // Handle incoming invitations + onInvite: (invitation) => { + this.logger.log(`[${this.id}] Received INVITE`); + // Guard against a pre-existing session. This implementation only supports one session at a time. + // However an incoming INVITE request may be received at any time and/or while in the process + // of sending an outgoing INVITE request. So we reject any incoming INVITE in those cases. + if (this.session) { + this.logger.warn(`[${this.id}] Session already in progress, rejecting INVITE...`); + invitation + .reject() + .then(() => { + this.logger.log(`[${this.id}] Rejected INVITE`); + }) + .catch((error) => { + this.logger.error(`[${this.id}] Failed to reject INVITE`); + this.logger.error(error.toString()); + }); + return; + } + // Use our configured constraints as options for any Inviter created as result of a REFER + const referralInviterOptions = { + sessionDescriptionHandlerOptions: { constraints: this.constraints } + }; + // Initialize our session + this.initSession(invitation, referralInviterOptions); + // Delegate + if (this.delegate && this.delegate.onCallReceived) { + this.delegate.onCallReceived(); + } + else { + this.logger.warn(`[${this.id}] No handler available, rejecting INVITE...`); + invitation + .reject() + .then(() => { + this.logger.log(`[${this.id}] Rejected INVITE`); + }) + .catch((error) => { + this.logger.error(`[${this.id}] Failed to reject INVITE`); + this.logger.error(error.toString()); + }); + } + }, + // Handle incoming messages + onMessage: (message) => { + message.accept().then(() => { + if (this.delegate && this.delegate.onMessageReceived) { + this.delegate.onMessageReceived(message.request.body); + } + }); + } + }; + // Use the SIP.js logger + this.logger = this.userAgent.getLogger("sip.SimpleUser"); + // Monitor network connectivity and attempt reconnection when we come online + window.addEventListener("online", () => { + this.logger.log(`[${this.id}] Online`); + this.attemptReconnection(); + }); + } + /** + * Instance identifier. + * @internal + */ + get id() { + return (this.options.userAgentOptions && this.options.userAgentOptions.displayName) || "Anonymous"; + } + /** The local media stream. Undefined if call not answered. */ + get localMediaStream() { + var _a; + const sdh = (_a = this.session) === null || _a === void 0 ? void 0 : _a.sessionDescriptionHandler; + if (!sdh) { + return undefined; + } + if (!(sdh instanceof _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandler)) { + throw new Error("Session description handler not instance of web SessionDescriptionHandler"); + } + return sdh.localMediaStream; + } + /** The remote media stream. Undefined if call not answered. */ + get remoteMediaStream() { + var _a; + const sdh = (_a = this.session) === null || _a === void 0 ? void 0 : _a.sessionDescriptionHandler; + if (!sdh) { + return undefined; + } + if (!(sdh instanceof _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandler)) { + throw new Error("Session description handler not instance of web SessionDescriptionHandler"); + } + return sdh.remoteMediaStream; + } + /** + * The local audio track, if available. + * @deprecated Use localMediaStream and get track from the stream. + */ + get localAudioTrack() { + var _a; + return (_a = this.localMediaStream) === null || _a === void 0 ? void 0 : _a.getTracks().find((track) => track.kind === "audio"); + } + /** + * The local video track, if available. + * @deprecated Use localMediaStream and get track from the stream. + */ + get localVideoTrack() { + var _a; + return (_a = this.localMediaStream) === null || _a === void 0 ? void 0 : _a.getTracks().find((track) => track.kind === "video"); + } + /** + * The remote audio track, if available. + * @deprecated Use remoteMediaStream and get track from the stream. + */ + get remoteAudioTrack() { + var _a; + return (_a = this.remoteMediaStream) === null || _a === void 0 ? void 0 : _a.getTracks().find((track) => track.kind === "audio"); + } + /** + * The remote video track, if available. + * @deprecated Use remoteMediaStream and get track from the stream. + */ + get remoteVideoTrack() { + var _a; + return (_a = this.remoteMediaStream) === null || _a === void 0 ? void 0 : _a.getTracks().find((track) => track.kind === "video"); + } + /** + * Connect. + * @remarks + * Start the UserAgent's WebSocket Transport. + */ + connect() { + this.logger.log(`[${this.id}] Connecting UserAgent...`); + this.connectRequested = true; + if (this.userAgent.state !== _api__WEBPACK_IMPORTED_MODULE_3__.UserAgentState.Started) { + return this.userAgent.start(); + } + return this.userAgent.reconnect(); + } + /** + * Disconnect. + * @remarks + * Stop the UserAgent's WebSocket Transport. + */ + disconnect() { + this.logger.log(`[${this.id}] Disconnecting UserAgent...`); + this.connectRequested = false; + return this.userAgent.stop(); + } + /** + * Return true if connected. + */ + isConnected() { + return this.userAgent.isConnected(); + } + /** + * Start receiving incoming calls. + * @remarks + * Send a REGISTER request for the UserAgent's AOR. + * Resolves when the REGISTER request is sent, otherwise rejects. + */ + register(registererOptions, registererRegisterOptions) { + this.logger.log(`[${this.id}] Registering UserAgent...`); + this.registerRequested = true; + if (!this.registerer) { + this.registerer = new _api__WEBPACK_IMPORTED_MODULE_4__.Registerer(this.userAgent, registererOptions); + this.registerer.stateChange.addListener((state) => { + switch (state) { + case _api__WEBPACK_IMPORTED_MODULE_5__.RegistererState.Initial: + break; + case _api__WEBPACK_IMPORTED_MODULE_5__.RegistererState.Registered: + if (this.delegate && this.delegate.onRegistered) { + this.delegate.onRegistered(); + } + break; + case _api__WEBPACK_IMPORTED_MODULE_5__.RegistererState.Unregistered: + if (this.delegate && this.delegate.onUnregistered) { + this.delegate.onUnregistered(); + } + break; + case _api__WEBPACK_IMPORTED_MODULE_5__.RegistererState.Terminated: + this.registerer = undefined; + break; + default: + throw new Error("Unknown registerer state."); + } + }); + } + return this.registerer.register(registererRegisterOptions).then(() => { + return; + }); + } + /** + * Stop receiving incoming calls. + * @remarks + * Send an un-REGISTER request for the UserAgent's AOR. + * Resolves when the un-REGISTER request is sent, otherwise rejects. + */ + unregister(registererUnregisterOptions) { + this.logger.log(`[${this.id}] Unregistering UserAgent...`); + this.registerRequested = false; + if (!this.registerer) { + return Promise.resolve(); + } + return this.registerer.unregister(registererUnregisterOptions).then(() => { + return; + }); + } + /** + * Make an outgoing call. + * @remarks + * Send an INVITE request to create a new Session. + * Resolves when the INVITE request is sent, otherwise rejects. + * Use `onCallAnswered` delegate method to determine if Session is established. + * @param destination - The target destination to call. A SIP address to send the INVITE to. + * @param inviterOptions - Optional options for Inviter constructor. + * @param inviterInviteOptions - Optional options for Inviter.invite(). + */ + call(destination, inviterOptions, inviterInviteOptions) { + this.logger.log(`[${this.id}] Beginning Session...`); + if (this.session) { + return Promise.reject(new Error("Session already exists.")); + } + const target = _api__WEBPACK_IMPORTED_MODULE_1__.UserAgent.makeURI(destination); + if (!target) { + return Promise.reject(new Error(`Failed to create a valid URI from "${destination}"`)); + } + // Use our configured constraints as InviterOptions if none provided + if (!inviterOptions) { + inviterOptions = {}; + } + if (!inviterOptions.sessionDescriptionHandlerOptions) { + inviterOptions.sessionDescriptionHandlerOptions = {}; + } + if (!inviterOptions.sessionDescriptionHandlerOptions.constraints) { + inviterOptions.sessionDescriptionHandlerOptions.constraints = this.constraints; + } + // Create a new Inviter for the outgoing Session + const inviter = new _api__WEBPACK_IMPORTED_MODULE_6__.Inviter(this.userAgent, target, inviterOptions); + // Send INVITE + return this.sendInvite(inviter, inviterOptions, inviterInviteOptions).then(() => { + return; + }); + } + /** + * Hangup a call. + * @remarks + * Send a BYE request, CANCEL request or reject response to end the current Session. + * Resolves when the request/response is sent, otherwise rejects. + * Use `onCallTerminated` delegate method to determine if and when call is ended. + */ + hangup() { + this.logger.log(`[${this.id}] Hangup...`); + return this.terminate(); + } + /** + * Answer an incoming call. + * @remarks + * Accept an incoming INVITE request creating a new Session. + * Resolves with the response is sent, otherwise rejects. + * Use `onCallAnswered` delegate method to determine if and when call is established. + * @param invitationAcceptOptions - Optional options for Inviter.accept(). + */ + answer(invitationAcceptOptions) { + this.logger.log(`[${this.id}] Accepting Invitation...`); + if (!this.session) { + return Promise.reject(new Error("Session does not exist.")); + } + if (!(this.session instanceof _api__WEBPACK_IMPORTED_MODULE_7__.Invitation)) { + return Promise.reject(new Error("Session not instance of Invitation.")); + } + // Use our configured constraints as InvitationAcceptOptions if none provided + if (!invitationAcceptOptions) { + invitationAcceptOptions = {}; + } + if (!invitationAcceptOptions.sessionDescriptionHandlerOptions) { + invitationAcceptOptions.sessionDescriptionHandlerOptions = {}; + } + if (!invitationAcceptOptions.sessionDescriptionHandlerOptions.constraints) { + invitationAcceptOptions.sessionDescriptionHandlerOptions.constraints = this.constraints; + } + return this.session.accept(invitationAcceptOptions); + } + /** + * Decline an incoming call. + * @remarks + * Reject an incoming INVITE request. + * Resolves with the response is sent, otherwise rejects. + * Use `onCallTerminated` delegate method to determine if and when call is ended. + */ + decline() { + this.logger.log(`[${this.id}] rejecting Invitation...`); + if (!this.session) { + return Promise.reject(new Error("Session does not exist.")); + } + if (!(this.session instanceof _api__WEBPACK_IMPORTED_MODULE_7__.Invitation)) { + return Promise.reject(new Error("Session not instance of Invitation.")); + } + return this.session.reject(); + } + /** + * Hold call + * @remarks + * Send a re-INVITE with new offer indicating "hold". + * Resolves when the re-INVITE request is sent, otherwise rejects. + * Use `onCallHold` delegate method to determine if request is accepted or rejected. + * See: https://tools.ietf.org/html/rfc6337 + */ + hold() { + this.logger.log(`[${this.id}] holding session...`); + return this.setHold(true); + } + /** + * Unhold call. + * @remarks + * Send a re-INVITE with new offer indicating "unhold". + * Resolves when the re-INVITE request is sent, otherwise rejects. + * Use `onCallHold` delegate method to determine if request is accepted or rejected. + * See: https://tools.ietf.org/html/rfc6337 + */ + unhold() { + this.logger.log(`[${this.id}] unholding session...`); + return this.setHold(false); + } + /** + * Hold state. + * @remarks + * True if session media is on hold. + */ + isHeld() { + return this.held; + } + /** + * Mute call. + * @remarks + * Disable sender's media tracks. + */ + mute() { + this.logger.log(`[${this.id}] disabling media tracks...`); + this.setMute(true); + } + /** + * Unmute call. + * @remarks + * Enable sender's media tracks. + */ + unmute() { + this.logger.log(`[${this.id}] enabling media tracks...`); + this.setMute(false); + } + /** + * Mute state. + * @remarks + * True if sender's media track is disabled. + */ + isMuted() { + return this.muted; + } + /** + * Send DTMF. + * @remarks + * Send an INFO request with content type application/dtmf-relay. + * @param tone - Tone to send. + */ + sendDTMF(tone) { + this.logger.log(`[${this.id}] sending DTMF...`); + // As RFC 6086 states, sending DTMF via INFO is not standardized... + // + // Companies have been using INFO messages in order to transport + // Dual-Tone Multi-Frequency (DTMF) tones. All mechanisms are + // proprietary and have not been standardized. + // https://tools.ietf.org/html/rfc6086#section-2 + // + // It is however widely supported based on this draft: + // https://tools.ietf.org/html/draft-kaplan-dispatch-info-dtmf-package-00 + // Validate tone + if (!/^[0-9A-D#*,]$/.exec(tone)) { + return Promise.reject(new Error("Invalid DTMF tone.")); + } + if (!this.session) { + return Promise.reject(new Error("Session does not exist.")); + } + // The UA MUST populate the "application/dtmf-relay" body, as defined + // earlier, with the button pressed and the duration it was pressed + // for. Technically, this actually requires the INFO to be generated + // when the user *releases* the button, however if the user has still + // not released a button after 5 seconds, which is the maximum duration + // supported by this mechanism, the UA should generate the INFO at that + // time. + // https://tools.ietf.org/html/draft-kaplan-dispatch-info-dtmf-package-00#section-5.3 + this.logger.log(`[${this.id}] Sending DTMF tone: ${tone}`); + const dtmf = tone; + const duration = 2000; + const body = { + contentDisposition: "render", + contentType: "application/dtmf-relay", + content: "Signal=" + dtmf + "\r\nDuration=" + duration + }; + const requestOptions = { body }; + return this.session.info({ requestOptions }).then(() => { + return; + }); + } + /** + * Send a message. + * @remarks + * Send a MESSAGE request. + * @param destination - The target destination for the message. A SIP address to send the MESSAGE to. + */ + message(destination, message) { + this.logger.log(`[${this.id}] sending message...`); + const target = _api__WEBPACK_IMPORTED_MODULE_1__.UserAgent.makeURI(destination); + if (!target) { + return Promise.reject(new Error(`Failed to create a valid URI from "${destination}"`)); + } + return new _api__WEBPACK_IMPORTED_MODULE_8__.Messager(this.userAgent, target, message).message(); + } + /** Media constraints. */ + get constraints() { + var _a; + let constraints = { audio: true, video: false }; // default to audio only calls + if ((_a = this.options.media) === null || _a === void 0 ? void 0 : _a.constraints) { + constraints = Object.assign({}, this.options.media.constraints); + } + return constraints; + } + /** + * Attempt reconnection up to `maxReconnectionAttempts` times. + * @param reconnectionAttempt - Current attempt number. + */ + attemptReconnection(reconnectionAttempt = 1) { + const reconnectionAttempts = this.options.reconnectionAttempts || 3; + const reconnectionDelay = this.options.reconnectionDelay || 4; + if (!this.connectRequested) { + this.logger.log(`[${this.id}] Reconnection not currently desired`); + return; // If intentionally disconnected, don't reconnect. + } + if (this.attemptingReconnection) { + this.logger.log(`[${this.id}] Reconnection attempt already in progress`); + } + if (reconnectionAttempt > reconnectionAttempts) { + this.logger.log(`[${this.id}] Reconnection maximum attempts reached`); + return; + } + if (reconnectionAttempt === 1) { + this.logger.log(`[${this.id}] Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - trying`); + } + else { + this.logger.log(`[${this.id}] Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - trying in ${reconnectionDelay} seconds`); + } + this.attemptingReconnection = true; + setTimeout(() => { + if (!this.connectRequested) { + this.logger.log(`[${this.id}] Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - aborted`); + this.attemptingReconnection = false; + return; // If intentionally disconnected, don't reconnect. + } + this.userAgent + .reconnect() + .then(() => { + this.logger.log(`[${this.id}] Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - succeeded`); + this.attemptingReconnection = false; + }) + .catch((error) => { + this.logger.log(`[${this.id}] Reconnection attempt ${reconnectionAttempt} of ${reconnectionAttempts} - failed`); + this.logger.error(error.message); + this.attemptingReconnection = false; + this.attemptReconnection(++reconnectionAttempt); + }); + }, reconnectionAttempt === 1 ? 0 : reconnectionDelay * 1000); + } + /** Helper function to remove media from html elements. */ + cleanupMedia() { + if (this.options.media) { + if (this.options.media.local) { + if (this.options.media.local.video) { + this.options.media.local.video.srcObject = null; + this.options.media.local.video.pause(); + } + } + if (this.options.media.remote) { + if (this.options.media.remote.audio) { + this.options.media.remote.audio.srcObject = null; + this.options.media.remote.audio.pause(); + } + if (this.options.media.remote.video) { + this.options.media.remote.video.srcObject = null; + this.options.media.remote.video.pause(); + } + } + } + } + /** Helper function to enable/disable media tracks. */ + enableReceiverTracks(enable) { + if (!this.session) { + throw new Error("Session does not exist."); + } + const sessionDescriptionHandler = this.session.sessionDescriptionHandler; + if (!(sessionDescriptionHandler instanceof _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandler)) { + throw new Error("Session's session description handler not instance of SessionDescriptionHandler."); + } + const peerConnection = sessionDescriptionHandler.peerConnection; + if (!peerConnection) { + throw new Error("Peer connection closed."); + } + peerConnection.getReceivers().forEach((receiver) => { + if (receiver.track) { + receiver.track.enabled = enable; + } + }); + } + /** Helper function to enable/disable media tracks. */ + enableSenderTracks(enable) { + if (!this.session) { + throw new Error("Session does not exist."); + } + const sessionDescriptionHandler = this.session.sessionDescriptionHandler; + if (!(sessionDescriptionHandler instanceof _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandler)) { + throw new Error("Session's session description handler not instance of SessionDescriptionHandler."); + } + const peerConnection = sessionDescriptionHandler.peerConnection; + if (!peerConnection) { + throw new Error("Peer connection closed."); + } + peerConnection.getSenders().forEach((sender) => { + if (sender.track) { + sender.track.enabled = enable; + } + }); + } + /** + * Setup session delegate and state change handler. + * @param session - Session to setup + * @param referralInviterOptions - Options for any Inviter created as result of a REFER. + */ + initSession(session, referralInviterOptions) { + // Set session + this.session = session; + // Call session created callback + if (this.delegate && this.delegate.onCallCreated) { + this.delegate.onCallCreated(); + } + // Setup session state change handler + this.session.stateChange.addListener((state) => { + if (this.session !== session) { + return; // if our session has changed, just return + } + this.logger.log(`[${this.id}] session state changed to ${state}`); + switch (state) { + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Initial: + break; + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Establishing: + break; + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Established: + this.setupLocalMedia(); + this.setupRemoteMedia(); + if (this.delegate && this.delegate.onCallAnswered) { + this.delegate.onCallAnswered(); + } + break; + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Terminating: + // fall through + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Terminated: + this.session = undefined; + this.cleanupMedia(); + if (this.delegate && this.delegate.onCallHangup) { + this.delegate.onCallHangup(); + } + break; + default: + throw new Error("Unknown session state."); + } + }); + // Setup delegate + this.session.delegate = { + onInfo: (info) => { + // As RFC 6086 states, sending DTMF via INFO is not standardized... + // + // Companies have been using INFO messages in order to transport + // Dual-Tone Multi-Frequency (DTMF) tones. All mechanisms are + // proprietary and have not been standardized. + // https://tools.ietf.org/html/rfc6086#section-2 + // + // It is however widely supported based on this draft: + // https://tools.ietf.org/html/draft-kaplan-dispatch-info-dtmf-package-00 + var _a; + // FIXME: TODO: We should reject correctly... + // + // If a UA receives an INFO request associated with an Info Package that + // the UA has not indicated willingness to receive, the UA MUST send a + // 469 (Bad Info Package) response (see Section 11.6), which contains a + // Recv-Info header field with Info Packages for which the UA is willing + // to receive INFO requests. + // https://tools.ietf.org/html/rfc6086#section-4.2.2 + // No delegate + if (((_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onCallDTMFReceived) === undefined) { + info.reject(); + return; + } + // Invalid content type + const contentType = info.request.getHeader("content-type"); + if (!contentType || !/^application\/dtmf-relay/i.exec(contentType)) { + info.reject(); + return; + } + // Invalid body + const body = info.request.body.split("\r\n", 2); + if (body.length !== 2) { + info.reject(); + return; + } + // Invalid tone + let tone; + const toneRegExp = /^(Signal\s*?=\s*?)([0-9A-D#*]{1})(\s)?.*/; + if (toneRegExp.test(body[0])) { + tone = body[0].replace(toneRegExp, "$2"); + } + if (!tone) { + info.reject(); + return; + } + // Invalid duration + let duration; + const durationRegExp = /^(Duration\s?=\s?)([0-9]{1,4})(\s)?.*/; + if (durationRegExp.test(body[1])) { + duration = parseInt(body[1].replace(durationRegExp, "$2"), 10); + } + if (!duration) { + info.reject(); + return; + } + info + .accept() + .then(() => { + if (this.delegate && this.delegate.onCallDTMFReceived) { + if (!tone || !duration) { + throw new Error("Tone or duration undefined."); + } + this.delegate.onCallDTMFReceived(tone, duration); + } + }) + .catch((error) => { + this.logger.error(error.message); + }); + }, + onRefer: (referral) => { + referral + .accept() + .then(() => this.sendInvite(referral.makeInviter(referralInviterOptions), referralInviterOptions)) + .catch((error) => { + this.logger.error(error.message); + }); + } + }; + } + /** Helper function to init send then send invite. */ + sendInvite(inviter, inviterOptions, inviterInviteOptions) { + // Initialize our session + this.initSession(inviter, inviterOptions); + // Send the INVITE + return inviter.invite(inviterInviteOptions).then(() => { + this.logger.log(`[${this.id}] sent INVITE`); + }); + } + /** + * Puts Session on hold. + * @param hold - Hold on if true, off if false. + */ + setHold(hold) { + if (!this.session) { + return Promise.reject(new Error("Session does not exist.")); + } + const session = this.session; + // Just resolve if we are already in correct state + if (this.held === hold) { + return Promise.resolve(); + } + const sessionDescriptionHandler = this.session.sessionDescriptionHandler; + if (!(sessionDescriptionHandler instanceof _session_description_handler__WEBPACK_IMPORTED_MODULE_2__.SessionDescriptionHandler)) { + throw new Error("Session's session description handler not instance of SessionDescriptionHandler."); + } + const options = { + requestDelegate: { + onAccept: () => { + this.held = hold; + this.enableReceiverTracks(!this.held); + this.enableSenderTracks(!this.held && !this.muted); + if (this.delegate && this.delegate.onCallHold) { + this.delegate.onCallHold(this.held); + } + }, + onReject: () => { + this.logger.warn(`[${this.id}] re-invite request was rejected`); + this.enableReceiverTracks(!this.held); + this.enableSenderTracks(!this.held && !this.muted); + if (this.delegate && this.delegate.onCallHold) { + this.delegate.onCallHold(this.held); + } + } + } + }; + // Session properties used to pass options to the SessionDescriptionHandler: + // + // 1) Session.sessionDescriptionHandlerOptions + // SDH options for the initial INVITE transaction. + // - Used in all cases when handling the initial INVITE transaction as either UAC or UAS. + // - May be set directly at anytime. + // - May optionally be set via constructor option. + // - May optionally be set via options passed to Inviter.invite() or Invitation.accept(). + // + // 2) Session.sessionDescriptionHandlerOptionsReInvite + // SDH options for re-INVITE transactions. + // - Used in all cases when handling a re-INVITE transaction as either UAC or UAS. + // - May be set directly at anytime. + // - May optionally be set via constructor option. + // - May optionally be set via options passed to Session.invite(). + const sessionDescriptionHandlerOptions = session.sessionDescriptionHandlerOptionsReInvite; + sessionDescriptionHandlerOptions.hold = hold; + session.sessionDescriptionHandlerOptionsReInvite = sessionDescriptionHandlerOptions; + // Send re-INVITE + return this.session + .invite(options) + .then(() => { + // preemptively enable/disable tracks + this.enableReceiverTracks(!hold); + this.enableSenderTracks(!hold && !this.muted); + }) + .catch((error) => { + if (error instanceof _api__WEBPACK_IMPORTED_MODULE_10__.RequestPendingError) { + this.logger.error(`[${this.id}] A hold request is already in progress.`); + } + throw error; + }); + } + /** + * Puts Session on mute. + * @param mute - Mute on if true, off if false. + */ + setMute(mute) { + if (!this.session) { + this.logger.warn(`[${this.id}] A session is required to enabled/disable media tracks`); + return; + } + if (this.session.state !== _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Established) { + this.logger.warn(`[${this.id}] An established session is required to enable/disable media tracks`); + return; + } + this.muted = mute; + this.enableSenderTracks(!this.held && !this.muted); + } + /** Helper function to attach local media to html elements. */ + setupLocalMedia() { + var _a, _b; + if (!this.session) { + throw new Error("Session does not exist."); + } + const mediaElement = (_b = (_a = this.options.media) === null || _a === void 0 ? void 0 : _a.local) === null || _b === void 0 ? void 0 : _b.video; + if (mediaElement) { + const localStream = this.localMediaStream; + if (!localStream) { + throw new Error("Local media stream undefiend."); + } + mediaElement.srcObject = localStream; + mediaElement.volume = 0; + mediaElement.play().catch((error) => { + this.logger.error(`[${this.id}] Failed to play local media`); + this.logger.error(error.message); + }); + } + } + /** Helper function to attach remote media to html elements. */ + setupRemoteMedia() { + var _a, _b, _c, _d; + if (!this.session) { + throw new Error("Session does not exist."); + } + const mediaElement = ((_b = (_a = this.options.media) === null || _a === void 0 ? void 0 : _a.remote) === null || _b === void 0 ? void 0 : _b.video) || ((_d = (_c = this.options.media) === null || _c === void 0 ? void 0 : _c.remote) === null || _d === void 0 ? void 0 : _d.audio); + if (mediaElement) { + const remoteStream = this.remoteMediaStream; + if (!remoteStream) { + throw new Error("Remote media stream undefiend."); + } + mediaElement.autoplay = true; // Safari hack, because you cannot call .play() from a non user action + mediaElement.srcObject = remoteStream; + mediaElement.play().catch((error) => { + this.logger.error(`[${this.id}] Failed to play remote media`); + this.logger.error(error.message); + }); + remoteStream.onaddtrack = () => { + this.logger.log(`[${this.id}] Remote media onaddtrack`); + mediaElement.load(); // Safari hack, as it doesn't work otheriwse + mediaElement.play().catch((error) => { + this.logger.error(`[${this.id}] Failed to play remote media`); + this.logger.error(error.message); + }); + }; + } + } + /** + * End a session. + * @remarks + * Send a BYE request, CANCEL request or reject response to end the current Session. + * Resolves when the request/response is sent, otherwise rejects. + * Use `onCallTerminated` delegate method to determine if and when Session is terminated. + */ + terminate() { + this.logger.log(`[${this.id}] Terminating...`); + if (!this.session) { + return Promise.reject(new Error("Session does not exist.")); + } + switch (this.session.state) { + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Initial: + if (this.session instanceof _api__WEBPACK_IMPORTED_MODULE_6__.Inviter) { + return this.session.cancel().then(() => { + this.logger.log(`[${this.id}] Inviter never sent INVITE (canceled)`); + }); + } + else if (this.session instanceof _api__WEBPACK_IMPORTED_MODULE_7__.Invitation) { + return this.session.reject().then(() => { + this.logger.log(`[${this.id}] Invitation rejected (sent 480)`); + }); + } + else { + throw new Error("Unknown session type."); + } + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Establishing: + if (this.session instanceof _api__WEBPACK_IMPORTED_MODULE_6__.Inviter) { + return this.session.cancel().then(() => { + this.logger.log(`[${this.id}] Inviter canceled (sent CANCEL)`); + }); + } + else if (this.session instanceof _api__WEBPACK_IMPORTED_MODULE_7__.Invitation) { + return this.session.reject().then(() => { + this.logger.log(`[${this.id}] Invitation rejected (sent 480)`); + }); + } + else { + throw new Error("Unknown session type."); + } + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Established: + return this.session.bye().then(() => { + this.logger.log(`[${this.id}] Session ended (sent BYE)`); + }); + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Terminating: + break; + case _api__WEBPACK_IMPORTED_MODULE_9__.SessionState.Terminated: + break; + default: + throw new Error("Unknown state"); + } + this.logger.log(`[${this.id}] Terminating in state ${this.session.state}, no action taken`); + return Promise.resolve(); + } +} + + +/***/ }), +/* 119 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "Transport": () => (/* reexport safe */ _transport__WEBPACK_IMPORTED_MODULE_0__.Transport) +/* harmony export */ }); +/* harmony import */ var _transport__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(57); +/** + * A Transport implementation for web browsers. + * @packageDocumentation + */ + + + + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "name": () => (/* binding */ name), +/* harmony export */ "version": () => (/* binding */ version), +/* harmony export */ "Ack": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Ack), +/* harmony export */ "Bye": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Bye), +/* harmony export */ "ContentTypeUnsupportedError": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.ContentTypeUnsupportedError), +/* harmony export */ "EmitterImpl": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.EmitterImpl), +/* harmony export */ "Info": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Info), +/* harmony export */ "Invitation": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Invitation), +/* harmony export */ "Inviter": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Inviter), +/* harmony export */ "Message": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Message), +/* harmony export */ "Messager": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Messager), +/* harmony export */ "Notification": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Notification), +/* harmony export */ "Publisher": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Publisher), +/* harmony export */ "PublisherState": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.PublisherState), +/* harmony export */ "Referral": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Referral), +/* harmony export */ "Registerer": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Registerer), +/* harmony export */ "RegistererState": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.RegistererState), +/* harmony export */ "RequestPendingError": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.RequestPendingError), +/* harmony export */ "SIPExtension": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.SIPExtension), +/* harmony export */ "Session": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Session), +/* harmony export */ "SessionDescriptionHandlerError": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.SessionDescriptionHandlerError), +/* harmony export */ "SessionState": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.SessionState), +/* harmony export */ "SessionTerminatedError": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.SessionTerminatedError), +/* harmony export */ "StateTransitionError": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.StateTransitionError), +/* harmony export */ "Subscriber": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Subscriber), +/* harmony export */ "Subscription": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.Subscription), +/* harmony export */ "SubscriptionState": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.SubscriptionState), +/* harmony export */ "TransportState": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.TransportState), +/* harmony export */ "UserAgent": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.UserAgent), +/* harmony export */ "UserAgentRegisteredOptionTags": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.UserAgentRegisteredOptionTags), +/* harmony export */ "UserAgentState": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_1__.UserAgentState), +/* harmony export */ "Grammar": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_2__.Grammar), +/* harmony export */ "NameAddrHeader": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_2__.NameAddrHeader), +/* harmony export */ "Parameters": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_2__.Parameters), +/* harmony export */ "URI": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_2__.URI), +/* harmony export */ "equivalentURI": () => (/* reexport safe */ _grammar__WEBPACK_IMPORTED_MODULE_2__.equivalentURI), +/* harmony export */ "Core": () => (/* reexport module object */ _core__WEBPACK_IMPORTED_MODULE_3__), +/* harmony export */ "Web": () => (/* reexport module object */ _platform_web__WEBPACK_IMPORTED_MODULE_4__) +/* harmony export */ }); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); +/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2); +/* harmony import */ var _grammar__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(100); +/* harmony import */ var _platform_web__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(113); +// Helpful name and version exports + +const version = _version__WEBPACK_IMPORTED_MODULE_0__.LIBRARY_VERSION; +const name = "sip.js"; + +// Export api + +// Export grammar + +// Export namespaced core + + +// Export namespaced web + + + +})(); + +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/voip/static/src/activity/@types/models.d.ts b/voip/static/src/activity/@types/models.d.ts new file mode 100644 index 0000000..1791247 --- /dev/null +++ b/voip/static/src/activity/@types/models.d.ts @@ -0,0 +1,5 @@ +declare module "models" { + interface Activity { + partner: Persona, + } +} diff --git a/voip/static/src/activity/activity_model_patch.js b/voip/static/src/activity/activity_model_patch.js new file mode 100644 index 0000000..e89c08e --- /dev/null +++ b/voip/static/src/activity/activity_model_patch.js @@ -0,0 +1,25 @@ +/* @odoo-module */ + +import { Record } from "@mail/core/common/record"; +import { Activity } from "@mail/core/web/activity_model"; + +import { patch } from "@web/core/utils/patch"; + +patch(Activity, { + /** @override */ + _insert(data) { + const activity = super._insert(...arguments); + if (Object.hasOwn(data, "partner")) { + activity.partner = data.partner; + } + return activity; + }, +}); + +patch(Activity.prototype, { + /** @override */ + setup() { + super.setup(); + this.partner = Record.one("Persona"); + }, +}); diff --git a/voip/static/src/activity/activity_patch.js b/voip/static/src/activity/activity_patch.js new file mode 100644 index 0000000..c598bb3 --- /dev/null +++ b/voip/static/src/activity/activity_patch.js @@ -0,0 +1,21 @@ +/* @odoo-module */ + +import { Activity } from "@mail/core/web/activity"; + +import { patch } from "@web/core/utils/patch"; + +patch(Activity.prototype, { + /** + * @param {MouseEvent} ev + * @param {string} phoneNumber + */ + onClickPhoneNumber(ev, phoneNumber) { + ev.preventDefault(); + this.env.services["voip.user_agent"].makeCall({ + activity: this.env.services["mail.store"].Activity.get(this.props.data.id), + phone_number: phoneNumber, + res_id: this.props.data.res_id, + res_model: this.props.data.res_model, + }); + }, +}); diff --git a/voip/static/src/activity/activity_patch.xml b/voip/static/src/activity/activity_patch.xml new file mode 100644 index 0000000..581e79c --- /dev/null +++ b/voip/static/src/activity/activity_patch.xml @@ -0,0 +1,29 @@ + + + + + + +
+ + Phone: + + + + +
+
+ +
+ + Mobile: + + + + +
+
+
+
+ +
diff --git a/voip/static/src/core/call_model.js b/voip/static/src/core/call_model.js new file mode 100644 index 0000000..a964513 --- /dev/null +++ b/voip/static/src/core/call_model.js @@ -0,0 +1,120 @@ +/* @odoo-module */ + +import { Record } from "@mail/core/common/record"; +import { assignDefined } from "@mail/utils/common/misc"; + +import { deserializeDateTime } from "@web/core/l10n/dates"; +import { _t } from "@web/core/l10n/translation"; + +export class Call extends Record { + static id = "id"; + /** @type {Object.} */ + static records = {}; + + /** + * @param {Object} data + * @returns {Call} + */ + static insert(data) { + const call = this.get(data) ?? this.new(data); + if (data.partner) { + data.partner = this.store.Persona.insert({ ...data.partner, type: "partner" }); + } + if (data.creationDate) { + data.creationDate = deserializeDateTime(data.creationDate); + } + if (data.startDate) { + data.startDate = deserializeDateTime(data.startDate); + } + if (data.endDate) { + data.endDate = deserializeDateTime(data.endDate); + } + assignDefined(call, data); + return call; + } + + activity; + /** @type {luxon.DateTime} */ + creationDate; + /** @type {"incoming"|"outgoing"} */ + direction; + /** @type {string} */ + displayName; + /** @type {luxon.DateTime} */ + endDate; + /** @type {import("@mail/core/persona_model").Persona | undefined} */ + partner; + /** @type {string} */ + phoneNumber; + /** @type {luxon.DateTime} */ + startDate; + /** @type {"aborted"|"calling"|"missed"|"ongoing"|"rejected"|"terminated"} */ + state; + /** @type {{ interval: number, time: number }} */ + timer; + + /** @returns {string} */ + get callDate() { + if (this.state === "terminated") { + return this.startDate.toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + return this.creationDate.toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + + /** @returns {number} */ + get duration() { + if (!this.startDate || !this.endDate) { + return 0; + } + return (this.endDate - this.startDate) / 1000; + } + + /** @returns {string} */ + get durationString() { + if (!this.duration) { + return ""; + } + const minutes = Math.floor(this.duration / 60); + const seconds = this.duration % 60; + if (minutes === 0) { + switch (seconds) { + case 0: + return _t("less than a second"); + case 1: + return _t("1 second"); + case 2: + return _t("2 seconds"); + default: + return _t("%(seconds)s seconds", { seconds }); + } + } + if (seconds === 0) { + switch (minutes) { + case 1: + return _t("1 minute"); + case 2: + return _t("2 minutes"); + default: + return _t("%(minutes)s minutes", { minutes }); + } + } + return _t("%(minutes)s min %(seconds)s sec", { minutes, seconds }); + } + + /** @returns {boolean} */ + get isInProgress() { + switch (this.state) { + case "calling": + case "ongoing": + // In case the power goes out in the middle of a call (for + // example), the call may be stuck in the “calling” or “ongoing” + // state, meaning we can't rely on the state alone, hence the + // need to also check for the session. + return Boolean(this._store.env.services["voip.user_agent"].session); + default: + return false; + } + } +} + +Call.register(); diff --git a/voip/static/src/core/call_service.js b/voip/static/src/core/call_service.js new file mode 100644 index 0000000..1a8fb34 --- /dev/null +++ b/voip/static/src/core/call_service.js @@ -0,0 +1,90 @@ +/* @odoo-module */ + +import { browser } from "@web/core/browser/browser"; +import { registry } from "@web/core/registry"; + +export class CallService { + missedCalls = 0; + + constructor(env, services) { + this.env = env; + this.orm = services.orm; + this.store = services["mail.store"]; + this.activityService = services["mail.activity"]; + } + + async abort(call) { + const [data] = await this.orm.call("voip.call", "abort_call", [[call.id]]); + this.store.Call.insert(data); + } + + async create(data) { + const { activity, partner } = data; + delete data.activity; + delete data.partner; + data.partner_id = partner?.id; + const [res] = await this.orm.call("voip.call", "create_and_format", [], data); + const call = this.store.Call.insert(res); + if (activity) { + call.activity = activity; + } + if (!call.partner) { + this.orm.call("voip.call", "get_contact_info", [[call.id]]).then((partnerData) => { + if (partnerData) { + call.partner = partnerData; + } + }); + } + return call; + } + + async end(call, { activityDone = true } = {}) { + let data; + if (call.activity && activityDone) { + [data] = await this.orm.call("voip.call", "end_call", [[call.id]], { + activity_name: call.activity.res_name, + }); + await this.activityService.markAsDone(call.activity); + this.activityService.delete(call.activity); + call.activity = null; + } else { + [data] = await this.orm.call("voip.call", "end_call", [[call.id]]); + } + this.store.Call.insert(data); + if (call.timer) { + clearInterval(call.timer.interval); + call.timer = null; + } + } + + async miss(call) { + const [data] = await this.orm.call("voip.call", "miss_call", [[call.id]]); + this.store.Call.insert(data); + this.missedCalls++; + } + + async reject(call) { + const [data] = await this.orm.call("voip.call", "reject_call", [[call.id]]); + this.store.Call.insert(data); + } + + async start(call) { + const [data] = await this.orm.call("voip.call", "start_call", [[call.id]]); + this.store.Call.insert(data); + call.timer = {}; + const computeDuration = () => { + call.timer.time = Math.floor((luxon.DateTime.now() - call.startDate) / 1000); + }; + computeDuration(); + call.timer.interval = browser.setInterval(computeDuration, 1000); + } +} + +export const callService = { + dependencies: ["mail.activity", "mail.persona", "mail.store", "orm"], + start(env, services) { + return new CallService(env, services); + }, +}; + +registry.category("services").add("voip.call", callService); diff --git a/voip/static/src/core/correspondence_model.js b/voip/static/src/core/correspondence_model.js new file mode 100644 index 0000000..0cd4a5e --- /dev/null +++ b/voip/static/src/core/correspondence_model.js @@ -0,0 +1,51 @@ +/* @odoo-module */ + +import { url } from "@web/core/utils/urls"; + +export class Correspondence { + activity; + call; + _partner; + + constructor({ activity, partner, call }) { + if (!activity && !partner && !call) { + throw TypeError( + "Cannot create correspondence: missing required data. A correspondence must refer to an activity, a partner or a phone call." + ); + } + this.activity = activity; + this._partner = partner; + this.call = call; + } + + /** @returns {string} */ + get avatarUrl() { + if (this.partner) { + return url("/web/image", { + model: "res.partner", + id: this.partner.id, + field: "avatar_128", + }); + } + return "/base/static/img/avatar_grey.png"; + } + + /** @returns {import("@mail/core/common/persona_model").Persona | undefined} */ + get partner() { + return this.call?.partner ?? this.activity?.partner ?? this._partner; + } + + /** @returns {string} */ + get phoneNumber() { + if (this.call) { + return this.call.phoneNumber; + } + if (this.activity) { + return this.activity.mobile || this.activity.phone; + } + if (this.partner) { + return this.partner.mobileNumber || this.partner.landlineNumber; + } + return ""; + } +} diff --git a/voip/static/src/core/messaging_service_patch.js b/voip/static/src/core/messaging_service_patch.js new file mode 100644 index 0000000..0ed38aa --- /dev/null +++ b/voip/static/src/core/messaging_service_patch.js @@ -0,0 +1,12 @@ +/* @odoo-module */ + +import { Messaging } from "@mail/core/common/messaging_service"; + +import { patch } from "@web/core/utils/patch"; + +patch(Messaging.prototype, { + initMessagingCallback({ voipConfig }) { + super.initMessagingCallback(...arguments); + this.store.voipConfig = voipConfig; + }, +}); diff --git a/voip/static/src/core/registerer.js b/voip/static/src/core/registerer.js new file mode 100644 index 0000000..39c3df8 --- /dev/null +++ b/voip/static/src/core/registerer.js @@ -0,0 +1,91 @@ +/* @odoo-module */ +/* global SIP */ + +import { _t } from "@web/core/l10n/translation"; + +export class Registerer { + /** + * When sending a REGISTER request, an “expires” parameter with the value of + * this field is added to the Contact header. It is used to indicate how + * long we would like the registration to remain valid. + * Note however that the definitive value is decided by the server based on + * its own policy and may therefore differ. + * + * The library automatically renews the registration for the same duration + * shortly before it expires. + * + * The value is expressed in seconds. + */ + static EXPIRATION_INTERVAL = 3600; + /** + * Possible values: + * - SIP.RegistererState.Initial + * - SIP.RegistererState.Registered + * - SIP.RegistererState.Unregistered + * - SIP.RegistererState.Terminated + */ + state; + /** + * An instance of the Registerer class from the SIP.js library. It shouldn't + * be used outside of this class; only this class is responsible for + * interfacing with this object. + */ + __sipJsRegisterer; + + constructor(voip, sipJsUserAgent) { + this.voip = voip; + this.__sipJsRegisterer = new SIP.Registerer(sipJsUserAgent, { + expires: Registerer.EXPIRATION_INTERVAL, + }); + this.__sipJsRegisterer.stateChange.addListener((state) => this._onStateChanged(state)); + } + + /** + * Sends the REGISTER request to the Registrar. + */ + register() { + this.__sipJsRegisterer.register({ + requestDelegate: { + onReject: (response) => this._onRegistrationRejected(response), + }, + }); + } + + /** + * Triggered when receiving a response with status code 4xx, 5xx, or 6xx to + * the REGISTER request. + * + * @param {SIP.IncomingResponse} response The server final response to the + * REGISTER request. + */ + _onRegistrationRejected(response) { + const errorMessage = _t("Registration rejected: %(statusCode)s %(reasonPhrase)s.", { + statusCode: response.message.statusCode, + reasonPhrase: response.message.reasonPhrase, + }); + const help = (() => { + switch (response.message.statusCode) { + case 401: // Unauthorized + return _t( + "The server failed to authenticate you. Please have an administrator verify that you are reaching the right server (PBX server IP in the General Settings) and that the credentials in your user preferences are correct." + ); + case 503: // Service Unavailable + return _t( + "The error may come from the transport layer. Please have an administrator verify the websocket server URL in the General Settings. If the problem persists, this is probably an issue with the server." + ); + default: + return _t( + "Please try again later. If the problem persists, you may want to ask an administrator to check the configuration." + ); + } + })(); + this.voip.triggerError(`${errorMessage}\n\n${help}`); + } + + _onStateChanged(newState) { + this.state = newState; + if (newState === SIP.RegistererState.Registered) { + this.voip.resolveError(); + } + } +} diff --git a/voip/static/src/core/user_agent_service.js b/voip/static/src/core/user_agent_service.js new file mode 100644 index 0000000..5c11d8a --- /dev/null +++ b/voip/static/src/core/user_agent_service.js @@ -0,0 +1,642 @@ +/* @odoo-module */ +/* global SIP */ + +import { reactive } from "@odoo/owl"; + +import { Registerer } from "@voip/core/registerer"; +import { cleanPhoneNumber } from "@voip/utils/utils"; + +import { getBundle, loadBundle } from "@web/core/assets"; +import { browser } from "@web/core/browser/browser"; +import { _t } from "@web/core/l10n/translation"; +import { registry } from "@web/core/registry"; + +/** + * @typedef Session + * @property {"trying"|"ringing"|"ok"} [inviteState] + * @property {boolean} isMute + * @property {import("@voip/core/call_model").Call} call + * @property {window.sip.Session} [sipSession] + * @property {string} [transferTarget] + */ + +export class UserAgent { + attemptingToReconnect = false; + /** + * The id of the setTimeout used in demo mode to simulate the waiting time + * before the call is picked up. + * + * @type {number} + */ + demoTimeout; + preferredInputDevice; + registerer; + /** + * The Audio element used to play the audio stream received from the remote + * call party. + * + * @type {HTMLAudioElement} + */ + remoteAudio = new window.Audio(); + /** + * @type {Session} + */ + session; + transferTarget; + voip; + __sipJsUserAgent; + + constructor(env, services) { + this.env = env; + this.callService = services["voip.call"]; + this.notificationService = services.notification; + this.ringtoneService = services["voip.ringtone"]; + this.voip = services.voip; + this.softphone = this.voip.softphone; + this.voip.isReady.then(() => this.init()); + return reactive(this); + } + + /** @returns {Object} */ + get mediaConstraints() { + const constraints = { audio: true, video: false }; + if (this.preferredInputDevice) { + constraints.audio = { deviceId: { exact: this.preferredInputDevice } }; + } + return constraints; + } + + /** + * Provides the function that will be used by the SIP.js library to create + * the media source that will serve as the local media stream (i.e. the + * recording of the user's microphone). + * + * @returns {SIP.MediaStreamFactory} + */ + get mediaStreamFactory() { + return (constraints, sessionDescriptionHandler) => { + const mediaRequest = browser.navigator.mediaDevices.getUserMedia(constraints); + mediaRequest.then( + (stream) => this._onGetUserMediaSuccess(stream), + (error) => this._onGetUserMediaFailure(error) + ); + return mediaRequest; + }; + } + + /** + * Provides the handlers to be called by the SIP.js library when receiving + * SIP requests (BYE, INFO, ACK, REFER…). + * + * @returns {SIP.SessionDelegate} + */ + get sessionDelegate() { + return { onBye: (bye) => this._onBye(bye) }; + } + + /** @returns {Object} */ + get sipJsUserAgentConfig() { + const isDebug = odoo.debug !== ""; + return { + authorizationPassword: this.voip.settings.voip_secret, + authorizationUsername: this.voip.authorizationUsername, + delegate: { + onDisconnect: (error) => this._onTransportDisconnected(error), + onInvite: (inviteSession) => this._onIncomingInvitation(inviteSession), + }, + hackIpInContact: true, + logBuiltinEnabled: isDebug, + logLevel: isDebug ? "debug" : "error", + sessionDescriptionHandlerFactory: SIP.Web.defaultSessionDescriptionHandlerFactory( + this.mediaStreamFactory + ), + sessionDescriptionHandlerFactoryOptions: { iceGatheringTimeout: 1000 }, + transportOptions: { + server: this.voip.webSocketUrl, + traceSip: isDebug, + }, + uri: SIP.UserAgent.makeURI( + `sip:${this.voip.settings.voip_username}@${this.voip.pbxAddress}` + ), + userAgentString: `Odoo ${odoo.info.server_version} SIP.js/${window.SIP.version}`, + }; + } + + async acceptIncomingCall() { + this.ringtoneService.stopPlaying(); + this.session.sipSession.accept({ + sessionDescriptionHandlerOptions: { + constraints: this.mediaConstraints, + }, + }); + this.voip.triggerError(_t("Please accept the use of the microphone.")); + } + + async attemptReconnection(attemptCount = 0) { + if (attemptCount > 5) { + this.voip.triggerError( + _t("The WebSocket connection was lost and couldn't be reestablished.") + ); + return; + } + if (this.attemptingToReconnect) { + return; + } + this.attemptingToReconnect = true; + try { + await this.__sipJsUserAgent.reconnect(); + this.registerer.register(); + this.voip.resolveError(); + } catch { + setTimeout( + () => this.attemptReconnection(attemptCount + 1), + 2 ** attemptCount * 1000 + Math.random() * 500 + ); + } finally { + this.attemptingToReconnect = false; + } + } + + /** + * @param {string} phoneNumber + * @returns {SIP.URI} + */ + getUri(phoneNumber) { + const sanitizedNumber = cleanPhoneNumber(phoneNumber); + return SIP.UserAgent.makeURI(`sip:${sanitizedNumber}@${this.voip.pbxAddress}`); + } + + async hangup({ activityDone = true } = {}) { + this.ringtoneService.stopPlaying(); + browser.clearTimeout(this.demoTimeout); + if (this.session.sipSession) { + this._cleanUpRemoteAudio(); + switch (this.session.sipSession.state) { + case SIP.SessionState.Establishing: + this.session.sipSession.cancel(); + break; + case SIP.SessionState.Established: + this.session.sipSession.bye(); + break; + } + } + switch (this.session.call.state) { + case "calling": + await this.callService.abort(this.session.call); + break; + case "ongoing": + await this.callService.end(this.session.call, { activityDone }); + break; + } + this.session = null; + if (this.softphone.isInAutoCallMode) { + this.softphone.selectNextActivity(); + } + } + + async init() { + if (this.voip.mode !== "prod") { + return; + } + if (!this.voip.hasRtcSupport) { + this.voip.triggerError( + _t( + "Your browser does not support some of the features required for VoIP to work. Please try updating your browser or using a different one." + ) + ); + return; + } + if (!this.voip.isServerConfigured) { + this.voip.triggerError( + _t("PBX or Websocket address is missing. Please check your settings.") + ); + return; + } + if (!this.voip.areCredentialsSet) { + this.voip.triggerError( + _t("Your login details are not set correctly. Please contact your administrator.") + ); + return; + } + try { + await loadBundle(await getBundle("voip.assets_sip")); + } catch (error) { + console.error(error); + this.voip.triggerError( + _t("Failed to load the SIP.js library:\n\n%(error)s", { + error: error.message, + }) + ); + return; + } + try { + this.__sipJsUserAgent = new SIP.UserAgent(this.sipJsUserAgentConfig); + } catch (error) { + console.error(error); + this.voip.triggerError( + _t("An error occurred during the instantiation of the User Agent:\n\n%(error)s", { + error: error.message, + }) + ); + return; + } + this.voip.triggerError(_t("Connecting…")); + try { + await this.__sipJsUserAgent.start(); + } catch { + this.voip.triggerError( + _t( + "The user agent could not be started. The websocket server URL may be incorrect. Please have an administrator check the websocket server URL in the General Settings." + ) + ); + return; + } + this.registerer = new Registerer(this.voip, this.__sipJsUserAgent); + this.registerer.register(); + } + + invite(phoneNumber) { + let calleeUri; + if (this.voip.willCallFromAnotherDevice) { + calleeUri = this.getUri(this.voip.settings.external_device_number); + this.session.transferTarget = phoneNumber; + } else { + calleeUri = this.getUri(phoneNumber); + } + try { + const inviter = new SIP.Inviter(this.__sipJsUserAgent, calleeUri); + inviter.delegate = this.sessionDelegate; + inviter.stateChange.addListener((state) => this._onSessionStateChange(state)); + this.session.sipSession = inviter; + this.session.sipSession.invite({ + requestDelegate: { + onAccept: (response) => this._onOutgoingInvitationAccepted(response), + onProgress: (response) => this._onOutgoingInvitationProgress(response), + onReject: (response) => this._onOutgoingInvitationRejected(response), + }, + sessionDescriptionHandlerOptions: { + constraints: this.mediaConstraints, + }, + }).catch((error) => { + if (error.name === "NotAllowedError") { + return; + } + throw error; + }); + } catch (error) { + console.error(error); + this.voip.triggerError( + _t( + "An error occurred trying to invite the following number: %(phoneNumber)s\n\nError: %(error)s", + { phoneNumber, error: error.message } + ) + ); + } + } + + /** @param {Object} data */ + async makeCall(data) { + if (!(await this.voip.willCallUsingVoip())) { + window.location.assign(`tel:${data.phone_number}`); + return; + } + const call = await this.callService.create(data); + this.softphone.show(); + this.softphone.closeNumpad(); + this.notificationService.add( + _t("Calling %(phone number)s", { "phone number": call.phoneNumber }) + ); + this.softphone.selectCorrespondence({ call }); + this.session = { + inviteState: "trying", + isMute: false, + call, + }; + this.ringtoneService.ringback.play(); + if (this.voip.mode === "prod") { + this.invite(call.phoneNumber); + } else { + this.demoTimeout = browser.setTimeout(() => { + this._onOutgoingInvitationAccepted(); + }, 3000); + } + } + + async rejectIncomingCall() { + this.ringtoneService.stopPlaying(); + this.session.sipSession.reject({ statusCode: 603 /* Decline */ }); + await this.callService.reject(this.session.call); + this.session = null; + } + + /** @param {string} deviceId */ + async switchInputStream(deviceId) { + if (!this.session.sipSession?.sessionDescriptionHandler.peerConnection) { + return; + } + this.preferredInputDevice = deviceId; + const stream = await browser.navigator.mediaDevices.getUserMedia(this.mediaConstraints); + for (const sender of this.session.sipSession.sessionDescriptionHandler.peerConnection.getSenders()) { + if (sender.track) { + await sender.replaceTrack(stream.getAudioTracks()[0]); + } + } + } + + /** + * Transfers the call to the given number. + * + * @param {string} number + */ + transfer(number) { + if (this.voip.mode === "demo") { + this.hangup(); + return; + } + const transferTarget = this.getUri(number); + this.session.sipSession.refer(transferTarget, { + requestDelegate: { + onAccept: (response) => this._onReferAccepted(response), + }, + }); + } + + updateSenderTracks() { + if (!this.session?.sipSession?.sessionDescriptionHandler) { + return; + } + const { peerConnection } = this.session.sipSession.sessionDescriptionHandler; + for (const { track } of peerConnection.getSenders()) { + if (track) { + track.enabled = !this.session.isMute; + } + } + } + + _cleanUpRemoteAudio() { + this.remoteAudio.srcObject = null; + this.remoteAudio.pause(); + } + + /** + * Triggered when receiving a BYE request. Useful to detect when the callee + * of an outgoing call hangs up. + * + * @param {SIP.IncomingByeRequest} bye + */ + async _onBye({ incomingByeRequest: bye }) { + if (!this.session) { + return; + } + await this.callService.end(this.session.call); + this.session = null; + this._cleanUpRemoteAudio(); + if (this.softphone.isInAutoCallMode) { + this.softphone.selectNextActivity(); + } + } + + /** @param {DOMException} error */ + _onGetUserMediaFailure(error) { + console.error(error); + const errorMessage = (() => { + switch (error.name) { + case "NotAllowedError": + return _t( + "Cannot access audio recording device. If you have denied access to your microphone, please allow it and try again. Otherwise, make sure that this website is running over HTTPS and that your browser is not set to deny access to media devices." + ); + case "NotFoundError": + return _t( + "No audio recording device available. The application requires a microphone in order to be used." + ); + case "NotReadableError": + return _t( + "A hardware error has occurred while trying to access the audio recording device. Please ensure that your drivers are up to date and try again." + ); + default: + return _t( + "An error occured involving the audio recording device (%(errorName)s):\n%(errorMessage)s", + { errorMessage: error.message, errorName: error.name } + ); + } + })(); + this.voip.triggerError(errorMessage, { isNonBlocking: true }); + if (this.session.call.direction === "outgoing") { + this.hangup(); + } else { + this.rejectIncomingCall(); + } + } + + /** @param {MediaStream} stream */ + _onGetUserMediaSuccess(stream) { + this.voip.resolveError(); + switch (this.session.call.direction) { + case "outgoing": + this.ringtoneService.dial.play(); + break; + case "incoming": + this.callService.start(this.session.call); + break; + } + } + + /** @param {Object} inviteSession */ + async _onIncomingInvitation(inviteSession) { + if (this.session) { + inviteSession.reject({ statusCode: 486 /* Busy Here */ }); + return; + } + if (this.voip.settings.should_auto_reject_incoming_calls) { + inviteSession.reject({ statusCode: 488 /* Not Acceptable Here */ }); + return; + } + const phoneNumber = inviteSession.remoteIdentity.uri.user; + const call = await this.callService.create({ + direction: "incoming", + phone_number: phoneNumber, + state: "calling", + }); + this.softphone.selectCorrespondence({ call }); + inviteSession.delegate = this.sessionDelegate; + inviteSession.incomingInviteRequest.delegate = { + onCancel: (message) => this._onIncomingInvitationCanceled(message), + }; + inviteSession.stateChange.addListener((state) => this._onSessionStateChange(state)); + this.session = { + call, + isMute: false, + sipSession: inviteSession, + }; + this.softphone.show(); + this.ringtoneService.incoming.play(); + // TODO send notification + } + + /** + * Triggered when receiving CANCEL request. + * Useful to handle missed phone calls. + * + * @param {SIP.IncomingRequestMessage} message + */ + _onIncomingInvitationCanceled(message) { + this.ringtoneService.stopPlaying(); + this.session.sipSession.reject({ statusCode: 487 /* Request Terminated */ }); + this.callService.miss(this.session.call); + this.session = null; + } + + /** + * Triggered when receiving a 2xx final response to the INVITE request. + * + * @param {SIP.IncomingResponse} response + * @param {function} response.ack + * @param {SIP.IncomingResponseMessage} response.message + * @param {SIP.SessionDialog} response.session + */ + _onOutgoingInvitationAccepted(response) { + this.ringtoneService.stopPlaying(); + this.session.inviteState = "ok"; + if (this.voip.willCallFromAnotherDevice) { + this.transfer(this.session.transferTarget); + return; + } + this.callService.start(this.session.call); + } + + /** + * Triggered when receiving a 1xx provisional response to the INVITE request + * (excepted code 100 responses). + * + * NOTE: Relying on provisional responses to implement behaviors seems like + * a bad idea, as they may or may not be sent depending on the SIP server + * implementation. + * + * @param {SIP.IncomingResponse} response + * @param {SIP.IncomingResponseMessage} response.message + * @param {function} response.prack + * @param {SIP.SessionDialog} response.session + */ + _onOutgoingInvitationProgress(response) { + const { statusCode } = response.message; + if (statusCode === 183 /* Session Progress */ || statusCode === 180 /* Ringing */) { + this.ringtoneService.ringback.play(); + this.session.inviteState = "ringing"; + } + } + + /** + * Triggered when receiving a 4xx, 5xx, or 6xx final response to the + * INVITE request. + * + * @param {SIP.IncomingResponse} response + * @param {SIP.IncomingResponseMessage} response.message + * @param {number} response.message.statusCode + * @param {string} response.message.reasonPhrase + */ + _onOutgoingInvitationRejected(response) { + this.ringtoneService.stopPlaying(); + if (response.message.statusCode === 487) { // Request Terminated + // invitation has been cancelled by the user, the session has + // already been terminated + return; + } + const errorMessage = (() => { + switch (response.message.statusCode) { + case 404: // Not Found + case 488: // Not Acceptable Here + case 603: // Decline + return _t( + "The number is incorrect, the user credentials could be wrong or the connection cannot be made. Please check your configuration.\n(Reason received: %(reasonPhrase)s)", + { reasonPhrase: response.message.reasonPhrase } + ); + case 486: // Busy Here + case 600: // Busy Everywhere + return _t("The person you try to contact is currently unavailable."); + default: + return _t("Call rejected (reason: “%(reasonPhrase)s”)", { + reasonPhrase: response.message.reasonPhrase, + }); + } + })(); + this.voip.triggerError(errorMessage, { isNonBlocking: true }); + this.callService.reject(this.session.call); + this.session = null; + } + + /** + * Triggered when receiving a response with status code 2xx to the REFER + * request. + * + * @param {SIP.IncomingResponse} response The server final response to the + * REFER request. + */ + _onReferAccepted(response) { + this.session.sipSession.bye(); + this._cleanUpRemoteAudio(); + this.callService.end(this.session.call); + this.session = null; + } + + /** @param {SIP.SessionState} newState */ + _onSessionStateChange(newState) { + switch (newState) { + case SIP.SessionState.Initial: + break; + case SIP.SessionState.Establishing: + break; + case SIP.SessionState.Established: + this._setUpRemoteAudio(); + this.session.sipSession.sessionDescriptionHandler.remoteMediaStream.onaddtrack = ( + mediaStreamTrackEvent + ) => this._setUpRemoteAudio(); + break; + case SIP.SessionState.Terminating: + break; + case SIP.SessionState.Terminated: + break; + default: + throw new Error(`Unknown session state: "${newState}".`); + } + } + + /** + * Triggered when the transport transitions from connected state. + * + * @param {Error} error + */ + _onTransportDisconnected(error) { + if (!error) { + return; + } + console.error(error); + this.voip.triggerError( + _t( + "The websocket connection to the server has been lost. Attempting to reestablish the connection…" + ) + ); + this.attemptReconnection(); + } + + _setUpRemoteAudio() { + const remoteStream = new MediaStream(); + for (const receiver of this.session.sipSession.sessionDescriptionHandler.peerConnection.getReceivers()) { + if (receiver.track) { + remoteStream.addTrack(receiver.track); + // According to the SIP.js documentation, this is needed by Safari to work. + this.remoteAudio.load(); + } + } + this.remoteAudio.srcObject = remoteStream; + this.remoteAudio.play(); + } +} + +export const userAgentService = { + dependencies: ["notification", "voip", "voip.call", "voip.ringtone"], + start(env, services) { + return new UserAgent(env, services); + }, +}; + +registry.category("services").add("voip.user_agent", userAgentService); diff --git a/voip/static/src/core/user_settings_service_patch.js b/voip/static/src/core/user_settings_service_patch.js new file mode 100644 index 0000000..42ebddf --- /dev/null +++ b/voip/static/src/core/user_settings_service_patch.js @@ -0,0 +1,26 @@ +/* @odoo-module */ + +import { UserSettings } from "@mail/core/common/user_settings_service"; + +import { patch } from "@web/core/utils/patch"; + +const VOIP_CONFIG_KEYS = [ + "external_device_number", + "how_to_call_on_mobile", + "should_auto_reject_incoming_calls", + "should_call_from_another_device", + "voip_secret", + "voip_username", +]; + +patch(UserSettings.prototype, { + /** @override */ + updateFromCommands(settings) { + super.updateFromCommands(settings); + for (const key of VOIP_CONFIG_KEYS) { + if (key in settings) { + this[key] = settings[key]; + } + } + }, +}); diff --git a/voip/static/src/core/voip_service.js b/voip/static/src/core/voip_service.js new file mode 100644 index 0000000..32ea54c --- /dev/null +++ b/voip/static/src/core/voip_service.js @@ -0,0 +1,316 @@ +/* @odoo-module */ + +import { EventBus, markup, reactive } from "@odoo/owl"; + +import { CallMethodSelectionDialog } from "@voip/mobile/call_method_selection_dialog"; +import { SoftphoneContainer } from "@voip/softphone/softphone_container"; +import { Softphone } from "@voip/softphone/softphone_model"; +import { cleanPhoneNumber } from "@voip/utils/utils"; +import { VoipSystrayItem } from "@voip/web/voip_systray_item"; + +import { browser } from "@web/core/browser/browser"; +import { isMobileOS } from "@web/core/browser/feature_detection"; +import { _t } from "@web/core/l10n/translation"; +import { registry } from "@web/core/registry"; +import { Deferred } from "@web/core/utils/concurrency"; +import { escape } from "@web/core/utils/strings"; + +export class Voip { + bus = new EventBus(); + error; + isReady = new Deferred(); + /** + * Either “demo” or “prod”. In demo mode, phone calls are simulated in the + * interface but no RTC sessions are actually established. + * + * @type {"demo"|"prod"} + */ + mode; + /** + * The address of the PBX server. Used as the hostname in SIP URIs. + * + * @type {string} + */ + pbxAddress; + /** @type {Softphone} */ + softphone; + /** + * The WebSocket URL of the signaling server that will be used to + * communicate SIP messages between Odoo and the PBX server. + * + * @type {string} + */ + webSocketUrl; + + constructor(env, services) { + this.env = env; + /** @type {import("@mail/core/user_settings_service").UserSettings} */ + this.settings = services["mail.user_settings"]; + /** @type {import("@mail/core/store_service").Store} */ + this.store = services["mail.store"]; + /** @type {import("@mail/core/messaging_service").Messaging} */ + this.messaging = services["mail.messaging"]; + /** @type {import("@mail/activity/activity_service").ActivityService} */ + this.activityService = services["mail.activity"]; + this.callService = services["voip.call"]; + this.dialog = services.dialog; + this.orm = services.orm; + this.busService = services.bus_service; + this.softphone = new Softphone(this.store, this); + // VoIP config is retrieved by init_messaging RPC to minimize the number + // of requests at start-up. This is why we need to wait until + // mail.messaging is ready to update the VoIP config. + this.messaging.isReady.then(() => { + this.callService.missedCalls = this.store.voipConfig?.missedCalls ?? 0; + delete this.store.voipConfig?.missedCalls; + Object.assign(this, this.store.voipConfig); + delete this.store.voipConfig; + this.isReady.resolve(); + }); + this.busService.addEventListener("notification", this._onBusNotifications.bind(this)); + document.body.addEventListener("beforeunload", this._onBeforeUnload.bind(this)); + return reactive(this); + } + + /** + * Determines if `voip_secret` and `voip_username` settings are defined for + * the current user. + * + * @returns {boolean} + */ + get areCredentialsSet() { + return Boolean(this.settings.voip_username && this.settings.voip_secret); + } + + /** + * With some providers, the authorization username (the one used to register + * with the PBX server) differs from the username. This getter is intended + * to provide a way to override the authorization username. + * + * @returns {string} + */ + get authorizationUsername() { + return this.settings.voip_username || ""; + } + + get calls() { + return this.store.Call.records; + } + + /** @returns {boolean} */ + get canCall() { + return ( + this.mode === "demo" || + (this.hasRtcSupport && this.isServerConfigured && this.areCredentialsSet) + ); + } + + /** @returns {boolean} */ + get hasPendingRequest() { + return Boolean(this._activityRpc || this._contactRpc || this._recentCallsRpc); + } + + /** @returns {boolean} */ + get hasRtcSupport() { + return Boolean( + window.RTCPeerConnection && window.MediaStream && browser.navigator.mediaDevices + ); + } + + /** + * Determines if `pbxAddress` and `webSocketUrl` have been provided. + * + * @returns {boolean} + */ + get isServerConfigured() { + return Boolean(this.pbxAddress && this.webSocketUrl); + } + + /** @returns {boolean} */ + get isValidTransferNumber() { + if (!this.settings.external_device_number) { + return false; + } + return cleanPhoneNumber(this.settings.external_device_number) !== ""; + } + + /** @returns {number} */ + get missedCalls() { + return this.callService.missedCalls; + } + + /** + * Determines if the `should_call_from_another_device` setting is set and if + * an `external_device_number` has been provided. + * + * @returns {boolean} + */ + get willCallFromAnotherDevice() { + return this.settings.should_call_from_another_device && this.isValidTransferNumber; + } + + async fetchContacts(searchTerms = "", offset = 0, limit = 13) { + if (this._contactRpc) { + this._contactRpc.abort(); + } + this._contactRpc = this.orm.call("res.partner", "get_contacts", [], { + offset, + limit, + search_terms: searchTerms, + }); + try { + const contactsData = await this._contactRpc; + contactsData.forEach((contactData) => + this.store.Persona.insert({ ...contactData, type: "partner" }) + ); + this._contactRpc = null; + } catch (error) { + if (error.event?.type === "abort") { + error.event.preventDefault(); + } else { + this._contactRpc = null; + } + } + } + + async fetchRecentCalls(offset = 0, limit = 13) { + if (this._recentCallsRpc) { + this._recentCallsRpc.abort(); + } + this._recentCallsRpc = this.orm.call("voip.call", "get_recent_phone_calls", [], { + offset, + limit, + search_terms: this.softphone.searchBarInputValue.trim(), + }); + try { + const callsData = await this._recentCallsRpc; + callsData.forEach((data) => this.store.Call.insert(data)); + this._recentCallsRpc = null; + } catch (error) { + if (error.event?.type === "abort") { + error.event.preventDefault(); + } else { + this._recentCallsRpc = null; + } + } + } + + async fetchTodayCallActivities() { + if (this._activityRpc) { + return; + } + this._activityRpc = this.orm.call("mail.activity", "get_today_call_activities"); + try { + const activitiesData = await this._activityRpc; + activitiesData.forEach((data) => this.store.Activity.insert(data)); + } finally { + this._activityRpc = null; + } + } + + resetMissedCalls() { + if (this.missedCalls !== 0) { + this.orm.call("res.users", "reset_last_seen_phone_call"); + } + this.callService.missedCalls = 0; + } + + resolveError() { + this.error = null; + } + + /** + * Triggers an error that will be displayed in the softphone, and blocks the + * UI by default. + * + * @param {string} message The error message to be displayed. + * @param {Object} [options={}] + * @param {boolean} [options.isNonBlocking=false] If true, the error will + * not block the UI. + */ + triggerError(message, { isNonBlocking = false } = {}) { + const safeText = markup(escape(message).replaceAll("\n", "
")); + this.error = { text: safeText, isNonBlocking }; + } + + /** @returns {Deferred} */ + async willCallUsingVoip() { + if (!isMobileOS()) { + return true; + } + const callMethod = this.settings.how_to_call_on_mobile; + if (callMethod !== "ask") { + return callMethod === "voip"; + } + const useVoip = new Deferred(); + this.dialog.add( + CallMethodSelectionDialog, + { useVoip }, + { onClose: () => useVoip.resolve(true) } + ); + return useVoip; + } + + /** + * @param {BeforeUnloadEvent} ev + * @returns {string|undefined} + */ + _onBeforeUnload(ev) { + if (!this.softphone.selectedCorrespondence?.call?.isInProgress) { + return; + } + ev.preventDefault(); + return (ev.returnValue = _t( + "There is still a call in progress, are you sure you want to leave the page?" + )); + } + + _onBusNotifications({ detail: notifications }) { + for (const { payload, type } of notifications) { + switch (type) { + case "delete_call_activity": { + const activity = this.store.Activity.insert(payload); + this.activityService.delete(activity); + break; + } + case "refresh_call_activities": + this.fetchTodayCallActivities(); + return; + } + } + } +} + +export const voipService = { + dependencies: [ + "bus_service", + "dialog", + "mail.activity", + "mail.messaging", + "mail.store", + "mail.user_settings", + "orm", + "user", + "voip.call", + ], + async start(env, { user }) { + const isEmployee = await user.hasGroup("base.group_user"); + if (!isEmployee) { + const isReady = new Deferred(); + return { + bus: new EventBus(), + get canCall() { + return false; + }, + isReady, + }; + } + registry.category("main_components").add("voip.SoftphoneContainer", { + Component: SoftphoneContainer, + }); + registry.category("systray").add("voip", { Component: VoipSystrayItem }); + return new Voip(...arguments); + }, +}; + +registry.category("services").add("voip", voipService); diff --git a/voip/static/src/mobile/call_method_selection_dialog.js b/voip/static/src/mobile/call_method_selection_dialog.js new file mode 100644 index 0000000..a1f4b14 --- /dev/null +++ b/voip/static/src/mobile/call_method_selection_dialog.js @@ -0,0 +1,38 @@ +/* @odoo-module */ + +import { Component, useRef } from "@odoo/owl"; + +import { Dialog } from "@web/core/dialog/dialog"; +import { useService } from "@web/core/utils/hooks"; +import { _t } from "@web/core/l10n/translation"; + +export class CallMethodSelectionDialog extends Component { + static components = { Dialog }; + static props = { close: Function, useVoip: Promise }; + static template = "voip.CallMethodSelectionDialog"; + + setup() { + this.fieldsetRef = useRef("fieldset"); + this.rememberCheckboxRef = useRef("rememberCheckbox"); + this.settings = useService("mail.user_settings"); + this.orm = useService("orm"); + } + + get dialogProps() { + return { title: _t("Select a call method") }; + } + + /** @param {MouseEvent} ev */ + onClickConfirm(ev) { + const { value } = this.fieldsetRef.el.querySelector( + "input[type='radio'][name='call-method']:checked" + ); + if (this.rememberCheckboxRef.el.checked) { + this.orm.call("res.users.settings", "set_res_users_settings", [[this.settings.id]], { + new_settings: { how_to_call_on_mobile: value }, + }); + } + this.props.useVoip.resolve(value === "voip"); + this.props.close(); + } +} diff --git a/voip/static/src/mobile/call_method_selection_dialog.xml b/voip/static/src/mobile/call_method_selection_dialog.xml new file mode 100644 index 0000000..322e884 --- /dev/null +++ b/voip/static/src/mobile/call_method_selection_dialog.xml @@ -0,0 +1,23 @@ + + + + +
+ Tell us how to make the call: +
+ + +
+
+ + +
+
+ + + + + +
+
+
diff --git a/voip/static/src/mobile/device_selection_dialog.js b/voip/static/src/mobile/device_selection_dialog.js new file mode 100644 index 0000000..034abc3 --- /dev/null +++ b/voip/static/src/mobile/device_selection_dialog.js @@ -0,0 +1,54 @@ +/* @odoo-module */ + +import { Component, onWillStart, useRef } from "@odoo/owl"; + +import { browser } from "@web/core/browser/browser"; +import { Dialog } from "@web/core/dialog/dialog"; +import { useService } from "@web/core/utils/hooks"; +import { _t } from "@web/core/l10n/translation"; + +export class DeviceSelectionDialog extends Component { + static components = { Dialog }; + static props = { close: Function }; + static template = "voip.DeviceSelectionDialog"; + + setup() { + this.devices = []; + this.selectRef = useRef("select"); + this.userAgent = useService("voip.user_agent"); + onWillStart(async () => (this.devices = await this.getAudioInputDevices())); + } + + get currentDeviceId() { + return this.userAgent.preferredInputDevice; + } + + get dialogProps() { + return { + title: _t("Input device selection"), + fullscreen: true, + }; + } + + /** @returns {Promise<{deviceId: *, label: string}[]>} */ + async getAudioInputDevices() { + const devices = await browser.navigator.mediaDevices.enumerateDevices(); + return devices + .filter(({ kind }) => kind === "audioinput") + .map((device, i) => ({ + deviceId: device.deviceId, + label: device.label || `Device ${i + 1}`, + })); + } + + /** @param {MouseEvent} ev */ + onClickCancel(ev) { + this.props.close(); + } + + /** @param {MouseEvent} ev */ + onClickConfirm(ev) { + this.userAgent.switchInputStream(this.selectRef.el.value); + this.props.close(); + } +} diff --git a/voip/static/src/mobile/devise_selection_dialog.xml b/voip/static/src/mobile/devise_selection_dialog.xml new file mode 100644 index 0000000..85f6951 --- /dev/null +++ b/voip/static/src/mobile/devise_selection_dialog.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/voip/static/src/ringtones/dialtone.mp3 b/voip/static/src/ringtones/dialtone.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..438469bc0b6c157ff7e37c19ea24f783f69ed105 GIT binary patch literal 76402 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�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 b{J)L_z$^T3CI5T>e{KIax&L*N|D5=L@4q*W literal 0 HcmV?d00001 diff --git a/voip/static/src/ringtones/incomingcall.mp3 b/voip/static/src/ringtones/incomingcall.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fe74e402879ffc2a89b68301a9eebe9937334deb GIT binary patch literal 81954 zcmdpd5^_xkQ7i50YM}M5fJu^ zzjMBvFYh04_I1t7hcz?LGjp$d-D|C9ZB<1fzvdYsa~L3;+;W5P)Ih5fCHDsc7i$BAHp)xp+_l!Xn~QGI9#a zs_I%g`bNfPkF0F%ot)h~y?yo1d-MP9^8fCR<$v4d|EIQFfb4EjBVZWIIJ1(1f_A*5nOru*}qcto}q1upJ(^ticQ?8XJPC{v_PGIG$QU_0vMs>pOkN!hYe z1!>7whE7y3ol8@{@P-r3Le;V4bezt^0aP%8*MPEuj_g{@iq{nnrr%cGT!!Xn$*tRj zL)Uiz!B{ax1gUgrRAT4ezVXT|Zt6po3;rbdS7xZF=Xc%UE}pn3P5*%FKj49rR4Oim zG{}DV9jus4@G8v?9}e5+(0v$ygrnh|L_ZlI$?JXm zS{Ha>h*YP_?o3VrF|y=sV#wAwAv}=)n#hbGREH-AJi_!@M<9#Bkc=)mM&!8H`U-aM`PJAMfMXnNP(B|gzzTm;_S)KH6a7S(xYKwF8qX}ihoE6UG;E9ou$S24aQR4p z9i>IgZSG{!*%Dxy963_S@vG|EtTe@Vg6Lbu#IKzj3=00^4)f8k%lLqc?7()Pc~RMO z95a9p+CEkcTf7zJDr16O*^pO*Hj-JVsN1cmLA zynd<;Ni=15*6s-H$%uQgvZ}90ck_$pRr(h<@izZ4&yNR1tM6SUozEzQpD|Ie8?}0N z#Q-?(EL%^cg76axswi_}JXkhrU1UC-`|(_XTr)ej9s)Rb*0xZw4!p zjS~dM;nzu!+#_%T!pjJxj)zY4$VvW&G;@p6Joz;c7z$4Fb8o2*Lx)#%p}9#Q`;O8N z^&RDV-&TENPwKF6#69+|LvLF5ugL&tXb^?OzBsR7eBm&XB|lq5N9;lLo5D(NB(|0s zB>)hxm8O2Fl`QC`}19j4Rs`VRkG>w*O-sdP=(`6v++QNjIZ zwCAc>pR3^=xVi^(zj)(QtZ0qp9Wr zUWHm}qM@3<;}<%*NTsachKNl5=#q|XG1NZ}5dg3Zl!j!!nw7@jlPS+|bs~la$vUsG zBE97A!gWO4PyiOT3db9zvJxT0e#xw36#|DL@pqL9TK#%sYSp*&7I`wNsjsy{&+t8U z8whj8Qkl57mez8&%VQh6zhK{OW_3EBxVTPp2fwv^c3n-0gVmbs0M*h$p$~3K0XP8F zS^?+^vUo&~ze7pxu8###G5Lx6#{$tRd&Ortk1E}SgL$uip5#o_)wdgd;1HbSDtUm# zuICsOjm>TArZ$lq-v40@kJ!RA7eL`sX}3Jr9jKRJ7axW202wD)~{_?6>(iXq0eB6TQf#dav5=oH1KdUEIAN!H(>yOu9wt}jS zc{_5t?W^smgxJo8jUBZ6yX+Qt%5dvz`W+^06G;~#wglX1eSPsWd4~9wv$#G&hpG`B zDbzPB!qOgQjW!maVP&R^ec4D`V$o`-YkM^7U4<~RD)(xXj*<*^MN$kn42??ua{ql)*{M-B3)6qem1_klx#cj_-)7f{wSUt8MX1(qf?qS%hn*xo@G@6X#y#8JW9rf%zo zAYyCPQJGBwkpo*|p-(&2ZA5QNHfnR9xdEUj2!bd^Q7$SMy*CgqJPe>vA_((J_N(Ma zP51U$MZRe;_9d2glFZJ5Y6bKB_=gZBTtS>`{8cWUmBnCOl25TZVRkBy*3U7y7|K$= zcS)#_LUo;%8;<)`?`ReD^SbLCyN@n==d6^e@q8Bwc7hOX@ekBrPBtCo;Qo3&CN=F4 zr~+3b3~dE(GQpdncr*auc@LWp&q||=h1JMt`eB0kP#6$j(R(ik&>e?K z$HAh7nl%dz=1frF%6nIlAG+JTeF#SM(R3Zp;0?DS5V=sfv^0_+SZ5Ci?icG+01=Pp z%8ISN4&W0gZ6DZ~JlK5%$42)Rwguwf0VryIJxYDnT&ccstUipvpL_fCBu6o?euAmx zxS=QJcyv`R*j5hPveWGG#nY>y>_BmBF>V6x4K<{edJcm1MJRZ7?bm@Dwy@H&Fp;!< zH$REnO6`5*>-{<(XImb5t6%>RA_kxxEJk}IoaQ=8L7I*Vnu$$$d|JnNy4tDVcWX0w zgZSb*xW&JtEUPoTY@a{IWlTALKvGCa{~*O{aAvGr7eZ=Bh|`zugl#+rA!AB6t9f_u zerP$r;HEh!w-A}GImQfKcr*S|E*=3W!|$5OPnD0idmUR+L1dNkMeg2AeSOH8aSirF zi~SHWSC8e3c7O6KYV2Bhx_H>~J#0YL-jg!+N0D%8kB)kzOVDJqGf<&?p zLVg~jd!3wEZZ!b_=&~W`^7*B()Ng2<8+E|uyX{l_EKYI%6T^6LZjV|Z((>zbTcd(@ z;z+IMH^9vAe4+Ip3P_bAwy>mZYUebqCx_QPAUGk0EA*UqFcx5L5>!B!-`Bv_t4#gC|G_+`U1 z(ecMQ6g>Y4f|h%K|1EZcFH3jkqhYwUM>l`1u z>a{yOyPg~my(q^XP9iEt{6mNV13lo=nKhGl(;2)7@_DU}*y*P846F=eOQ;aeE8G@R z6qQDfTH+o zzAGZVhI~1y$Jem{^0qq}YWt?3Vz$I$yUN|12dc+3*!wsd1KrmA82xT=+vQMaOpWH8IDv7Y)U;*FZ#1#ElL zK?Obn~WqFCYC#z05HTEgZ%L3QKDX^SfO| zg`IR~NJkVr6oHEm?}dI%IR&qNdU_>0282Y@PS#I=l7GxiAU?4&nGR0W%q{XJOBr`3 zHQ0TeTS4##*x)i0dJ!;#i?o8rc_zUD(Fl){gC1cxk#!Mc=?D-bluyeXVDotN6_@(S zY~kgrw%^;ITiqu}$NnKikAWB8|5$Bmqo*RbTr?B9`hXTE@6r?yO|Da+#=|$C?u>3?8g)ouM+aKg)&8FwZ!F3M>ACeTvB<*4S+F8+^sjSu4 z6#6tm=Mlr;GyScge(rYZe^+_YhedE7yzw59k&!0QA%!A;D<$qrSM(B+p0f?T+W)h~|io#8%IULIR zhyQpo*M`QD=CqdH-CZlNAyM#$kacjTWEJxY4R%V6WNjCcoUZJ7z zv@!RFJ`w@y3ewkpLVAQ4`if#5+xO2BSh!77Kf{GX(Un9VS9@@1&CC(=Phu=%Mz1vq z-wsN107@-Mkrl5U}~3sZUbe4owhEQsPtEEvdelcF~4qS7#oBJvm}_*|x9rBi1F zpINCHI6H_>6tecLxrIosMvq&?gzK-?WAAr6PM3d>EIHRb`+T{T+*wh9;^>;V){$%BDNgxWcULa6Bk(4hNk$=wSeN-{ znb!nKuIuHt^25?A5BXF|u<6as)nb;~G#m@p-UzFeb?fm9TQ*XGAt z`!5A~z13JBl;Wg3x+~Hqw#|HqmqlmM~Bif4u zYO;$WXm+HtQOJfuCWagaEt)_E+K+@lsvr!5#D%)PpOhkcqY@(e+yE&-L*DL$6=CfZ zp&g(cVr_l`b&Qk~cx|P*D<;<4xfB*L5@`I2;Xy>4S^9xWACyZ?ntvebkf)IZ9n@rqfunvFhllm8XISjoMMreXq z_h~t^m~>qEU9lb=6i3PL`jKpp9Gj58Fo%VPT>b@UaVzJQCakG2Sib@U?%g{*NH5lx zGTn<|7wkH_o9J|C8TcA1=-RLOv&(wS>&j(!c7hq4?gb#lS)TxCoO&8+sk%3;D0GtBO1wye z63Rvb@4I4`&M*0Jp_lH&D$l>+BdX8%jS5fIg&!uRDF+q4v-dN89t}XAb=NF#T28Cz z^g`30T}}pbP?FMkIQT8iBqwC6u&3?JFn>4S3M3!b%n#ISw))nsX>GszC1#tZ;wq^1 z$@!tM&)xM1Vw5pUu!It0n+TGPgdjZ32#WJYFz|R_x$ZYu4TAGf+^An!pRAw|T@H3K z%9zjxicje}GP;iHmt~7{xY{&n8$aLWj9`xHwV{OV6XgZhl5*>AoM{A< z&c4zku1}nn8k_6?$-=c45|g&#-y(9i2$#EeezYxuDU%awNP~NSy zeKL8sag@O`PxI{rRRz5r!c*63HHMsf(wAfcU&%fBeckeWR$T!Dn&MqU^5sv^3_$WO z-fAZk?oY)V2PWHSodPH`j^G|&ehA+BPIkfQbJKV=bsL_ zVW2*A^R9fVlZMLi&m5F2;{LpltKD(7)~94Y>&g_Nm1l|mc-j^!%hznvlJ81;MjBG8UW7g&*$=SE>7-cPx*ooW64yachdMaDP_B0vg&@+TeE+ z+fUlrfR{ZM^@pwdO#-}vs*K|2Ih$a6JF017YPhV1sK|7EcqLT>7?LR5K8%tMN zsei_KC-mFQRNSM7_l`QWn2aR=g{X|-A|hWqi^I1~hqtR;$v6}gSwVs2PquNu^aLjL zJIhBQOHzCWdhd2WDug3)gP)jv`TJhjMnjv+($wsXFfq4m(>AU;m1ilXG5dYVqO}-X z%Ny(6+;j3baAS>^;W)28TVB#YQu)@NGP{|T)Zs$oSqyTQF^bK$+Srnxao^A0t8}3B z@@b$crQ9+YQ@(O%2+LybK!0K?tF@0*|J{*U@mO#8LQTW4zU9MdNVPK(0K8k7?GVqQ z0DZ1wyBAV}fe@RXXj~jdIG<-(`=>LyT)-`Om>AYeK?;lGW$|J7)hP9fz*d}gf02Bp zW7t4v$yaEaK3b_)+3l|S>8*c-Gy#hD&w4C?7E^Q0=fWe_D8Nx)&wNeoic585X0D3? zrf_?RBS-6;H11qsaiw6xEy=m@#h;$R@9w<$u;{nzz{SCXyHwPONM}38r~e3j8|4Zy z&@`?YS5G=O^#K=mM?CR(uPE8(L4aQ^vr421gMGU$Cj^CHx-S$M5O98d10MhRoQR|J z!*kS^$#|zk%@qgIqB)!(%hjaZsDmKf=n241`l!~_gVK#G?I(L8fhK=O|M$s0zfW^X zjo{Y-DN@0=%t+YcfFqk=OZk60CCO0rnN67`=1E}zku%GZQhXk=gD}G1un;0C| zMr2q}2!OFhFE}2@S`|q-k;zzjmpD0Xgw%#O=)Q4nwQ^kg?S9T{B~EPfiBmB@8=V;i zq_Y46`0@xq1PcHVa@H^!Aqp}yQT$imUOF_b-bOk=Ze^Q9GZ_yUi&>b+unMTOXy@dc z%-*NLYh>?(&0p4qSC+le4MGiX zP7Rva_1tki);OcTT(D=$)R?J75AzC#bRbIZp(~bxx}=WkvdowIzQTVbKD(_~IKb3~6E^e#UW1-Rlu{P+uiFH&fy(o{Bp#c`!k$SK+m8 z&y;j=OM%z*zd?BbAop%raZ>hu&NmZ|SC+xaMj(Y+{}<(~0B9kNwthGNs9|YUp8J+& zyi}@cos_EgvmExbky?N5A%rhL_R!mrs+4q+@0H8B<%WHyduLJJy`pV4UVv{iF#$4*Usz+iFIsdh93Izis zB*zx(vSOR%gWXz`r0Y`Bd%wjSJ>9NZBd+uO!rX<9fXjv*RFj- zqSD!tbbYF85IhfM|r4z0j{gtdWey~#cUM13NBscOSYQpH|xT???PyWm8b{Cz&p0f%7Le{CZyaKDj zS5w=?9l(|`7}jmukimi=UYouSf)yECkQ2r)sal@2aj6ITDy08C-7k{oW|h%VJ3A8< zzxSS0nQ~rBVPSiS^KS3V>&mpI?w36v=+|=tmSP~(>MUKFiOyiK-*i6&PS zBUD086(eDhJ^=7bEIcB~5XLjKEtp$gZqYCpX+%@{x4h@Z5&yjB@3)Cq5}7s7fv2eR zM43ObG&ef^soadZe686h5R@+@rJ6PKUm$Ex|NT}uf=I30wT&vvlpjjT2J4jycjAtx zEO<0Bd2v=ZwMPi2^efz{^kdXB6MR(t;CuhWO%4&yW5(8CDU&ymJvrTpxIwsxr z63CmB*4*u8`LON6Xa*+k&(QGvDnpVQEYs9b{zE7R11;q?awVd3(=Wp(^4`*nV+hr~ z%@n*1(|=rNQ}QZ&CH;!bUD1nfknK`EhT#)YoWa0~7sWFqKCe-kiR{CT$sHX7T-j)Q>sl-$H;$4T^gU%y68b;0&l=(P_wejZkK{DMoB@8Ad92tq7|-}6K! z3!Ks8UtiT~jn9?3cU`o6K6vwmZks~Nl^D@$@JSTAMw{xp`!A)V_uVHao_s?xf;IOf zGTzV8=j%&{g1euJgln=y(x~n^^$J0R*S=>{Hw^uiipMD#(b@X5eYSQy7!J`Hroasp z!%JYm$EF}$mE_@u(6aU<}#X7)S<+?0l1y4#0qCKxxU z)=J|wuqLseYve_8`i4bcF+cI_`*Dm%4FQ`(wzJxr&O6jy8^9Scrfn{G~o2HBWM zW9M}aH$s!PxA3Qt1DZqu_<7 zEe@?l5Xjr0zezEFO{Us*6*bw*jzw`~uh#zR+R>}^tC8O`EQfSH5HE>H_8A(ku`XA? z?g4KOEeb4ci~&;rmOUmkM}-((A4=Eu)dNMRSPrSdC+bK#*0}vh?k~77h4|UHt@^(S z_x`XxN?o33ENDAD7a=J4A?wqAMo*6j`WUvepvx~WSJLLZ=>L1^cdg5<3oo?Vh5liDjbzsASM-80DYbZ~PdsWf9ayh{-&8*QqfTs{U^6H2}a>EH5+2Q23+} z4W7rsi@^i(-w5NiOzni#kthm#LLhU`ZApU>pCi@6^ya-@ss+PcJC~}$HEe6sP6r}m z!YC|rBn1(+`7<*xqM{D;sC1{%z%>#9xXW*9lP@4cfQcVwwr>ome| zNU`JBmLyVjc$2ht4FC^6SKEbK0T2fO=?lmDMXW0(G$rqYkMKvykSP$SmJ2OEC1*rF zWlv%FQ^=GePMaOn%?{nOPCS&oRrLm3EDJwjD8_v9aw#Y=uVOZ9L1vRE4lZZQaZr78 z*a_aY_f&7y!r!yjdZDnQ57|hK`H&`o3N#;JZG=Y#Li0kXdQO3yXL&W=c%)Wmu?;Yw#=NAQ}aN}4nzAyg_UOo%$*}FExgEEWrw0v-VmjB^F zu|rTGOnxj%5le-poI5om2KTmRv7JJ#>mr>|5$l^_kd%8OGz>JHj2&ic>F6gy7iOkX)r@0BB^zZumRWfylM*{$Wa=6|$S+ zdsG^Cp;%=hs+r|i>+ydYFt^r*^yKTuDXR`i(Yz11+X(=p|Ln>e9U2Y(Cp6R1Bti$DyoDdB=Ea zx@Y06SeW50o70eW0a2t``rgfl%bS+9Df&x0rM;e#q7RPRCtBCKn~VXMy7-h z8ElxQi~t)0VUg3ZG9L^V9AK2kQ(4aD@z+@>dU4iPm@%61cFa%yX4Y~fH^>8meKJ%3|;Y0hjuVHeh#JwuI%s^Bb5d3CjlZWYmMtk4Dtx8hO5a6n~ReG+ z=R+Yk4>rPu=^tTrwxjOG>jGca7DKOPW>XT}r_9bn+g;plM@h;j{4aa7HU24^j0W<~v?AzIVB4u3t=c-TEF0 zMOZGMyqd)kka$v@KVQw818#=C6BE?izee5H7-xSQ=O5Ih@EIWXowTzHbadscYnV}7)xcy<4c*FZvIq#i2)!G%w|in=?tS}mDQWCDY5t6_3n&j z)8Gs66Atw111Vy{f=Fh-3*RWl29l|^-%E!3L}HOB-C;<3^@#rl!Yw{*H#Gq(bKjl>z;aP8MKxX8W&e}jbOi>7TT z4sd$3HYWm+J`xB_gqRt$W5jM_EQAovUZR0uQg!SO;0!2Q>t*xzWMWf2l=r-JNw!Zm9C(|I zzAZQ6{LFNy7Sv}6J`$5+|K&#b3e{K48kL+yWhPH-TVL$*`Pv%_OMA$Zis4bSi+?`= zcXK7v4IA~r9(2F|b<9`wqWO^}QMb;%WyxR3o`D0~1|qK^iNaMuT124teM!~ClNzOh zi+pj^Rb9$-8qcET&E=OO#t~Kjhv7?i5z$6R&_I{F6^1@P9%}7$l%4Titxc`(70ogN z&%Nvf$=Cz`AvA!2v2tm<1`9YTM^;VQ!qgLX+=c7T${Cq5tAvw?M67Z@3^J3FzbjE( zy)-bpd+j7?jxA-{IQ{2T6l^UA^#FihT-yPI&z8T9WSCY=UclW3$k;!qq6=X_#Mlpt zMycXP!*jmo#72V9p7e9s{gs}Ej{B#f6@Pi|yqLAoe5j*DAqAbl`#CGu9tb5=ZL)2o zQfPPU>rIUf6ptTp<`=M`^{)(ra5QQIcVB1SCB#t`vEa=bOKU(V)ihVVBrc_6JD5XR z|0>4U-;@~2^~mvkZu4R3Z)L7tBcFM3p-{)}{O%`L+N;~a$HRqbfa{LuA{~^rTvx}6 z6kUjI59jE$M%UH|c#>7lYWlOXmQ>rH#jb?8hkSQzwQYCl@rP_2c`SN+JN>EGljKOf zQ|~yrg=~)Dh>8yzt+ds{wi0S6Hv7R*hwYn;m5#!&3uHf(;I|h~e8fbeampKBglEj_ z`{95ZtJE#Tzf<#>*@Mp@MIkk-@{2t3AP(|M+Vmj>n;)w~%t8f{2CG)>_!=iwwZ9#5 z+U+`SmX~S&B?`C4V0nDT&WChv8e1l}1C5%5+_R{ILDwRytevy&IFV~=_4E2206@WI zwrWizSsyf{dMD}LZ+Voz>dPQ3kcfio6XGRTe?<_U%u3du-=J2z{WjW8bu@A*MtBh#(vify+Z9 z$HW*`p@R+ml*7m$T{x{nFY=1!0p&AbTG3OnUR4F=tl0S-mc&sVa!j% z8&(-!5fKX*_o5lTYeqKL88j~^E`wgq_qG=c_ zhL|4dY%PqOf<#hqpWp8Uf4lo=J!>sO12DFcpA9)s^g$7(myL;#VSWk6l!W+pF5RkP z6!mpWvCBm$&0m$TxLsTAQtx|G-T2kjRlUrOs|_ET``hqcCh?I>-F@tkpNo8&9I|{I zi42u@{~@%88@^9FmfjuLZxLnU?o+Bk$nDCd?e`s$O3K=NP|Ll!G%MOnrtAW){R9th z+x52{V7x!yI6VYD>Cep#Orek?a_FKma{Naunu3COmi3#_p_0CSrR}4vIo~+m_HO;Q z%$KPu|J>k<&5&LA_$P;8qt6!Oy_Ko!y*mjdIaVCRv;b+fAxmgAcugguNpf z46uYUskC%WbV%`yXxN#xoXQ^b{+2O>&Z-5lc8B)-4gKbx|IV_~-E};7>FSHj79R)M zi(L8yQg6w*plSH`S^?EY>hw;8B^yY{`WzOnT#gba zjPcWx7eA=PTwunpA}okzDU^bSTU|$-SN2_wHuPK;4~1}b)TEqk#KUIdzscOIem(Nw z?SnJdf%Egz)$zY`=0fcb*m!f&o{f%0082@({b(Mk)u)Jj@V=CrC0>9 z{2lsdvDrvsD$Np(*{X}>#OV(mZwYxoVMh-YZho9c-?rq3jpu!s#x0~(8v6v6;Pv(XB=!{W;ay-}UblubCPcT?o`; z!<@bsbv)nru__moAMK3{upReDrqpB^`n{m)A}VQK13z7NtG4_^i=9UOL{*3gB--(h z_@cOPxhW%nXhRv;3b2ex{O%G!KIT^u;zP5LQUNP(V9`HNZjc|m?aHkFuV>lXJxrha znPuOUy}bOMZyQ&2E%y6#*&`c(LT~q4^?=pj_fPN?nvpg9k!QrtT~{Lt8_x}*s`i6nbEc^IQz+yHsI?+WJ>r6A1!%hl9}9}N$?MgQLa#kX<&qveLQ zYz^eiJRLzZ8WdIJ=%WfAp4|ucz?)_cz(nRlLF?Y>CFo!5&N0gcgufk6c=yl>frbN7 zn`~NMql_xJf&lcm+mUK)t4<*0!|M`ncI|lmj=v*GA`X~=qKYoP9`yw$BHGt|SQJa` zgJ|=re;nG44PRv$m&~KnvDn5Zaw*lkP374A<}r{bnH3_p<&cEN{!hj>V-$N|D)y%@ z)J8coDwdyR7h8!Ta#`1*tp==(xfK>UhFzjxtgq#p*u#xFtk5|M0u{5@oS}Kuq2TpF zn@Rr>hi%u3IOAk5^08#Z+|-YGXM5S(+-wbWJ?^|MSDEvY29C8nvR?3&*1qt2aclW^ z%?>k@XEKwGU8bjY9le+xFwa!3Ix!TaE&a@0&RGaRm?6`>UhIghHSA(P_4zk_k^LC7 zp^yOT50$xXN|}v|6=ZvdxI3)RYa>AjwbbtvgYe}hMbGj&%wy-BoC3_n2`K2vy}FpI#juc=C97%pThc~X)#@p)9y@rOv5?X$lh4XA?Yu4QlHJFf4z z6aoOfIZGPmqf6%)caj4>A^khDO)T_y)uUNT9A@g92%OngwXzU{Sa&X6uXR;-O&*HbY#lEJzX&dS#HV9sDIu&6AjkvHtr9>mJ%`vJ!_`x| z2mBk^nO?xhx5vNYxt9V=)!Hgn1^DZ{H+<7;J)ogNi^ndV#rh;eWm|GaxdYx?s3}1o za4bzHNn{;3`B9MNhi0&Z`> zOS5~0fq9}n%;uT8Nikg}xw45r7yB-&<S#vaO8mT)}@b%`j z`*yaU06-|GH_U4HMw(OT|9*c4%9|wt68%u6i1i{NXM$BG5=$Gzcba=mH z{8(UPR^bE7B5h>Q$`OzIO1&`c;cBD9D{$YGhT6LA0{iB*Sl0Lx8Ec%anXf5!kt*i9 z>j+L04#-fPv<NUB87g>&5uHSD(sZ|oB#;t8v5 z`g_wKf$&ixEDo~L{xQ3y5~o(a^v!r#Q`O1`ITSoMLX4D@L?*bYKWsXPrOplK3169f zDqm=Athvw~b$&0?bM{OG4HaOSYJm^CFZ$8il))c5Pq7K2Z6bRqr_-rEQ5p*|MSbY0 z-&&#W0oUuKl)v>Apq5$v!Oo(`Tho4$VL03my>bV%yO?%5{}r;y4RBcUirZUA#yhBd zFrzL*g_%>-58DcLf z!uoL}{9;kMS%&)e_4Yjgbn4WzEMdRH#*vmPhbi}L!(OPOgHz_R1B|npwUYhv^yTV) z0eHS>4(bmN$N)dj9m=mw;W-+tjn<1h4_g;kqv3DY z-d%q7YZq=GbCo6`iux|MSJ)EcHoEmf+}UXI;3@y2CHTE3f#hwA*g&_Ew~!l~F5f?d z-eI6c!gH=d5(iqFYMQQ&>T#2PhBcec-bR#F!g+T@mMe{vS)H^7jl@$*aZrjnQGT)F zi)21zv-i7Y9p^!QegKbt<-*Fgfi39y(PcmV^aNAzG$02*el1F$803*Z>2hXaw$B%^ zb_2@7&@W$c^*5Exomyl)SMuog`|;?^tWfi#e}Qf!{*%E++o9LaIsl-geAd8klp{n% z(}TveUq6U7w?gW>G-(Rh^ZR0!3Wp%x4b9{YA!e24byE9UtHbN1Fs0rG`S|_gMzVK8 zRLnOO0UWf0r-BSd+;`LOGibgDuM;RsU%O?FDF75ccKfFEjoqI-pCxI8EO+)3OLS4% z%c$A`=+_Zqy7JJCvBoMb7 z;H5c<1h(O8^iLr0%e5(Ta1;uLZ-giBI_55VfnXPz^s*)TnciNGn;Ag6pf5xO`{ z_YFG*6mG}5AXGIsaXRn<4?Em-<|8dh)iZsBv~n?Z$iHBKjNu8to1h~T^YFYkYRd6eVo z)=Di(f8kmWqb!=zm{GV-(H+R5V}rrx?PS`dkb58#v#F!Zgu@s|gF0p*$m>(%^PN6tkdX{AYDnz?B`YvYd})~JG@0)X$KvMM)HT9-zM z313HKdo?&&kOGuAUqqnnBl2YV{3wWbcWThnbW}oXt=w~7vg?pk(tgHgef|l4*q^9aZj&!2s-^+gmXDWZOcc57F?Yt8coMJ?^>bCLH`Y z){;AvmGX`o-do#^PgE{A!>=>6L(5C3H|Xpu_0k6dhdye|tE;k21wH?fCz&VV^ePvh z^(#xV+F%V1-9-bLf%Pp%!AnCL0E*nLtG%B&SIYpPtnp|*(z6glA$N_MtW!>{gy`(r zOtTYMdqa1BIy&zCjy9PHJr#U`R=|l$$g=j#s2P=JJ32~>DP`YA4M4wXF#JR4I{=;M zTyQ0!bFDXhF{D;;iC)|ZZd@~z7?9CiwG zxbY<)5B}QYy|fTvvNDa<2b0BrS&*UC_MhP;bMMi<($0T{5OHab>CE*Wem%96FXYs+ z)@})2U+8C1AE2P&zZBb>K{5&HgVRBxbh!AH83srlP6Tub zzCn7qP%wa1ovt*dw7cR=f`3O-GxVJJrfUehJ6`G8jGQRxH^*ITPxat`2yJ7+m)R!w z@;Hsnx5n~(;x!XWp32tlS9(9q+N%6gDKI54fY9%OOkc>!CsR`=toj^+t82gC>Y{P+ zRqHtW8c7%dX*E1`1md<+-Zcdu=E@z{80)Cx^zjoxvNBqK%; zOaVf(WQxa{#^Yb{5Fd3L2JpXDb~pK+sJ%7J(HoJK>ipv$f8P1FS)+gSX!BE|tMZZu z&HF9>BEvD3f%lKc_@j~r-^@lT%=H)j4@YMm*5ua);CCA_dh|#sDd|Q5M|b=HDT&dI zgrEq>=uYYGP7x`U?hYwQ=|(9*U>|<(|GTbj_j%6qo^zgaKl#-uW_P62kpSS}wW#&j z<<=Y#655F!**R%AR%a8)YApBYw)f>8!KW)rO#)%5qVwZ^@q4)}uGPlWQHJo8mMrIZ zW9@cjmC1*dHu>KJg}7@;;RiSyEUNnTHi$gpD2Bn5!uo5e`lLJ*lIdYU=UJFLaVyXr z1NNJ61!x{U5)NRls$quD{Y>u^)SjpVw~JrpUi&|{7#F=@;f$#>wOO`QvrJw4VLiYS z9Y9F;K*;IRKCdTgs@%U{v#KoGT~r#j^>=#PATn@d*tf(T*Q@iH{o4 z=-G!uGr(N{0eQRd!VT6j7HgAm&Pi-dz%p4}2(u(SW|uc`5d6T69ODX?H|EoyG+js@ z;&JPTg>;vGbnK;VYI%)s*NK0rJgH#BOUQtCU;n8RL2wPlMeYhAJ1cy3GHCTE>myQj zI{>~BeO2h}0Dd%ShnfKvakV;KgbAzvbxkOm-v9ph-TT@gkKj^OiOJ~OxVn*%5m;6V zam6)QoHfHun03SqA($_2X12Y2(*v+13jY}xU|}I&lrAD@OXwjLfR^d+O0e zHV)NSqPMe6Ba{gX|JhU>hZ1FtMVE3_CF9zBuXOzxZIAIE{BN|C*Kw@(%1V@<-|uIt z_gnu69id2VpD49`qeiO9;`rHyh(`xkvmF1i58%Ms+KXk$v1{t5hO$Eh6wvcOav!%YmITLXJL^E&DB?k9GWc>>R2 z@Rk?62kI-7Ca2lEO%Kz~E22HNiFqZ)5@O6+ZosBSU=wLGJFh5PpwRP*vP8jEz?Oo&aV&- zCMDFRoKS^}^zK8VJ_m}*j`@UTyRbD}oM*t`;5J3{BIMhP1wZ}7Pa3_U1ieKfp>rJM zPT`hxg17t=$c2=Z3%SFA5nIc{h}Sl}37Inv1%hEYSD}Xb57oKZ=(z^l^NMc>EO3@% zPsc5`+7m>4htt#O6s;vFb|@BuDG1a6U_7u3rtrY@meRq2v-}rN7Y(?=q*3@F1g5m7 z!Nks+<^zt`o7Af(%^qKTt5`0v5aE|!)~^+K4{JZ9Y~Q* z0502`@1L-ai&+d@@i` zH=wvQu!=3wQ2=)BcmX7JzyZ4sVu0o2?w`4x=a+>CB+_vQU+2&pf5#0^pixX++1(c{ zDu6sD@w3D=s}Vn2BOc~y>X?|!{o6y|XS3@TIDCkH(?*VyDz|GOiaf&oB9`(J8H zH@1Oxb5fKDZrvO1F7^gAY$gu9nh7izq`G!nHZa4vJ$J5sIX_p!g1hxEu_Ao{y9GTAE8SE z$UV0_=_)l+8MMG{>%XUBA(+-&~c(3JH#y7<%%f}4~I@8E>VhwMRR)NCK z;0-k*x2ou$hNS4b+#BO7=UEV?L;%%7V1$Lhdi;^%;4dl+8B1nHtt_M~n3bw)#@ZlR zF=Fl9yaNl#@SYVy%m6WRj-)EtE{qnTTe^IH`Em4_oK^~V*;(bxXRjW18Dl;+H$K6L zU=Hu@f=wqeHdcvxu`*>DlJ%sK7g{`=CFD5N9d6>5%*7V0@6TUz>M{DD?`M1Ox8uh4 z*e5ip0RqndFa~fte^yOg7w+>=6)nfl>?BNFY5XXfkyU%FBs>t+o79wJ6jpDBzIl$` zTfOufQU`bkK<@JcuL>@aQTE#IuIB&(S6Q5qQ!<DVC{ii ze9tt5LXNwS8O|EiUJrK#P(_K;<_XwA@o@)$!?llnT2ZNZp}Vg~6k^nC7uzm1exMO| z8T-@4LjyHynF1JGzh2W!tfEVmt?HSiqsPIh0vIS#!N##N&2<9I&tT^|kHS*J#(3MA zJ%S(JwcCL~pa@V2&0B__4e+9W6L^&Qpf&G*kG)O|k!rH5Rk6_(s}3B}2~ot!`T*&^ ze7FDQg4%CiDt7txAB#86strXnlIZPqiH+T+LA=v!m{UXQ_=4XA9k{NSOD{ zGRO<&P;0658mc=KsN-*jQ6Imxmwryba`8=Qb22v84fR&WLg;CS2-{>x8j{C6_g8{^ zd9p1IBp68EDR1~p(2Y~FwbPT9OuP`$HQr?` z&Zztq5jEx?iAsPD zhL|J9AC9LicPFo4u`d2vSxOlu!(Yz7{3@ojJP5|_!3@&GjG_R8`!Sp&6}q0ZjhSel zIWAU+-*FvkzZiXfv|N+t=z!qQd|?id(LELDAv+aZFXGSzhv#cC@FarRr!z3?;m{={ zN2~bCMqI1v@ss5@A{U@H@*V<*cK`k5ko5WdXoTmD78BMchTDGMVu7Lmxbs9fmS@V>f$L$%nyYg|pTFg^zwkEV%EaSnzvJ?&SG)KAi=m6~ zz*U;QX%qeqr$U2Pk3li~qVxws_R{*q%#X(+*g2{IfGG(Gwcx5tazg&3$}|X*e9s(@ zq^HFxj7Ua;GO_H>@(f&?)gZO~^!ohmx4*0kf4({srKdVywv)gK=nU%H)-UhJ%wI1P zLwsy~(psW$emGWMK;Ciu@#@8%52g6U`+Cw328(j;@1Jf`$c-UnS2|^+5r#VP7N4-} zRtPa)#ZKtiPNN;Q0w8CFMMTyX zOp8Hms%K;$BNvEBf;04L$zV+K_pXIv%YS$=_blv42o|dL&Eg=lb<%R3p&P{9i=D-T zRAn&GVt)Zi1*d<6euoDs zF!l~VoZwk>4U~J7h~e5fKdL_L2RY+z*ndk~BgyhK#U+KmCicAI^9|?w(Iv9v$_FDh zB*O2Fx;@!Y_Mx+_5fFlTY1kc=*8ds}q=&_mU|8(qM8p~Whi}@)THE4DB->C{-(>g5 ztLMqPH-EkBFffj-AXGEBd{BvQ#0EVg`h7hnEMbHb3)zv*ABVu2!D7x#=PfE4C%RkU zq|FeFOF3jqlwx<%5@B9JoEaO);RRsfe*RVFFcfWbRbg}E8Do7!_V?8bjr_PHli1>F z{7CL%=gj14g}+CQRpM2p(;U5=`I1iwjRu?;Aj!(ghrel(6xa^m9CyYHorGo`HX6qj z;j(jSb&bSQax&TkPm#Tg_I%jGd0)LMZ~6(XKEc^o?j0OhB7l<-oZ)E1pVz&?@R5-L z%3@WGlj(~Tg(3`NyGl7<@!t9RVi>+n_zXdOoYBy{m#x!gGl z{F|b0+Q+cNOt!4VqfiBZ;sqs-Yd?rJ#$GrYf4ftrSn)rb;CPq?S?PS)tyT1?bDb`X zxU{>S@L?K%bG7(twr*ZIl8{EC5ph+Q;PJwDkQNT5B`kX;qML4>_e{BrwJOHRhu^0^ zvnfA>j*s6jF0oefepwO$g}h+LT9sdWia=VHC_6aishQ_Nzoxauz%88Naa3v1Wcl&< z$*L813WLoq z!u4Uki*>20CPUT}pbf7s1k;kR;{|U7@*{tI>_}bGG7-Rk$Bc&=U~TXFGg-9u`^u0< zds{aCR~-W^qOlB4lYRyV`+23ZVvR6C-yw4i-pYDOUiYj3eF~M7{*PyRX27?T;nR~l=l15S zmWw#*NbQ#!y??JCnMv6dAk(77fP|{${MV6BdcqRH9}VrqLBg3k&>( z1#HD;-TyK15!qQdYqHXEB0IO>r}*k+M?YuZk-r}|i{jTGO&?qze`78l?0)s#x5V(! zm)d=&{$-M?;OYBPQ{4uM1Q)mQTVgTs6PGf6u9kz}bzH(tzP(HCLMqRe)D*g_)N(*c zFGpJUKf@)MkT`}J0X#yaEO{ZOC+NHPZ~T)PEfZ2}T&^%nbwYI;Ua^x$N_`GBUX>wz zbz*b(y5-_-_Fck#GQfjHHVih+KbP}O*RVuMBV4gCA5NnUqy$i>nAOq&dcqL0MhvH~Tk>${(;NAJgpR_4 zco=%8vjw!Yq{}`#Mz9hcnG zOS`6|o1C#cNOa^qzNO0+7%)o4ZO_eq{Xi?pnC>D?bAx#Q2|g+#6^SF+hvi4nc9C*p&^atuU*<(R+q0Txg%1BngL1ik7%|Klqs`YszfH%tN51=R2#oC7cgBH+^4dZG#u58v z0U+!>LRgbrC*iQuJ^unGh3&6&ss)F+f*Ydtcw+9#FsLXp7 z;#d82Dyc=^nEVyJTRrFO`Y1yJdk~WdYuUVrRr-9106 zWt_0as9@#)cj3-|BILmldMEUC-oTiUj}OXEJ1E%P$cGQ+v%}^sw+_M(J71l-KU z=<)eG)Tqjx5*-{qRW+2R1kGt%-`S=+aB+SWDj6uZu?$=N7`T6Rk3<%MB^tGO> zUDqkUq!~1sf-la5I>cSG^-%nNB{4HkUUe8J=1symuT>Lk_@%KzWbt;c4V)JG5CzG{K-Qi-JtzH}}rJRHtq( zYI{#weUH<={qm0xHB+5!c}OkAQ#QS&J0u4`S9b_C6YvhT({mKwTW))2Z~r5-69aLl zlnpW=?vi0zP`6+bhe@a7|BE3oUa@Cr_$Gdd$*YL7V0o31$$^nQzIE!&>^M>h^t&SY zj?Xz>4MXHDMfkYg4KL4;n0Ku)V+~l8jhvrVv0QH$#$G+eoi&iu<_#)&?9`tSX|X#4kb zPJpum%TV$Deoxt( z`BVq|Ugj_S(kcUcxl5X-e?%9;@>U{M_o;M}?j`>E{dD%!zrXk~X_m2kbN&B3gai3w zCmU5uq(UV&LnM#w4#TM6Jy&>e@r!dB@^EeWgi6vPb43XMn_4SR(ZTbub`(S_KPJ|OP?x=7?t5X^_CYCj~EjFxhL-WkI)GY zQWxLrBRZWv0z{)xvtf3Q#E$&LFf{&gS&~o znq4~H2iJP#9-NDmVd=aM_ke}Lm!+#%KgH)+Aw(I>>lxtUD6CveC|Lh#Nq$><<;mO8 zI}D%C;Q|w|$WMd@CpBO-Xqel=56-VJc|Z{R&6*~09JZe)t2Y`z%xh>njUSIH=pW{WV**UOQ>My(Aauwl_zA&ruy zB+2<-*`>BA0rmk+!Ve!dK`61BB0n`7zYXMdyId<9=+pNhQiR2JKf( zCdNt!%Q2`|I@L9R`UNXW;_v5=#%rJjJ(^!Dg5W1nittz|@p{ zGi#@z_oH6~?)-{UY#KYM^0eRvT93$7gL~A73=(7psNP=XNavTsojUnn(rWbPeA1l? z|7M65v5Qs>9H z#L-?m#s(3cT4cKc*vL(0u_m#Z1bxhrJX5Qp{c$b6_}}?-#Gd+|IB5B0`FQQsxn17Y z_@pMz1yfdhD1p#3t?jII!oqt!hVFc#j}yO2`md{J&yQy1-Fkv_>xKeSxTbpuD5N$Z z&@_QwgLS6a@5PNRL~aS2JGn$U?C(k<%{@2?D)M78pr&Ksq71bo@)V3Gw%CAtZNR65=^BQd#3qqS|*uX0n9p7XBW zwimT-9#3bKC!Z`k?R@h7OU&zMB)+K!snxVL6QvE-kyVNK(PGAsad;Mtg@O3Lk>n7S zxJWJ6@RF*-BG4}Im8BRi+>uUgQxT+xYhm~my7ozigjlZhODw(~7Ev>94C6pK*}nCH z=knRoGtnNY!<4Ah+H~24>sKU2Kfhk~&-KOHLu~SYI?F_mzU*DDNGkR`f>aL_Wl1!M}N)Np(J}b?R)y6SpgIqa-RHzPUK~ zi6 z&?fH;QkXW1&t){##R zX4;$Bb%k1d8b3*OLOKIEFanX+d=u>PYNwrA%t_3w(!>0YYF^cc$LMLD=jg7;mntnI z(xB09&Z?s5v$**`YLlvYmcE~)I(#mO%_Gu8 z!Mh*tKWn_6Xb>rJSG24;#81Gd8DJkb(SfDmh(k%I;x+_SZw_EHn z&0JPsQ5Y$Q!y>4-&w1v{vlqsFc`N#tUMp(v?(E)9X+W-hxw4R4f>k21}YTI=>s9BF;ozSfwKfq_s|2 zh+-&7G37Q0KY=e&NU8YVO#sFw>aB~b9xmTnHf;JO!&sK?V|X*m$Ecr$x*%Wo1=lo$lJ$%GIq%KXtK#u`y$nV4?-)vi6dSdQ z4g=5&mBQ>vt14}*ra)*J8Fb0UkgO-B|4zyhW(*W3o~Nfewj+NHYgv&9?Hp+r?w6UP zRPm&L#C8?!*4pQ{E%#aMC%x<0r2g5NY}P;P_ubQnUB7W@3r=1pKMU(kDn6TdVQr^RL4#oMCdWY-ukNHXWv9EZ4d>M#6xcoFy@#FBI)RFbvgK6hwLo2t@C6k%L zKSGBna4lt@4lh-Q5_8$81w@6AKm8w}!8&I1!Il`e=U=sA2rsqxzybjF6D>KdvN36~ zot`kn?`E!VyWd!;{Fa(lUfFJ*7E>!Q6>VDe7Zk{kQw2?Qh3(nU3SN1-wToHWejWsoO-1ucC&kqYZ!H zTX9B^ei}bNszE>XX;XSov}> zPSHI*Iorx2_erC&=VJm7l>>ewYMxE|9Lco3LJEOImMyfi05Xi~FhF!4@6T$eL0%w8 zjsMR#g}^neB+($z%gL*%62rV)zEWdqO07NbPJV2yfYiZ-!LI~Dg&r@cUyWJn{}4(o z=2v}2dqkvPVk1z@0uXKCMwal=z`mZUu53t~szkIr^-uAuHV_2}jDNuS% zC5t4zNR7j4WmB8N`=V)lU9Vxh)lfrwEBHn1k0s0dyHSU8&8^Ko=bwLX%&F!gu>%-6 zYX1>BiU?x0mJ@`Kx>|t$csWAE)T`g%b46DVK90924v%5~xp`pJTKl2&usu7|UV+P4 zQQp5Y(xJ>0gOfuiRMgpnW%*gFT}h*fQ`MI6dBv`#U2d?)v&|bu&HFjVai@tSxVHCI>&bNIMij~K@1n=NDaPX^clhYqhuVH(s!41vn$uIr z5I^CabV@BN&VD`#B{$V)3 zjf|||kX&)@%O_`S&4nHuG-H7k?(ZFODSpsM*#|zOaNYkrxZ_Y~eBB}%$ow2WGrkn^ zBh%&d|Ab;7f|A`I1gU=_v73<&md2`Y?O|L_lb8zH*cKCV@4g=RYNG@Ph zu(}G{#cWYUi=sd-S#jtP`R{(qqt9`QTKz*lG)WaDqbr~<+S9KbFaI9y>>fS( zyDHP#z1dW_So_!a0!GOWs{MR}jj0(_Y%jfFeC-+uMq+NOziKk^XrRb1CB+0jk_cMuDPA13vQknCEF)kkT=m!oRk<2Gy?;oLSz8*eTDM( zcl~0^_DPg*>cD2iZk%nQz+QRF_7={_m$eu z9i_U68;3T}K~DyUKGxZiNC2-T+4c*A+J6i~<`X8;i>mJLaTH00?kjC_R^n6+qKNo9 zIt)j9VSB7#yO|gu&tcsRTUuTy&^n_;%fZmyxfZ`T>bqzNkOP|d(0K@j-}Ab}trrV$I-=+YL@<+D?QKUQ9C zw=vb~!~GXSCm;yH;~qhEYHiJ8c&oLn3K3l;Zeu+P$1h{O?-L(rnEpS(DR{8ZuTSCh zCACI^ryls!6!?f41=rjb$o?;XfBzm|URh@6@3c&K`B^!kMePq2*xAUn#=4A%w7c%a zXtt`UnbL>ju#=k%2`)O@7WimSmd3(RqYs69|JnTk+HBP{c9~8{zO?yw#Gq3ft>7@7 zqm*Us$-_q;p0)&~EYq2WML&#>9vqgxL`A(KmxYbeG)*hr_1iej1EJ? z>_EEEbWr`8!3szM3>jx4nngq?oIqfNISR&ANx{GeH2?yv)FvfBq3gd=<5GdQaQtu{ z2yRfHdHV6!tGnmuS7ielvBT%~?WbKKJA!-Yi@((mU;CVz0RX$JwuDNLs%Oo+>K1hb z{|0+d2I?e8M$d&m4g{VLwq>0C8o3L`kXSxmQBA>jd$(%Gwtl*& zJpTyo0oXw{ddH4d7#aQEIAb#aQJs&n$tVD4)ruVFnivXg8d?;z983Qpq(!>;1 ztzUZ(Y48Ul-e>57VaP~00Ae@=;6%VRDx3t)ikaRaz?^0ZekaMJu$zxLMgeMen=VV6 zJa^{9#+Ai7r6&QgW^3AT^ZWRtPiKsrwj*=@aHH8*o{G@&KL5TSx6R#3py@V4Z|@~x zzfz0NxB!R~gt(YRE1afO%Ww$Pp1vfcFc}em0@BjqdD5u7J%9qvk8LtN6oQGEDg9Wb=jdy9;k37tZ1+I>dY^)m z+yHu4y6`K}xBTTjEu7T_^e!4bK|lC0gr*`VK#Po>5YEb#rtD7J`!+3H0IvIQmJ18+ zUKdiGUU|Cqw$EPnO|LN#S0}5>LkF+bJIzAX&1qH-grqKWoy~#r9Qu9DzZy#C` z(XAL%;e_Y$|L`{{QD?AYh{xx90+ck_+>5RE*Y;}xGF61(dGo$*^PQGK0UB3YX>abo z4z9KmjkVoc3?BZaKXPf)sJ%hIlXbyuJA?4Sv}loadX^3|euI6MN_@z-)JPQwEA|>6 z5&>q#UO#<9sftCz5S?09B>)s_Vd#O7NaM1n8E#%FoIohB#sY(m6Oi9~eIDNpaAQ#x zj^Eie4@b*1gcj0FU(K-Tyf>9tVskCXscc94A6}vF956RC2w8inGo<1`-T`^IX{J&9 zO=(I|56hc@N1?zUD0V=eE;5+bRs;Oaya;10PsN3A_&p0q28DGfLBwJhF_7GtDTG6b zzMFpjM}R&Uul-&sThqUooRs-g6#y_sIfa?z z2!49aEtV%{fxF_5(`*^;f*eqI@KGXbtButl9e`nL+f z8XSdz%d9U>1S5f-2073NV?`#J?i~j-Pwf2k%*NGa!iZ8YfAs3M^gd+w$HD~oMhn-A zAu+b6bJYPqf;9>+=>V)Ib$i7W$Q0eOTN#IjlZlYD+a2Y_9(MMec+UJ?SH z)b0ykNT#P}Ixs-8fX07IfB)9O^iC|;BiSOae9mjB`Ne7c9X8vZ+(P;n4DHMo7j8kYUbp(u^#v}p1{*WUshznisA`WK2f(rxY0dP`*2(yamn3dd|i8=+G9U z=0508Etz|RU*(FcbI%?&BCm|u#Ysq5euURsdpoA~_J36U#w;mr5 zX_cbD^rf}8wde^{02b@e+oYpK?lc$-E1Z>9BlNTKLqRDP83?s@K!~#eplJ9Auq`b< z67rQ|$SkEqxHI}3pYqK+P`@j_&G0S`sW?!wR29+?&n&oM~JRg@%SO zK{2L`tc^m=+4C=GdLJeB*grX*tx19&s6V1qv|zPhLlp9Cj{UW4xkHhwunNX z@n^Mn2mg-9JUeinZc3}v$fp#FP=oL#;jsxggCTXzxb?$5{|FHTgV8J_ZC?cpOoI2E z9LrSk`NFt0TnEkVQ>`M#arnBTv2e%01TrYxt2WLfVeV}0nNS8Aca9zf&&yHt*{s10 z+Gm(J=*IXbujY?yg`~E}(Lz7FYYloxNElGfcZ;MCd2@yV0HA-b{fxsX=n6<;@NUHf z`lQ7otjh8k5o)t5Z^a;?PD88uw|SuK27mENx9#yx3quuDp)7xOzW= zzWJUEpwtJs;z8W5sgVL5(QjMx+Hl=qJYdHliAU9E4-N7Xt%y+IU^?vsO#xG+wYRNf zp*o&%lw|eh10gt@a1NEwICmLuX{O3F{|j2!t`uFv3@ejXTfZ;w`qt9Bub4qH75(Yo zmJ3}twL&lh3qQ8Yr)Psd`zHG?pKLyqPvpyB0mR#X z7tsq*B1eo7pFB>zGO>gliIWH1D>7Ua4o%zNQHGqfj5tj@yn3Cc*Yq4ML(+^+9rBfD zl_qO{wry`_CStnraA}NScJ^@5)-co4Q6$80?hU$qe-T@5(GPvIYGj1wGxSl9A(hlH z^P*2Pg{Oz!6g=~Z$#_v$&|Mo0Z8SqQj?KMjqX=-P+}WpXAg#HO)b0@_wb(%OKO=b%yA}8~@{aO#qIW zErNde?N)lT_ZJuYYtOIwz1uYDe@^+mm(aB9SgG=L#q0Us?fdSxj3^DUTU`B6XVw25+R zaHrEPOz(2S`k^EBK9~2;$I+K$aga_i%O_3R$?l=?3=X3ehhO&df8%F|Ra*9cG0^kw zvUq+uU3+)KR)E~}@&6QLYlYH?ivOg+-t*;jAg?`apy}fQ$^I4NyYcH(M|4=lbMznW zV8nnum-6i`CCLT})z>`p8#o3TG+Jtt!V(+Te&6pQsLs*-qURMzfchB;3w3>o`xiFq zgwUwcG8O_nnm}XW`QXX%VyY^S{%Ge_^o{=n0FX?}i>rHPKIxtPO~@)X zDvM%~iLUwl=>ygliUmZp607a=OD|*O9C|G77BOvwtrUlYX-#e)Y%gF=9Wgliy&oCF zu+U2i4Fe8^C|C(eL6HGn?6hh)5C50{gZ#XKMjj0M)y8aR(%J2z#U+K$%EJVBZN^yB zt_X%beh~Lu7dGQ$= zkuu0^&uT+V6@n z71*Mid8Wo=h-nkH6v-F!m5Q7-zAIJRSELSaB?*bBbiZVdoiO;|_LlA{q1RDU_0QF_ zIx-DI#uz!v;GbGbR_t7?WHFR1LL6NAzqN<+q*UY#X%hYwG%5fT?RE=}X{x?2EuWdV z9g4?YSex#P#P?#;T*{M*UAW|o@m^#ZU>sMK^MAD1U zkBtu*R8-kOGDS~=$lAV3pjmw?#;QHKWIb5N!=gF(>A6J(;Y6tLh1>XZ*%KkA^w&wOrn6vWGCl7sWr1E8ve7 zRLriQHfJ~$$m5{ElW6dHUWmRg&^(RzUVX6D27BhivJ&rV>eKY-;Vb_^qL~X@m`ysF z$+1CjZDhECF4**;jy>{ajbUd-O$_rc8)tz;!rE}AOa1ek+Q4o~E&GyLZ&tH5qdi8y zmy~yx4O#iY@tvR`s%S;I{92JgPl*AKL>xpU{0UVbRtWC2?c7(#5;HVf?m^G`aK9K! zmKzrKI1yn0>V`}x@ulJxVv*zW%|SN+G1u`8l$) zMQ@fqG-I{T+sEI#C@tES0aNHfm~e#X647~1S6ijoUvtt^v{xJx51uEBUKtoy*LHuI z3=RkwHdF|bJ#770_-EO7Joc{b_9F3nL$2o*T5x)V;yApea4WLu7L9(m@;&ol`Lfbb zfPv{8)i9P8n4Yk4Qn&}B=i!-dW~01ROXi*WG1;wySc$;AHMn|!`5H11`U z4R5osQ#V@n&q-)q6-wkWTN>q5wQ>i}Lf>tAdE;_Ddi%3G=eLS?VfudR!{TujeO?D* z{9%<)2gC>}HPdoR4`G8c5s-_rHQhz%-gB#wU$%o*Fq!kt3l0AR-uGJvUp%TS5Tz6K zqbmL{004u$s@EOFn< z^reud@+rUZXIB@i2p>yz6$yXJ`4*|mpgbxd9?pdGj}SW)0wWu9{31OdVTtQ(UmzZR z+y9Km$+2!JVvoNxdRwKOsYlK#@I!&9pELUI-*80+0$z&D(ZC;$mvX}OFlb9JCXF;w z3EHu*lT4!QqXZzj^W_v~O3X*E=yjhy#-sNM9wRGsR(32(?<(^xf%~BedUk1U^x?Dmuil`)ssX^G*__V+-PTQ3U#Bih zR$3_GqQ3(w|Kf=Xxi?KHemFeQmBEROMOs_^A0Z_G!u&+zppDv2I)Crzl|382TCH;R z9!@<4`GH?pgh+^<+Z3(`mA*`8UAT!SOLla$#g~g=1OWcLz!Jkjt1fU!UFC|9u@6a( z{$(Og{nM%bFWI&!csy(LN0RD5sH$^MwYs~g=z9V9B~v$|7# z*~othiv5Z}h3Mwq=KQoUbe;rIWrwGgJ?& zFW)IWydyDA`PAfNE~Vwc%)fpHm?z)hlkA98mi;4y1RxksbR4}oo#c8Vo$WVNqdJP8 z9Xr|Q^Wt#|r>1RpAvBjHK)n2 z9)y})=vkv~Nr$=St?jFyyZcoZL-t5UzUa*H{8$PFnLpn=$~X z7BxnO;zroOiE|~VuyWF9+0C(9I#Rn(V(fVx2A(U%rSV2(c8B|y0_d&V`mVV@zLism z{-!UVHR!{jwQnD}&5`XJZu2#a^QrnsJ?K)@01B?lyPBBUjP|VnShAIg63#URbO^Fd z#F>JlHKph-T$VbR_FB@umTS>yTi+zc8s@s5!2mJJ}4aroJivQ>ngl%SV~XdhJ2 zGl&uqBTG$_5g_3CWNT=OD3vP-49So{Q27u(5R!X?0w*($OlMLX=x#;EIIukk>p%Rz z>4OUS-bGrnh?!BZDtG&Ro8CNT#)m{yAjY>JjrCD9is9+`83l%qqXLAh!t*L=cCx5D zArvtqWAJEoHpBWT-{x@igh9ZS{~_5sjz=%t$ZR9^_CL__ZK6m=bcb@>JzUz+=wr0b zeQ^Mm+z;o*DV3@C?LQ!2rJgI!Xro5$pm;|!CO%W=H=|VqG;uF&Y%_aJr@Ld)ES!%CVP87rNm!&}wYYT9zqOf~N%yKVd?ymc&uk*+Kfxna z87SXsebY^wI2g+kFBVLCtZl*c$<93LEq!wr_6C78UI=t=LD6Ua`kDQ4XFr1Bzn|)z z9Gvf-TR{`=ux8Y0IZ)=4Ar}2PXkyuXkW!p??89^Sqo`ujxPnyoP>q|wCgex^J+whA zW2<$S1+Ge$Xy)rqV8i9qK7)x-MMpljcTi;pSy(n8Ey1eY_&l(|sHT4iC1Xg7c;^o9 z)3_S2JJWl`YsIa5G&ud%4g15*l6R!M|koO1TPuPv#^2S|X#}(_*bHsRqU+#AtH|1FZ5&78j>Q-$8 z(kfh&RqiJeC2fI6!j|N(xAKeDhUaA2>S%0Y>u)SXWONhzuFJRR^TEpf8kcgjn4b$n zC$?*kSHG0dGceF7KE^qFWA_GR(YSCT#00>&s$D(G0_+7@ZUfX+lnD{xR?j_E)Q3o| zvd!N)+J3WA)gFR=R<)kjETbuA;B$sSIjj+Q`s8wjf~DY8wFEecjw@hZ_%apDgDK9? zh*UM|_2h^t9A=Aam>G{e;q@|)7n)!Ts}DN01EHvy0Z0bNC~rY2?Wc4l2#Zfb^63_f zgHq+gaQg8H22s^keG8(j^rLhw#Q0>@>eqDB{j2Fmree;#K4j94{}3w2fE{^fkL>`2 zUa7N1brmRQBZrzAr>u#(UrZ*023iF4pW8CF2m36yR~&>ieKl3(7n%F;aN-$uH1sb9 zcgp~v4&yGZ@?I8)-Psd*mdgNRzBB69k*h+}YVAO!1Pi?S>rh6D@3H7*FX6Zg4RfS= zVNa@bWKBsBO;+;Px&t3TbQpJA0Af%WGFB|7u-9WQB0bC(bPVTlbhpo5;)oGh588C5 zsWXSYQ7cI8P{Xgs-7|OfvHG#r;%b}XkiRF{`zhPqQD<*&@95~7fKTdbA6%GClZeaQ z2X~Kr)f;MU&)M6ZxD$!)O5qKfYBoE)s91JU|DazMW4^bOfj6ajgWE9wwc`dzpYywa z&@EVW6{Cfnpm;_^Vn9$g4iP%@{#0%yYYx{2yK4x64S8ciVyH-J0sH(J#}vWYENcUp zCK6IW(b#8*Hlk$@i%{_T^Fi+<>v6zM(Pf%3w};XtU4|0N^4dfa0vG07BDj z#FT>#7r@{^G994+({BJ8r^1Uho{5VATP$HvJ;HLqyQWiuPGq9~A_+Iml|fam zY!su?;ifHgd z`Xyi#s8@z?yNYG2bwAEz{x8vdM&vb|)h^k5O?z?87YijI9TCh!<-(I^j-`k$HwTl` zfM=dBRQN(U>JQKSQaUmdZe0j6CO%zsRXxf#7K%(#Z@ACTi@nkT$Q=XS_%NE>`jJFb z8yq~-nV*PJu@;Q{qNXiQfTNxE*@qwfu%~3qV1>0;d?IdYg2`CzHhz_<0w6KDl`W|N zL?vOj2YbgBIl0L)JlQf8Uc&UsXk+YApD&$yl4HZaHAEI0o=-n}_=v__uPi{zbJHS$ zsa^lrQmtM)Z~y#5-1CQD8|IroO6`AH9C?_5Dgj~d7+AipYgLYoWG=4KQA`yM)R_4# zsVO!1_&4t?0DxEWRH$%rYTag-0&24Vcn$tb1#?tHM3b9FeN0aX(Qmpmb#9SZM*pTltJEzZx%VZ9i*Au&^vsH7W+9CHRhiWk z={V(*2jbR_+H#^=94~>w(9Sw6RN%+!xG(Xc-`yW@en~8}>v|mZ%Q^F51wuVBLp~Ee zf!H#C&(d9~wx7iJ35x~rv)_ycGh*8!8XFGT+^b0e_!TK!(V1h`S=ce&<*IT&66FyG zz~xzuCuDd3TW{~eURiT~@3g^6(0&;H!>@X-Q*$(|lv?w`7G_Wx986;P;BEOD$OEqa*#~GE}~QZe?{( zpESAE?9b61(WKUsr?o3-c~K*;xsho*x&zIc@AkZC{;eS{48)Od{JK@j5zQLU=(MSU zn5!2&*&8V&BXMqyi4!PRp(yl`+h&!jsrp_OT=e$0NaLK=)7x7dNqwk;+Xu!z>sr*I zIS7%b4w?EDO+?hIzlV^4(yU&r7M2pPf=f){odYeC|A6aX$VYD0}@O*;hoUxuJ))O6|E|7f#s@ zTT=isTM=j(hSU|D4#hsyX{K?tmlol8^?dtW=oQ_u=O#b)xMOSclVZG$%xM$zHE{ZKhKt z9X)$%0nL{gnu%8;C;&vz-??UC+l@vS>lF@<69@F&75v~l$(La6VfbIXKdZLgn`Tap z#$Bnt%0(}kTEj={yZkr_VO))^sbgGcujzP2H|yf*{+Y_~a%t}6^iS&6P+HGOS7AX~ zRE)foT|uX&!Pds)?aRWm=B!%so@z(LLO*RJEf$;yV4reCbSRzNKifR(nCKYWdBe-GaAN=qP*{e zz1pcgac7Kw>n@t{*ZI+;wu8>kU)a;kNMPaWYjYjypYD>P0RZ;<|Gk_JUc8Lkp4KSh z70!%x#M3Bc-}ha!faqeHSJ=leGt%(b|3dK-M3!LPYGLXLtI+?>uY*G4tp{Dk94r-R zG+sHWSlxE{cs;m2skxOsjImrCd@DcEDcz_ev1*3BK>~N$On#>}Q_nOFeE!4G+@y25 zP48i8tx$&NO466DaQ8ZxZzP{VboX!W)5ms^;+kdFFAEoPs3+NN4610z(PpO0{+zCF z0!rcquT1q_P87O+V2k$%fjbx~B6)S5t}|K}Cv)34bJ~i6dhl`W`urM4LhO)tWl2uxX(bSLAKx zcP0h%#D@VrWSWh{l}dtpKz|skKjVb?pcXOmTe-WSrj@bRa@FU1mCqH8zZ5FmzcTDP zk5Q%m9R}k3PxvJRgJX%#V)5I$dZV)O1Dw>96>Tt}VY`i1!>GJp-0>vI0^QR*Cr+M} z)wE+EVqVH{n?*g0KKk@(hf%HTI+K(4dp<#VP$={tLLRZ;ntLh{-_*JdiZ0!}-%Aqs zz2e0+XA*AmN(F6M9jANW6ac0ho5ybX zjTer?L#2fY?n< z8WZGow-Hq=^cz5V(D#x)kAKme$)_^27IUvM;xFIwvC#aB+QtnBi#na)!#*ozD)@Nb zi32O+=Gk|04_zCU)wj{ftkL`>mmf852af>|(fmqW3T^ljnJXW{A^xz4kRehm2pwMZ z#Vk&l#7!bL=&4G&zscFdzp;F;jR&5_Ix2Um$zXUsuu+EK95liR2+2%GF(zF&TSgp@ zVH)U!1|UTvG-zmQxw<QtX`h+imF`h9Q%{C`ynBo-6jtFA%FPvk&tUvk?mmwj{&fA!}_7w(~d#VL6L zZn*L|5k8cMzRwf0UurZ45?<(*%H0|aRfl!y$^?)Oo-afP_qCB=mM%XA`rC!e{Rrpp z!M&2E7G>sJu?681V*mtU_*Z)Yg`){*LTEfA_H1Z?GRZJ> zSvD(*BwT}#S{+|9U4M!?C*CPrs+?vtvOY}JjLkp1T$Th{js$5k1F`1eq|r0k^mt(& zY?mH;lO)PWzaXZs*6$xG!E-z+Jm!EDKmJ`5Q}2u9_K%V3NhenrU^F>OSl1~g1?#%l-qWfQStzQ81@wZ zkU@jMFtf_1*Z$`5d?`Xqk-B8QZa2nXFA2prUFcxb2kU{GD_$_ zP5%E){awwUz}*$qo0<<+b^p#y_O4?` zj~c+tMO*UeAP_Jz0+NCh%{aVu0;rtT@I28+LOdNEDjyyQWQv9;!WE1J!8pg2+l+0Q zw&iF0$%xUpOgMyW#Q+$+(PMY_0wW&??BKs=99lk6~OKB~qdf7C<6y3Qw>c}$bG*>)>zeD+L zMRdOTIlGUMc%9V`%132S8{b=h?!r!BZ(p>o-D;?XR?lM3AhVQFY2iaJ?^5b+J>nP1 zWd5`@{izF!ttbGvVt>!~fOmDAkMQ1NXrflUxt+^>M_s!Z6HymeX-vAwhm(C94)@>< zH!43g($b?%>f>)GYH_~whY* zO$MJC`j$2Cci&|&BtWNGA_ka~4s6tE+NtGAfrQy_< zuSqy^b&m_cQ;}@017)2EQNfjLi$*lxrGZvkW-7*-5^DD{XB~|6zHR^Ur9+bp4T|`X zRlk(t#7|6qo(JE>H87%MN4FzT?A%sBfo(r#v6p+j_a_%_9uJPV-wh84F4#1oh>o70 zT|k7os;<3rVcZ$LxcQX^8rS|0_s*|8>2N7_R+n_zI4499@wI6|V-rwk8UI=DGWdyH zv})P!h=<|`tIp1k-Jt%;6_eQ4K(@6i@!fTD=p=!LX?QAxz5*tlOmRw)UKR|t{CXBE zR>c!v1fRSv%B_~kuLQRe$m(@&^Q?n41J+3l9}D#1_sRo&W1fp+>mCx?P|Rqe4wa;j z5z^jAm)5$Sa7a{gwC~;}>B-ZpCt}vp`QKJHKXe-y?d1=Oy4=huiVe}OdAr%-ea@3l z?P^9@Go7pc)1kHH$B?lJPioZ4A3f}o3U*MHO!&JdQzPwCNPus*(^-l+%aW z;osiYeI`KI;+m-&&K)50vsgOoXc7cs+pRzut|>b!IIYOU#U-f*LUZ3jZ8F}lXjWZJ zY@t4RU^j#Ryoe#KUY<;+8G4qjtn_!Gc#qQLHGi_fpH6#bmRe(Zp*>*x? z7-x>nJc;gCcbv*o^xiu{iRLPRzVWkbYTIlEhX?`TUchi?#wnBf8t6rD0mqW}57ptC zzA0f%qhTqtv0WDG-|-FnaLv>m-E^jR{wLHq*+-o3^d4~>Q`xhTdlBFb&-dq4gEo7b z7|>_q?bo3<$;y*AC;*b`@7@G3zbjKk6Wc|=C=g(lkg;wHEpt})AMFw|_r1WgOPne2 zg2dT7P5v6t$RqO6tGAUc^XS_mp zBCOwOq>9UlJI%-Y0CB&6V|@z*Y_*=M>r;`R1zTwC)}&{&i83!Zx1)1vO&OeDl`I}U zn7g@_E?Y=}j+XEMT*jFlh(k5&O1MydhuHTM10APGxn%-MtY+Z$yHdXPkCN+CNV7P@KGuc7L+rtg1Ws^m6>*rUIv$k|B7)Hs=?i#dp&xQIXV zJeRI}fS(o7l;LgRi$|ddAh=65oj}xq-_RIM>0du((2)s|N?MN{iT@U)ItEHuU9N5E zS=a>aN*uQBd|sQTVZUXB)UUjej5kJ!5kEgM!H(W9o*kEFVUnJUD8JWywJ7#EU#}bJ zBT!=s*MDMUSyx!y!@=@7hdjA(-Iz`)rL59oZ)!)rjQyqSgy#WH8~W1zytZO0Hu2Ew zzeIaxBKe%}{KWIg43!5Oq6S?!rg^UlxHtd#e2QTHsXgW5S5F3K7gVYK9IIXGq1eIE z0BhZ16Je zJ9bt5crNd)|L;TBvqRb!43Z1C8aHk-kzq^B+^j1+|8l7k8YFx5w7S5~`6;C|Mk)NgTK+mCx1oS3(~B8rdQI}?Ph#_d~ObeGA^MD zs`Ze*NDwD6mj|wHaT}74owEgqIL2>&hf#*{zXvCV2P*i-Pz(8PAS^$7EM&&xI}m+c zo1Kq8Jb2-^GrpzqG(?fQ1^Oc*Bc4IsV8U8I=DSzSw~aoqZ~a{wRYglZcrjtONXD|$_4yz-E<8BA_SNR#BB$-mJJhx}*ao`vErdiX|L(wbCU!STIO zY(8I}FXmFj9^b z-nDBElBr$KyuaZ8^37q#GiU$DCJjAgs>lH3RGu?5e9tE8kpRDrQ_1UrLGWhB>04Y; z_v(ewA|PAst+*^dM!~Opo+!M0Rv<_Idt8Y9x#&t9+eGi}O^I*ygzNu$E0fZl}x@r$oz{l;hs`&FX9tKpsz*tPj zNVqa!M){fXP{VJF;+b z%B9^Nu3dV|ztNHuZA~)JckI9_wWs7`fAK^Dgz@cFNtlkAZ#f8Z;A-xeJ}lc_2B+`E z!8FUwjxvg2kl@t`?jv~rHBM>KgjY3BjeK=;&Sc!rIb|VXiTIm03%AqFZN z-|l({GBxz!W2Vf_3zw;;p$R1-u^DNw!EUbSFaUyYC0bIV#AT|9794}3(F3+0i6DJb zro@de3cYQ5yD24D>(ddGyf1G@%F0Wjeh-KIB8He^1=g^G=$9?AZwgC4&(+vlgbdTd922Sw(`hpZ3 z2ijmdy@%+<0WjEHqVtT_mdgeT$7`gKpz8yf6Q=Vnf^DFQkUE4I2^CBgN&RcxIuFC` z(FnZ)tuu_EHbDP{5XFo0Qp9fjR74CH?2gqW1pId76m)(`Qd_lwNpFi5Hy@L91ahC(6ypbJNY4G=hU^+ z?|Nh==p#2sT^rZy^A5XHfd<$?#(i=Hi-|^X#X)A$4Dw-Bt8gp1xTGXy14b%|AS+Vt zN>DThSKf)KmABQwGK}$Vz6na28xk>0eC+|E65M7Q0nPd06~~St#;2fgTbL!P5VICx@^<(T-1g@bG z;OEF-;u?SgMfNwYP@7kdHZ2}3=AvvjqOnidjI=NczS^D)`aU%M*2$>nZ+h&0I5cRl zly)7x^5stjYd!PDGJ48lf99}A+3JQS<{VWv9&mthkCvTS@fk6API zG5rn(9u0M8b9Hd*o!$}BG%I|7%0MBG25M&2ozG6Bcn3}k-tMYLi_+EDk^Q3hmxky8 za1Q&FOAx8C0UH5BaJ}-(4jw!WpT8;K&fM4-2WE7E1T4 zuHhp(0E^ai5!okPW`bGm-Wlm$Z`M)YEad8g_R)1rR?$1UQ10yQ@Tpt`u#)()r5&}a zb)XJJ$*}oVm&(vm$_OF@nP+UWd!~koX4@0dp(`r5Y~l)7CpRO(JBz{DJz-XT+0V=g z4?qElA@smw&8B;fFX_A<-+$eupZ{d6k}vf1J9b|inwa(@zxCGTPwn@?iOff9o))~6 zYO$xhseS{f(+qe4)q4mnkU+M6w>^NL0wuKk6bCw#Aw*gvKCQ zLXQojWe>Hh`@7f6>pWU?RNvn#Huj7mWC%dYgk`hfKit7sMKU#?171Q^LzG|v!TEDHrA2&^wikD+B(HZrH$qfzc|nU(L2s$kzJ%$93nEY#DDjJ zHMHGhV0es1MDWv}kkz=L&NORbhlbmxzYlKz(=W5*j!$;~#8ec;<`L9H#Id5OD@YRC zpp)68Xuu-?57!^pH{QibvvvO|7sbn=fMMxt-7PW=6mf?uBRzc1_V#XRrRYqJ(#_>e7LPvdlSODIfe*URr6@ z^U|Qs=&s5glKk1lKbjg^MNKKtMieUFcCSN`Q98KNl8jHi|j``xg3bYcbJA9I8YV$xtS<*1m&F|A_;wA_03{TIN zHqYs#Q)*1e68mlm;O`|8OJMMKAY=MbHUQxBRi>dWjFBVz!qh@&$5RXoHjMqm9MxX1 zh1`8Pgr5_C{>m(yRBrQg`$N^VniqYC4EOk^8f!D<7EA3jU{9ao=&!$DJOF5X;CbDh zwu#=dgZm830|nz2V2QN8gH^nHC*Mnj^V^zt^1eSmg{F-ZYJIMrHMicjEU4NXqNsiB z9`nuxJBtVzZzD8Xn)4%foH|or_SV+>re9Kl%eJ=>028@ZOG^slNBvJM3U&St76(Gv z1?cWh@C(=_l=nTjRduFny5ps%af!Mg5s+L)3Nj>Q(&@qzWo-=S2PH-~VsU*a;_d z&pCG}VQr4HSd+1i(}?%6Q>xyN5tL5EO+K*g_TO3$aW%7Eed70iJXzz8FJYiQ+V57$J=hoNoYsTLKIj!MvMcc zT}YP|xttA4I9!XJnKiYHCznuF(RU`pz#bz%5rwA*-U>>0%ZJZ1of4mQ;r56HkOOgA zv~=(#6+v79+s5~&yWAaP0{|h|dgeQGV~<|E1kwC^=Thefe?nvA4iU((>Ex`ImcXFk zp#Mm|7C*KRQ`E3pw^Zd&^9svgKx8nMSN7w6CRT|OFjL-g0<|Zt@~QfG7FY_a^u|=K z_Bi#d*3Oc&n%a1Xeh{oGJijF2=VKWbe_Kqa66(@c-y4TN_SUjWIT1=1-=sY>evf9T z`FO9|LW&ItTW&pMB~~w3@ay=Gqt1>)+2Xw~AhzG}PDXE$2ZC)Lzu0;9o2<);nM%;s z@l1H(zl`Ie8RYoe;yHjc@`+#IsxDkwqJ(YK^y(8M_ES@6mVG9`Bw}GCmhvykg<-&b zEK{=q^5)uG>NGY^lJT*gTGdwEo-#z`%}FJ@xdSV5u+;TsX-bBB4E&Dci(JvF6?KZW z57mzYo5w6Jxs(xBv|g9DH!l7qC0h3CGOFPOjteLQugLyJA~V%!}MZIATPO9&StW1&O@VUaxmiJnaD;S!r;ZyzL1%Z!S2$c>jNG4N2)?9yASnvm9;6^`3d+42LP?dc5N6!d!K;H{X^nX3zupdv}VsV=!Jfge>EPfYZMymj{3g za7L1WJnn{30b0(nTJe0i3A|rwRw}RTnxv>SPEA>_{9YVDLuPVCjX{GQycgdqAO0JCD({R z^>owvv--3D&y~T?i5Sus`*h;xa#BoDq+R$OSi=5jfx>}C9{PSIv%^%F`_ zD*-BurDT%L-f~z$B^(X$>2cp_hy+8jZjS0dVAH6rj~Pa$)!WmA@S^@9)QAD+2-($NXB=h%V{0$dp;s6+s6@jkT%LebR5oO!_i1P-Cb_7v$t=G`qZ-aw(JGB zEY9QA#MfG+E_sv>O=sjyIegkTFyI+6NHv&C$4s}9VHYW^^~}uMMEQIQ^ukaTseH|% z{!s?+B{(myiz-M{3`!kGwS9-(HC0lvA>_i~sQ{C-UNG{jboiWoLg>SVyk{dMci>LU zSasZ$ZlD0kk6)>rQr&q%N;o=+>g~JD22l8)L_Cd@k1#;dwx4fXiyGuZN2butGgOqK zsO-WxnAj1UsqxaEYPgK*&Ztb#dxNKA?^gFKBt25z%P|{*+-T^<`V?cDr>HD7bvs`! zJiBU_)J3DEzOATs=O6o|=vVPG9^N-0o?^TAnve9!w(>sXaLAA+5EVSvq(dSq>XTu1 z#FIeE!?&S(*htJS@m}^R?rCFhaXdPKg_$D$zNIoo0s&ywvr$cV&y3bZP;UVy4H#af;7$QdD|NXhg9x2$x-PQEn6f?~BhKiqIS> zDBL-4NRmw4&gazr<0OY9a1u>|?_xjCa;>hVQLKKuediZ4B$NGt+hDJIhmFE-8Be$I z_s!EoY=I7()S_jE4W=Mp;-k!M;?`>C#1tlQH;$F4FA06hAR9gEQ8epOKs1nYzm(8O85&q9=acP>2a0yPUIS&R3MsLu0*!{E5dS{?F)D3Gxw+OLrnqT?j@QjiV}%Q^imOV z^4mW?dp^)j4fO`0Rp|jwv;e9B+Q;jjDmhMh2Dj9c;MVMc5RJ^>G$!GKFn2 z8uvMqf@CPQv1~o;G3=r>(ys-WN5rqIE&&Wcb-p43m{#&V?t#mcHX=)%Tf{oXUp&d%LjvII-@uX(YKN z=DDp0(y|n1&6FB$$%-+Uip992r~v|$GkQai47M*qiLOQIVTh%REyjOrr2-!PH;Kxk9{OT!pyrWZw6Ub;`2y2j*9Zb^W@9@&B4^#(u`vz{Q=w!Q!k;n3?Q7b8rG6VW|nV zrvWH!BPY<^7APK&4cLPXg#@30yDNlPT(|N)rcfE6pGa;(ApRoAoNK)Hgm9zNTyQSLNe$gie>bH=mo!hRC*wBKR_SRVO_Ks5ks zDv|CW?H;XaEHszN6#Jf-?MRFjs?sx6?tiaIH z{((Yq>=;$1Mf>VubS`3>Nv6y#KNdEdXxY)G*c)a)n)<>lj?dh~ZUfYIVv{0nv1h6{ zo1ihzXID=7wI+0~t{YHeOJf5VOBpEzMKw9mDIY!)MP|75^h0zyy9<_*pElNh9f8OP zdVl{ky7Io(g6oQU&AoRdDuYm4rb5-XQlBXQu%aLPwJWU?4X@0g!$TR5A&wrnXY_x{ z1$wtFnFy3Y>(Z8BA`W5<+&XY0nv)ex4ofK=q-HPIQM&zYb`uD9GBPhni2cY0Pes2T zrs1)Jt)lqU5~V2X&c@zvrFvC0gWOzP&99z($?hLp2~U2)So$M# z!fL6fz<6p9|IZp>id2$G?XS0^7U|XMb`uO*Q7X}K6s={Wb@-m@3n{mQ>?@&#Z}ZP_ zB5$BMGy{GL!B`4~XvX$P4|t3|OrpmYGOza?1*U*7v`&a3iHc!Uj8bWWa`(aELVpH2 zB%eUNQTB4^a!tO?cSh^Xr>M^uSDm0dGtyjXPkuhDErKJBqJ=B#H@U%e6lC&Qc3*OE zue`fUg%d>*UbK6za)PD@Yq^9oAH<$F1y5Hfn0yQ4Gf$d2!BpAB3&Cf{SDKPz=K;~& zd+3{Z*!?I`VU>=ZX}r_8l19L;6fi3htErQ-yPRVFH+wA92~U$>n4#2*p5g~9y32f`1t6DqH5f~Cagf31!Fj~@CF3uz@*B6~Z6QiV8cSshCz(MjGD2xRNw zjbRh*Zb00ez!^NDr>s4iIMobWIl|iTd784=l9xQwkVBy zQ2tE1Bg5!P5}&Z!Cc_>EWUjcmrpZ!XK4gQl-!q~jh(>EiMJGFvs_1&RBUfd~KTKYo z+pT>IR8@Rou{X$)Jux3p%>DzP(K`n|QsOv^m(B)}uz42xtN800PVN+l8X;vuJYo9+ z#&A&L6%~)n6gk542KeOH`7E;-?4j^0Yc}GN0+Fg?=8KSZ^#^Nbf^m1T(jDEu%Ipm0 zuY+zbUmE+u_W3lQ|89)G+lXEH{Wt$M`QI8kheQ67^^<*b>eaUzp??;~L5wV>oWSiA zq{%r&-%tqfU*H8g0rw$2pY^UWrVu86?`-pg|>=XlbM=sbiy^m!i{N3 z43yA0zbK{hys8`Ty)HY^J{9VGI2YIJ!a! zXlC^Tf@E^tc1jgHHQKZCq;RFV*>os{z3563sdhQ3b+R0<)5o*gQ}d zv~nZnaW;*hPV*LeI4h{!h>zI@)#C?a6ZNsNkxU~O$H60o+lC3aks^4V&n5JuU#1p0 zQJOfH^0bvbQt%o7MdSODF@wxPX&gd|2eIL^OoOvH6Fh^Sj|bkh90*$*a_v9gL0Jgv zoHg?G;Fq%dDSW?D?d2G!0Faj_3m_~w#7w4X0E{7oCIq!KX+Q}ge0X>8I25ClCAIOT zV$th{4-3pLoZfrc;`gY!v~GNn(NvV;uG@CnpIPr#WvOS;m8LJPis|Cy8raP?m|DLac+)tic zeR*MhS3tXfEkt8DLPKyv;ZWKlili+WH*k@DwAH0#D*mN$<)}?3G)sAu@Ylv70cH%U zBw>Sel*)51&*7i~58hRWSx4h-IO)=4aaLhtE%nxX-apniN!1Zky33?&@)BN`3etE4 zXwMPM{EnCG%wId*nworuExw(vs_i8}{R@7B3h z);xP-;aB>7q*=`X|CqRz7!!d1Zw(zMMW|2=eEww8ZNaKK`l3>TU@?ly-NQ-Fh|p$# zqF}vcTeYO?nHm>$b_|%2D8FMEh>^>n4$gjZmrB8qnu>-w_b7CWBrfQC=*g_{!jF63 zj9uRjfjzCcMMOf79i${$Oh}v8v#=Y66`sw}qbo7jwJr@;?1Cy7zMu}$qSGt{L}Hs{ zGNt&c`p|mcna^q*Kc>EvSFQ#NJ6Jzfvyol+Ml6^Tv}$1YB)IbCySM%vu<9|a#-_6c zR&0=qc@br1ariVTz>WF#w4vppM?*_ZRNI>Xmq%pKj8Tx6nk9zD3Zt7as?3^Bg%YB> zW6@gxN4MF!8GEJ}APLKg?}yUGe&xX8RJgH0N}q)?Mcju2UhG?F^HBBwzVB(E^u!hq z`Qn*%vlMq>(;0R=^a!g5h@wEG4x3139RbTQt5htktOODnHK7mEgxG4JM}6w_p3qB7 z^B08QYGzd@a3wb473EclxxP9JY1titmisg5@JWn|y8X&GjJF<`mVcwa{Hj%;bCX=H z~Rezz*hizclj3d51}(4Lg1c~a0hj_$=08Pf9^v_r~lbQStE;fCX%?q zIi8S(C2}-{XBWWYHY_!}Q98XC)P(0$NFfWwH1o^$wD^mMZ7Ax^Gquz+p|;Y$$|oQ4 zF!<3ag)t{aLOcuAs>ZKJdFnTuSLcq_1`0Grjjqodr$0^D@6{hHXMkTdYrLj26dg&d zr$%)vJ*@}ab!e)OV7T_@(Z0gzyE_n(rKuf}zZ2@uN`yGx+PelZ)rAR1CiPZ}5ETd^ zO(TXMI?cUiExfP#&P!#<#B3%~%1R4yXC|W>Rx+o(tEWn&kY5f4Y`0Xw&XZEZi?)Rv z0_6TSW$MVRxRg(0Ld-(MM_1uG7;pAhHdTSx1d71SE)ad)a113&T_cR0!zT=5tVkO$ zr*y&ucvb+tE}w5KZk7a&(|E|wi+>khr8jS80svtfAebzgR!${<5B1!&Hy()aqHPkR za@_ULVqTY$NCBnyrM3kLV{g98=I_+6+A5ASXK5$8XaB5b&&r5)!M+h#pS*hWrItlG zfB(06ng0%BC_v;DNM6?ZzdRHR;lf#cX42@`D)?o2mrEd~e95&9oa6$MY`8lS>zYRR z04QED4nUL&c}}IuDTr}PJY!)ZK>}|qkyQOm=G{`SrwVRFUL}(7zI)R(`6sS(LWy-h zdG_a)uSni$ljl6u(d5@{)^CM2)533{}bNJfd^*E_w&-h1JNdOWXKMuQfz@w$aSd%ljJHQknUv z?Sk-ZU17W#!$SP<=K{q~Z%o~5m7jEroYVi+b$s7e6#1$NbL-CR3UnixJ*HB1>R`mhn7coBKaB$k+7J7@%OAM`0#ew!8h zp{P1BZ8Kd}>A^4F8?W(E9)Q0bWr&82w z^F(d}vv0ew0`uQTm~&g@s1kcOlZ;#q@e?SJN-yzV5=*CK=m?A78~>DapEEPpc1fJ6 zhUe=~mh^&zO&6o|B&`Ski*i8tA1=(` z(6Y|nmJU;)%UhnOLn{6@mM5k<;HDztq>-lpV-}o+YwRZf-rPc#rV|K3F>=Z3_7Z*~ zJ|fJ-6d?ZIBomM9V&abvi3@ewC>xxwsi~Uu0tKt)t5oXH;mWfMa}?W!(c$O<~`V$t(az|Wf(J)F^a#JF!as{v>GFRZ>nR+f!Km2yiB!i9TweC9NCKhgLO$W+08+!>_Dy=7os_fm zN?7!DF7NR-10Jj`Uuo-nd#_7Nt}6=`XG_{yKrm@`*#dFt-yZ~@VCQ#(f7~VqG~4iL+jbMg zMH6PgoH+|2>KAH?Kk)Gfp9~LSU@$m_X^Qc?eEp5gL*D#+=jF9E%JFl@F0uK}7wUQ( zo}&8@+M3|Azop0AUH;z&h0|*k*IN3AF0pn3-<2*=Tr=rSrJ28tcdj(_)2N<=SFU6g zC`wbzvo`+`GdmrYN0EN*oM*|O6J({eHkc88#2iHQK{`z_ybZq1xuBbH7gyzI53k~3 zh6*60kz79S@kj`U`If1(TiykP{(WaZhqd@ASf*~tg+fYYw^`??OF%GnmS7|l6V^xy zka16WkA!(ymgB=)=%V`GvvgctmGMXlIw<)}Hc-bcEWLbCl+NM(LQg}z%ueQ5>}>y= zdr+Bom95VXr_gkusr(W~< zJ>^t_8JW|wgf?e^nSFBDHvOxY+6x>HV*`uyAsgC?iHA0={7Wcmuq-;2fsA!4t!T>S}iyHt06b6q)bosBz|d1 zb+mZ2sOg?s(vlB#%FYAIGeq98%afPS%UUTD_(_PLCD$_5f$J>-$g>uwAQ!r4G;&%=d~}cH<8fn#R0X+Wp(n-rf`H4rXOs8j zX@$Lp*-XVQgiZ~x7gLvSLT`0zvHDjY98H_-YT*Mg?IJo`A4PFvA7o)zSY!e4U-y8= zV>rg@K5e9Qr)jXd-u!``p?rMKEJ{nvXUYBWT|k3i_2OrV%fBuJD_ZHU%`N&@a*Hi9 z6PIt6AMFoLEvXJCGd%rYl*5^V8}}tt(|W1N4-Y+)mmm(dA=Pfu>iz@U7EO%J>0BM{ zelz;36`?+!D=>wv+=$O(z75Gf!hk@k&kuhmrgc5G974RG9r*UsOtHLE6-s4S`ynL$ zC^k3iRDy-ZiA({_i3as}(tJir3nm5VoU;t>h|Jy4&pQ{2J;marc8Xuf7dS-#8%f-r z+2Lq&NVo}IiZXuoMn-NYb2#qgzKN0;5!&>5qr#BKbOZCz_aRC`P*~t`;|z^me$lAz z{_XJMyOMQ!OcVTftSP06<-y%|3qL0(y)V7T&K{LLi8Xn@Iu|YS{QB*hDb(RSceccF zcRVxKYM5pWU?yTqO4G99Lg^~%Z_b#$_Ig#t%p9^oN4D~Si{~C-Dt4>v~rEW%1p~Ef#B0z$(bGNePk%Z&9c>f??#8Bp8jG0h9>7kX*Io z5iNok=I^K56&7qt@qZ+pV_cqp8^-T!W7)QC+t#ve+jiaAw%x+AmbI|#QkwyK^< zb!~chCcKmk4ERUrIssxtb0jVk?@n@fL(!z17bT?dpHJZsG9-Cby?}};9g~(q7jC_b zl>4STGSB5EzNNE1sxFC+A0K)Sc~}|yPv}|_NO16k-FADdzd7mk;Do`ZBT4Q$1J3B7 zJ9C?Sn^X4_*9|0q8I!VdOQ|jLvDxpqG#EPz@AFP>KXi)wGJ-&lpx16RTRM2-Y%-G+ zR}&LR0rJ+nGwNYXoIM|c0TgI(Qgb%>6NMDDloMh#c{Llx4GMKdg*LTbTKtye zQ-gH(xV2sE&C$|_*(Vitxf8`0*;)z71ROls4yIiScLlMYw( z4j%Ee*9rg4^*rBT;Z)fT7U6Od=ovI9_lCT_$3%dLLqm&m&6`aGSJr!dnaxLtqY1#5 z!@^DnkFv`&D!CCWzI$=#$y*J4?R6I_*Y+2jeb!i_E|aX|n2BAmH3yTh*%X=-+S#ob*w?9$UwBM0<%Tj z^(Pxvlh@1`Ba3ZvQyznI1p?+;DVb8#o%+&h&gotL@usBOuyorD0TF`_s&xmACxh5` z^x})Lzo5vXh-g{B=dxZI^zNa;OIIjPN(L4VSApqQrNV(YwEMeieaxSn4w8TcmN=Gt zwH5VMQf8v9Uup_T)BReIuX$V7GhWiOz@qGd*5J%u%17RvnVa!LWiBnVo)I-xfBcIi zYhz0NOniIUKSCEs5R3XF5VikhxlP+p9%MoakYC0vNo-AmDiaM z+T+S7KDUXv)#@b=14=v#6zMbd>sav3-)ZYJ97S4Gq-9g0FLiW_%_kOuJy~lBY3!&rqBW5LjCml8io^w`UE@h)U9-5kabx zVw2s@^mX_BWUA0)H<7x}>s4OD@e5QI35$l7q}X`&kyb?W`FKA=1C8DH?C>-*$@LOs z`XARfS_APr<*YhUA{44{HvNeNy;Q!_clvn*7`B8MUA1XJ1m_&ua~UY3Xn%l^$< zRGlRIZ^5P-JdV4(1KQBX0e3sgI5_1AFsQr~XcS*$Mi_NVDYB3tTx(<|OhQBYmQsIB z=$wmwsX5vCJ+ZZu+32@lvE4UzE@7Q1rdI}WU-y0Zn%pBFjmnB>lCd2!gi$mQ8Phb*cB)f{f!j1bns>5B%(U@k(zH2v~}{ z?3hk^?~zEAjt~Q3CT0;z;uW$A^1+D*kXt&Eov2>&J4hIL=Yeh?^dPAU(Ic)>3u7VqN~(& z1Imq_lVi&+>MDC8-`|u8?9SxDqKGTcyYy2#v+uRWN`}pI)96Wno(Uho_SYI#6SZ6X59i@3T z6O)@x>jilXp})x2Q)_dMYJXNqU3tfOQ0UFRwX_&0eKaS618G`{HlzVCfq?9Xl2t&3 zWHp9r2dBnPtdtKdZ&y0bd-baV`Moop`>Gi_)e0|br!CgPIeM{4sQN=%*)X+U6i7%= ztg=F~v)y>m8Cf2r4!KNHzi8K4)omBzMKo0}V$z^4&p@`p7i;c?^RK1m(dArqgn-e< zl!*xM#OwSvKx+3y)$4?Qr__EV~rXBNo^D#f)rmF0-@Tuq>6*q*GD8{fru*H~G-}8$ItE|rx6{j1 zwmeYbK#`<~Za%X`&Ueb;Qp}-tIn!l$RwyvoPpNS?2s*Qrl2Q!>p|*7TmZPry}YCn~`T27pxq1Rc3CSmrIbC(<|0a&uS^UFw+$1gx61f4UORu=toq zTp^Lqf6dm9e4qKAaFO^3TImG+J}&#I@G$_Q>JQq?@eMANkH$@j`FS$mdu#PmX3!4^ z;^w#CMp;Fm{72{%2_oBO1jF(($(5{6S(Nf1usWeDA}S8~kdwi6Bsf1(O7KN|&xudo z`-RHF#n7O@`_}JHlz+DS`s4ToZ;VXLgGtC#8I$1(wKH`f&+4V->Zo&7E&k2qCq=+< zOeheaSRc;SNp%wbPwwDl<<#Tz{CJx9o;F9{C!6XQ|4JWmgy}O zmD`i|`|W&jPBy$=2hj7p2Vv;Pj?N|M>`aA&-e2j4zwRA_fU$=o z#tIBL4h3bc1|;=f$KD0Fb~6?#zkvcb;CD0wWthjQppG}|N8hoA6>GZ9X!oW ztzS$kB!tzHQByvEuS#7lz5DwQR?dnv0yFqDFC$4K@tMN;H$DsUxy`1Q<5^+vlf1vc zYTaGxUrKK0f7#$c2=Zs!3w^(>7|tdqyf_xi1b5V>5#KFd5y9ne?+(GS#T)YNiH%c3k`5{uRjLaT^%(_sbBfJhXVR zxLfd!nS`r8IXBa4mJK!Ofc3yNti$L}IrmEeFrI@A_N-^>sH@ncc5fW09EtMb%V{!l zY7|PQPYMJnGUxs+`TUYFR+~1Lc+X%RWV4bLsCRMexGePfFophV5R~~G^!`D&oO|E+ z`_aY%CuYW~XY>0fA&J|B)C-tVxVLYqHkUH4)+3IHKv`tPZ+4S@B_+6-3C?N9i>|); zy|$cvoH_u`N79EiX0Vj)qzBetf6^uV8Kh=qGwK7Umt-Fs#!pBk5|2mphFsN$6IFv~ z+<2^w+knm#I;UKUDZw@-mdq|*o58Uqs-+qh3s@7|4%%jyQ*?zQB*p-wfNaDr$#s?# zmFDS!D6o-eKpU~ZShqaeu`DJzGy)h?jllX1Xu`33rjGW+AH+eHHh+H^F`Q_XTWX;& zv4N72aQ}MvU2DQJjhr1=$*!g}{IH6-yCqOt}r2KmHvY1hRHRSutz);KV{CVL?D?3A3PPVNq3U^@ki`V2RskUxPOE z=|Lc|3>DrD`92B~SFq5k2cFKHO|o`y<3(t(aNU$y#G?)jGt+$Oa^NJ7-SG2>8uzfd z)Kpb}nKXBvcGUf>@Ej7Y8jF@#5SuICY=0&JTaMi@rDEzy(dMa}I)y;r^rDB|7=vyU zbroNs`Bv519VgPi7`gyJV3SF-va+dZ9qEMHLMR|Xc_7bzn&4q09neO_?}dTm(nFh% zSeR=#rUSpIbjT9$#;G|jGW=Xa_n{|bWWMrys>?eRm>Hi^>#96RUyr$&X&E~<|30zL zGv)!7YtneES~y-vC=;#7Fg@@IABJl7hz>3j&ihqT*62cQBhq6CqCLx{V)`1E))&gLNVO z+mddzl7}L>`lhsUvg=Z(6r-2@uhg2%Ij81z#EoD8-rxA;wwsQ|pKANry=Ivj2g`zr z%K*$T_OK?HbGVRfAkU?Dl%GbntF7wf>>)e8FM$B53{BpYAUt6|&)Jroews3kBeCbE zmb2`hZgclEFZaQt*I_#DRf596z-ki(QAJ5jO-(HT0Q37qJ! zZSHg1xbeLEOHK{zG9ukJwu<&vwUL9Py=QnaPJDQxHR=IPffbopVM2=_NPlR_r380z zPTLDE`Xzk^W?_kc$5;|iuuGaI;t1mSuD0jvDxU^katc|PmmD^txy_^zDGA+L0#{lj zmPkBe6c@376fRGz8Q2umYfR=M?jSJ>&>sc?pMOIG1JXM#;7!Gad@cuShD9VLtsD=( zRam&P8M&)MhWtpw7^cCpWzn!?TK9L|9z}KMX`ncg< zVf+A?*cCmP{~bg&tU2Z* z^H2I?UPimk_+g!mX91;Di)9_I#j%K;6+(O(%7@1wZ7+~s(2G!x<_OKDffP1Nn-}VR zO&E3X2o$={Y9S_TxCW1X4UHoB$nmjBkEN2b0zLW*;FpdGlk=9g97)2J8ODU$JsaO5 zTUiOJU5=?*90pa_%$%$nyeQ(7GJ_p^Zl?EiZ+}U{TFPjq4_;t$JU|N z->4vm+u~OZ6oCMBY|2q1rT*$NQbU{IgpclyK%(yXX~lDHvnHFr;m2!LFDUVOVhG!ljO>}xRO<{^ z+HlM)m~W0T+nFtYJig37K1tsvn^P8>kHSOTOLkq!Q6*CUmPF}?39H3XN*_;{-L6Jx za+OjHydk&LB?=4z!6D=pSeplsd7Na8OyVmMY|PZ)Hxo{AX<}!pm?HA{4C|6nZny@+ zB9a|Cpdx!6N)r}Q7e(GnN~@HuImEqNvnVFsc2!VnjP3?yu%-EeZpe8~sArz2R15g;U9VYP;4mcj;_n6VM z2P2GJRd1Lq)YILk|HPba`L5XL`9f)Olk`(WS}%BQgZ*Z!e%z7vRE*AvTPP;DGTJ0m9BZDzmjV*|Q= zn54j?X<49D=zIhU4%O@4zGS*FH77&58Zgw};)SA?f~Ae8+<^>M>HLzABp-#ayso%{ zbH&Wb`<7e_3wUhT%O~k9BePf;^W=-F!X}1^1nfgjpB?p<@H?U`nsuI0LEe}isW>BJb zqg$znrQ~d|l|)Q2Q8NHEPD2bQ&9=v{gT8_~Kd*pu0H~B7B0`NMnIf`97N?GCxX}Pr za8kSFRo_L~l%lNXJH#h_ctwlAbG#7lNSPN_K9;)O6iN>6O6cCr<`5TWaG|1LbsobQ`_M zjoi!H=VFh<_}heD{!G~Z+o}S?cYGTAiPbbfA=lbsk+~0T@VB=bJvkFzxz&;v_ zv}@_=4|8!zDvRDcU?hJy!Tx>Z!b6+4j0j=zl||F`MU{$`Ny-F|LQY|B&8K*FIzU)I z+u&Cgf5uy9AQBi4@{fl`t|Y5zH%u9ia43VHc+2O6WVblPx`hE&@9mI*S%)TN2zqfB zY1gYBNgrlTJ0+kK9L2Z)vRtsb9JPcz(r2eomK|eKDu-lJh^&C)Fd0-xy7Jk}<=WRO z(FF&6|E5THXGIHito}Rjp#XrSD+lj@V}s15&e825^?sK0vL%3HmDBr9^u@(k(vi-n zgK@losjCHBMKjyHYR}P{1k7|NXP1~ph(ugiKWNTv)3F5LSIEh1CD~74ytGwksTO;t z6~g$X7x6aDS)2JRa+^b7o{^7s&RloHMjWQ3zyhJubA0oyvE2h@>+8r@Gpr{M@*AP+ zK=(1<$(N^-9kj8>tKx(iQO!UiJvIk+r5Ifwbai=Z3q@kVbs#lkvc4IqX8ZWvT3L*_ z599H(n;2?5Gyq)%u)+yO1V*FN0hFPJ-nYHJ`JvnIpdr9RKn8=vW10X9m@-AL=APSd zzeC1;o$8wUV$vVSH6#r|XSdi~VJIJPy?%uHtnOE(=*-)9-Z8+WAE5R`x96V4P4Jk& zIU93ZKt#?wYxCS*@Gv!cL`u~8-6_bX#hqMbrNRGmju%AluF^7PhrCe2*ZTg=Cu0Bi zaAu&tICc6RCyE;vy~%&J?T29C4dxS^26UL?-gaQF9jwcAG*9E{<# z!(kjaDjI}rOY_e0;WUtNGm(URLuLYT+99k<>dcx9H1uW*G>^OGx%mrk>sxrVmQ}Dw z7Y0#4wB|IlHvzkYMz7z6!UvL_YumZo0XGoXMsA$#oh}1QnqD>HW;+8G+JCa?sojdA z<7WNxZza^wwb=MH@Ayv!Uq;AIGCU;2ekHAlhdW16x(S|CbHVB+UzcHXj?HrFq+#0I z5v~IOaEexVHiX}%=kbBwd$>uanbAuc6q;UIrh5$&t!AKGaLYNi`%47GwLp#~2%;#d?_pFyQ z(*F8!6|lK|MyaO|vCRBm3_)Q8*^0$c;kzo8tOEtXd5}W#5obPQ$O6BF;t|QYielGj z6c@qAcmzBCHPCXcRyQ;CAbtDZnp$+VCm(LqbhjbW{@3r|*iLc@v^lTT@Nv9ZB0ha31A4Pc{CQfLi2}G89Gj&oNwJG265UcTnKlUakueUmp{^0 zy~YhT$LGKR;g^Km201)eZJUoJ0E52R|F;bBMmSSDroBB$e0=Y>I&QnKcG{6?-<)-! z{IY44(1g&X-TEH?6Q#TrgYSX4xWBIq^ zx;@3=dF4~`+EH-|JBF4TFTs;L{BWN}o`1t-I?vuNYIeCKfj6~7&^Z;ZxkBWG45&|` z<@1|oUFqF_)!&<@k-GYxlG=JJrqb4yvu@RKMQyiW7Dq!tLBDe#>Q0}(!%n(O9sk7i zyG{J>K;HM5%bqRtLY#kuP5^2k-H{Opd{?>fs!&OBIYiiYECmjm5XJcYl?cRrhpkk3 z+qS`Yr+agR1W2bv4tKyh-B6||3D`lQCoN3dgoJ8*UM3AEd1MM0ST%(~utJf~=+K=- z0(b+@q$N?qFOq_2)|ES ziq@OxCr*Hc>9C4cEOqi$S~3x@sx`0Rnyh-(7>PA z{`OdOtGYI$Zd1tJ2~4yoR2i$q4Eo{ZA}>!`bda0+IE;FP7XGOpY_69&OV-jzoHzey zUQi~VSbzC!hu|5JPho(YAI{qrjoWA&5+XgKIE9AFLskq&W3yvoD}wCw;z{NvQPHlb z(Bt;=D8u#sw(wbY<7>YuR%SSAYt>C=Qwe(Y*T+qi?8ufD2)ZFBRYv|?arc6&PGmG| zi|%0?xtAXXi_c^|UvmEudPYh|G9SjEVs}+4I*ow4L`Tvsghxbl7)qle)r?5+ek<

wp`r9@A80dR@uG95 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 Rz+i# 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

Ak#Pn~rRG35 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 wNE2Z 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�%WcoH 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%0AVwlg3@f7iDV^xZE3#Kp0>5x(QOUMM zeuLB+lz5`S8O}Aw`Nq>vz)PE<&pSKaMdARbKVq#m6Ke0N9Wjn!)Q2uek>pX90NG-4 z?L_RIuL-Wm}AaQ0eJ1`s!e^)=Y)mb(JN{?!( zXz{WAQ^0ZQfoe-j4Rf>k-qfsQfz{GdMcgeg;!6J9^Csb<=~tmRfkxPA4s(247M#L9 zjdDG|LLFvQfuG_kwSu2V%_blEtm*zcK?Z#>S!h|2!p)u$pq3T^siJrC@{neW&+JU7 zpnGTK;r-qiv&EcwslpGBJT8xGP7;5sH7E zZ@WDZz_%(6v_xb_@960NJDY<*=a{+V6WXwF?2$W)wXC;NDq>tGkcWQ&pv8JeYD^|5lpPz#-&?~k)e2vp|=?c@Bv6-r>m`&byX2PL;xoZHpoMAbU7MMzcE8?rI2wEsrL;_7HU$&qI;q>XGXr8(&IUkg z(P`WRZ0^TC87$Spml^r3fBo2^55qQ1##Bx#6`Q8PGk!;sPA|PUq>K@Ma0cjG&x^&Q zcav;Rp8S&d>9O{EPY+s8M;Z*YmD>VSe8e9J|9dzg%(g(Evljq*taltX6doEuMo0fk zRaB4Um4b!Vl&lCVz9jgXAHIvv6#B>CGMVr}2Rog&V?fu~^^e3>;Wf39v% zB&Iq~ BzpoQ=WAxUYTs_qtc&r?Pr+iNV|yIQ02TNZTejI&j5YC2>Y%qZmhJh$%r zICyo!LRMU-{r>0V`E4KZuNT`MLuv=gpWTnQFK22B4ud%P- zf+I9hu3^6Qs2JD>`Lfl7xlHM6D3Z8BXr{V8j^b!33p?gk{>~n$h$z~ey6x<~twRWG zX8csR#!XYZrXT{!Vj`Vfk~o9jdHWvlDTP7}6YE*e2Yr_{S@B!ezQIupsy}w@c;pW< z>mMK&-<;ZFS~*#>82Kg|+&Z)vE)(kZ5SoNZ`#?PzDR$C?N85G-%~CBc0ZY#j1(tFG z1`{7&P0hq0xBJht+pB%?u7K<$l%5-DL% zrY@q&O&+>2+4Z{lraCz;K)s`s;sNmY<#ltX@>)RJkN*U~f`Fn1f~%Z^9ka3GG_2WO ziF{r+!2{f7VKAou5@ESj)OH0wZzi8l2Q$DsMTP!` zR1B-IN(Okfmyyn~{gvD8r%F~8hiIx@I>2bmryo)i+j!l)`p?JJ3)#vZ(3m>*T&l&? z;KX-phMTGn^1~UgXA6L`FUb1;$Qd=7(N^ilz8k+!kz~p8AdG{p>u|6LbHu21+CKkN ztX`nZX-ZTeJr`o0-u;%6qfJTuu84enSY^4EgO-Ma{se)nBBvX3Wu6K!{E!x=&YQ_& zCxnHm**J?f>Z+O+MNEu^R}@a(NRY_6rc z%0MUAGiNO|37#51qE1xkF*YEgT{@qJ^8!?D?mk#Mpiq0`BJx6-Xr&)Ux*w}rOWmcGP~slev9Zy(}t>l+eS zXpyhJQ<8stb?Pm{MP+Noh5VlYUK3%QF3P&tVE68L2&Q$Si}67p`F~R&4QVj->l8>H zS>k&oqA$M4v7Zf?O3|dlZc}*uBW1pSwIl7hCwbhJqctJd=GN#H{RmK6Oi!YYK9pUQM8pM2R$iCm5SC>e4Rfq z5N=hPbRfXqf`iW^$wUk)$V=l=aMNC=UuK@Pcddg>|J@QT3Q{l3-n$pHwbsQR?0j&^ z*-HEo8lAvzP%w^|dbU(6ouKE-&H2ImQk~~c_T}H_Q-mQz6{ZR_`B4SoQw32TnhbHx!u2A%R%-tl4B@4k%ppE4{dyv{FA?1q?S06ddT)?$lux&c04KVM92zAl}=ov5>2jtycxg(>1((hImat{t<2|x+!YtBT>oN=SNY_2$ei4%oZ z4JA~*=L=bT#&4tmT0oBli7z@LR3??dR+5kW!Nv`QFeaZvHHxD7=g%Cr^SZ2$eG5Gw z_ws;^zAoQ~U-nGjw^5L;TlIrD-0wN&qbT&|Lt-N95#`uP_Qi?-mDK5Nj!2`*c5nMZ z$e~49l+saByP_ILVX9eTgf(on4HFgRNb-8P=9vuoTebhpTcrXEA z{3rSq1=D7mVZp>wu2wDPx;GJaTpY%ye!PIh126>LgIrbtQ7S*$BQy1);yk)kR1y#l zEu=`cux+7crku&u^MnVt2OWB0{d+WoPr<+%lU*EWJ zg)f``MG#k4Gw_8wWNXK7MYbdU`mwF&DbRjl=4Zv9H#n0BrX|#DyS-r!wdGj;g%cVA zR})I~^z z2D}CIlS{;!Nrp`+e`X(MK3`tL8Tu*MV@aJ{1TgU;j}xuVhk*lk4(J)~r`Ca!07hjYIeJuUezP=gP;t z|9*b_OUpsp+MnkeQf&MFaIwK9YWVWHPV%&^I0?PyyIHN8I??WH>?lcr!(}scRbTWo zR-Lc3iZDgFSjM=IK|URKMqnyyOnN}wUYA(vD`=({ev8q6Ky;JccJWc?A(@1b`3aSH2Z6FUSadvXYaNLWDI*s5 zL^>LXB))LP?guC$8^h44lA^~$p;kFQxLU%`PbX|hKZqZBo5K^S#7=TxQ&S+?x(7&K zHS72Cd_6jaxx={_#-qzh*~IFr{sl@$A^}oSIe^TiC51|4r&?um4W~>IiSDJb-=J zL7uB`H+!wG+{gnK$gW;9!F&?n*GOcKcExI1o2y-iaXffsgLJLb$ywJlLSr4b+>mnJ z2K4@p$sa38txtHlRWZfHB7gEVmDCO_nNnuYk-JSSd?SZ|!K{ch@Q&c0#(Le`C*8HxXCl>GwX}cvbQJeoR^Yf(hJ@IA6dgId)!MY&V_af&VO&M(#4W&CPHUre>)9#_+ahh`2H{!aG;p&iL z2?yz(VbD3zPODh2G@3nD%%g2{Y7mP^gY}JgkUHKw`8eqlHm#CY$L`wZ`xkl@3<_Z! zvh1d&g6OE$ZP9F_Ih?QWbL>E)M{BsCbc}=@zqGQ9?Pnj?lA2i&5SX&bFs0R|q6kPC#FyerPgsXXFEJmRGKcCU*M%x12W(Y@8+e@*r98 zF9pgs#)@GvDI6D^S&g&s$4{hGWaoj38__kb1%b8?)4EqrZ{~*X@`2-vDuri4Zk2R;}-F|#BaS=(f>~X6bLAbplMxfHLHA86%Oe*7rZ4U zR;66-aQd2)|MCEar{Avi(&6=^ti3Fo#s_7nc#NwI`N#Y=;IMYpl61QHLl)-GO0E_2 zrtHnIBW_``ZNk7l61DnyzHtN92JtN58pua@Z|lRlN`!?Eu?KQRG@I*+L~ebpCCem7 zS7R6bzoh%~bcsHrF4N9b`G)jGTWa)ozm5>+FbswbXi8pdl`;92Zq zH>Ib8ZS2W>SRa64tWiO(A^OQMLJ`A`#HXYF;`LDF>gt}k(}kcPG?dYp@Qf&xBs)u_ z-lR~~_PgP4LpyzYC7u#r-XhGSD5=hd4~;%b4NJE7fNZ(w45`9}MP2r^mP({6@@oN9 zZzLOZ5Y-6inzT@p*#j$cSc<-Js);CehEpO{3Zh%}NXd11QX;xe}M@c0;*=?x`$d7wCjuw zXuH1=PF>GsRqXcYqf1=I?Zer^neNM~qT=bFwBM)F>1u-}6RXLe!KEGrUTF3iteXis zJ#&}w>y&Ow9h{8Nmg-DT`itjz81YKBzHI~80X>zq}v zMQ)cH7JC~|Enlg&0O#_wFt(wH{hEB-_@Bf^(*zn|ccy#nj1Ry&OwT|Cec*1AS|J4a zVcRFNdeUp<)nma+mOV}8nRQ6;6%V6=`HZWpvQBO|Ddzs<2IJki>+KSx9NDK*Ok*{c zg9e;d8!)~ew&10CzcijEb&jJ+-6SPzE?F!nl>D;Qw(^`E(iId#K|LXy?T_?o9gFR>Ff5D}%+)U@531+2}Mtx;oK@KfFWMA3KSReIhoNH1M z!cXoFfcEC|IuG_3~sWbJ+m?EwRg27|*Ixx%H=!&xKw0)a$ z_PFA5O}RabGIHvbCZ_?)bS-#Bc!XeOWtjPlbS$lt*3Rn61H&Ii$rTB z(C*tHSY*D^FR+dJ6X>N=ws!*(knaG>c6(na?&M?NmXTlFw&xO(ZMTE;wiW>?YWVX| zAZ(No)Y-k=n~-!H3lh$}(kxBKK?!XsA@t%Pj0s%E`*B~cd;gn6Yso$}x!B`~(@eW- zseWX4`EUlu*w>C?Fs<{zj_iU7rF3|!)bngy@Z~QXFBM4w4zW;D_!p?~WG*K;%&6cb zBNB7eAqV8y;stTSp^CJU#xr+^Zi7^2;Kej5c4)X6bro)s#082EBFS;A>T-kEg@AKE z8BYp>or(-7cnlAOB6i%`fTw}dP?k-!_L~_|$&GU{sxH$d)2A)DX`u%{KwAePpVKxSq(2O8Zzy z_QO`#sC0#dgaR$(HjKlih?1?Xi}3+nph*Um#|0IB0B$NH-;QchMooO#e*$0*MS0Ry z(Zx`Ejk$<(zlP#Tq}7{cmUsRnFVW36ohiawZm#A_1o6+Z(Z zJYU=#$n~_-c;(AB&#PU$sAGQ@^tTky_O@pO6UMR5uv~pJhk2UsigK+tD!E-}#WdN; z%%?wJ3ej!HA*ChFK#^_nsPt3#J-+ur7JVAmC2R?08yC(Xd0;H`6i~8NYM&}0qy^O zCe{hZax;80?j`vq@yam5Q)rnS&NnUZk>PBoSxV@Yz%??ar|&+;&eSDcu{QM$p%diz z1sN#0`#oLc1V&Ei5e5QK_SLb5T9WOeA_D}o`}FpQYC?_JUjK%$pOd7R7A36xb-oNg zX1bx*Ur!FNRp*t?hzq5mDImdu`7$&O8Au6=fxN4={QGZj=E`-Dzsl3hY89LLD3P<( z9c_M*<)R)-COnE=(6kUUu4b-Ka>`(lHqbY@F}|4Kjn*=xa)w%*80Z_ep4_btbw5?s zx6a^+XhlI2<=%Z#v*3%zX>h+rXe|u<>U70 zTh{$@&nSA-Y9f3*OSgbhRg5(}O8tzSrrISKcUIMpRh?^)*fg(&p<+KbGAe1OIL3#N~NrOK3fB?*fDyUqpCiF3_nbA&+6u8ZjOOfKH z^jW843`NLYHO?@dwrZ9U@CaoVQ#Gw>;rJnn{+|Hk5KskPsSxLCR;8Gb|Imm;HyW(f zl}Tk|Fx&sepgs-K#_0Wv!0(z+uCml#jR8}N-eKSMQiBQ(q&GPaTPm?1or|_(uCeSy zDneCk$Q@P2739w3bB*`URX3w;XPOJ}E`1b^F8{o)oa(!c32@QvI4oTgb`iV@Yuf&G{qFmx zDxa)p>MF9^jP!ynBN9@B)hF%}At=#fwpvween zZkj|diMq$}T-|Z?@)Lv>+3}f2z%|O1Illm%mA8NfXVb&e2LoEy0_#0Ad|&wFenH^j z)9%4*9t54yd~NL;`Gtl#t(BQ*tKLZnDmNKB2|4x(CFpeaaEy*zn+N|MT8>F{Xy8I8 zH+2b&re6K=ec}3Fg(L+#O9rG*j&~DB@ZJV53RH9BqQi65x=RP8j`dF>KpM3fnKqz9 z!_vZB@m!Lc9T8&Na>dAgdk~lL%ix~sV*K+*uk{4prB4!;h<7kw8Z>2l@PYfE4uw+g zRmSzWsLd4?ZHR%>Op@((J&)&P)0hx3T6(U&52XY*N*X=I`8~%TcOldT(EVpf`~!dVZXg0wRVwQdeWnmZQ{p-bhqqO?(*Z#MP2VRYikB=)WL7)G*<=aU=(LOs?(oW3C zcbBO__T-`#2z`RS{2boy;Y=SAskZBw2-RK!0=bD|UwY8>^lFiIL+w&A*#VMNmYNBY zxWovD@1)WgSj8f_SmkJvtWMdG|o@dhC&2@nW>C6~@#bp>Nx!CmiPyt$X`^URFIiN7a3} zvI@xf$BuwvrBxg z^2RMv{=?1Ym)_e$hIRO#sE_YhM0JyC>bTQ_#Md4ZWPwiJApa zPrjMmm6j=6IGjr^JWdw!kIYO3z0WFI%Ary$B|<~D$>1MZBdvT#tDUCFX7PH> z!V2~^zx=-n01QRFbyj+fM7npVll`=2cO!bWsJ@Ot!z0;WC&0|@4|i2FjfJuo;98Mi zzXCpX`uW+16bjxw|G0i!&)w1gd{tZs-?|K6G@DAytdg)+5%DdA=nX6W;G>8N3# z4YiIvuHpuvJMb>nOK`dv&{{Uel0g!P!l%aAp?X}5p(9vDOaXwTDs7}$yCC(=p^=QR zcB+vX3KBP@bocdi10-boSpjtowIS8m*gQp&bp}`!ID$4Mi zd2w`=vg7DTx!*|ssf?M~))|rTEQX5Is)kr0*@CDr#Sx7kyHKjtzoOf7x2;*$-s z1^7<67)`10Y5KTs0&;E3lI9?&2;6BE``6q_Gag39W^6-=j8PHiS2S6h+8B+Onb@o7 zXmb;RmYf(ItLwyf&SbgTd~5 zP?*?NX;p~}5i?th@r8G9HabE2FM1}&SoQcQ2f-|*c^iE9Ax`d1z zQF7;6Mp{(R;sJxU(^`yUd%Nfm7%A8J{lytQ>*r}&9!xwmL1ZWf;MPQxKtCw0^fPk` zU5%jFnw=xR%qP+sc1eFDJ6D}e9x=n(MR)}wjvWV58jrk*Z-^mvp^VGmF+kPK9(->Q? zRUT3(i0BXytzPpy5r{bICjvfc(w*%WJ&CA&y|q`LsfKJM%h8+NQYvKRV(of{#!@Z$ zjg8a0(Hvi~8x#WvyY->-d81R>m=oh}Mn9lw%!om{qhwgBUCaX4+J%-;h+;(_LI%}Z zbKw(6oe8l^Y}0RbuQkY%2~TzskjGb7L`1qlAwTOFrM2mm)k)X?O0lA4k9O zYFg97i1)7CK$5G3_)+aJx!KdPA}2F(w!><^cynS7Hn^8K+bx&waPAKh0(Tpj2X zz&LXe&;)yrtk^Rrq}2ymfI3* zOuie=PeO0cxR0tfBsQun;uLPejBav5F@Y3W6Gg^EcTI2q696Ux$~g$`i~)AciHEpK zU%Be00bk8q#Qw)}V zXrmX*T(-a*VdJ~VGQk=yKXsAK6ADj%<+I|Fn z3{lFC9vfVsH)9+%s&~{#9wB7}XPSJYy_Z#NgL~jpVQ*Ufi)vDZ^PYSg?rKU6H2RZ6 z3poQ{_!tQX-yI4mF0oUjVN(YN-Asw)k;26_a&!N#p>cbL#2uF+tcxzm>AMtDU5W-p12Ji2;@$L!wva!G5`>{9DSrdqNy#`A3()!f#;6>YP=)R(%4$z>bHc znQN5)ku<%mzyXUf`7T62Lu?(*Tl6pyRd-BmZ}f?ypgfs54#Q1BZRKrRgQV^3>;wBs zTTKpC%4ZxcF)x}B;H(>UAt-8NCfSZm`vqZ z$s(JycC*&y#E-EP1LPCFGgGfLuKm3-qjM-)Z+KRG6{Xzk37ajE637vH3MNG0y4;z0 z!GHRp#^8f;)crX=7&SwFmTL7K93vodv&Z8|H7|&?3uEWKQEjV%8uw0q-TWvjR52R9 zGt@=Vni#aWw^DE1QLpDDIlR>1e9|Y}VIy`|2`KTE)=I=mqUq$=zTuh^Se@>;%C2PX7rCX0n4$KD-%ZVXxI6)(Puf@{UH@kzx%B~MC5Gm-s4Jwz@WK7k3TrZo%E% zT@#$*9vq4nDDLj=1b3&nyK7tAON+I%(C*yNJNElw?@w9z0oRyo&GWpDV-5^$b0fBl zrxf+}#I_C(7g+Pwfxlt8xA4Ks-M@ZQ)q9p*mwSS32vMy$n&7mngN#X@B{g%TdS z^mD9f>-k||dt7(+_tp@DzD||Dj`Rd&%#G6WRNt%t5;4lE@7s}mos(DS4vOT~+EEh^ z`l@YvDb&2ZFMG{P@=7`#E+sYd_M^qx0~5SSDiM>VZw&#>fBx(xw%Q}2qo50XE5*#4 zOg{J~S&%A0khdi3{?8!h>M{)+U9%QzpzNGY97$1EG8jZu*=QLS>^AQb+xlffk6&co z!oqDLpA+>*6*VdfwNWQZlU!o+?ZztWe!esZM}25i3<+Q9RdaDo6aujYlVq{I2;J_- zh*=R6K6ZxQ(hKpNGCKz4(Wue&lM%X+AESl3G%I3;YamEw7HgeejE%`#c2m&GUC1-= zJ@thJZh{Im^=*A~^8m^3>AzbK2Ggi57&Q!OTMS;qILx-9gn{K74e@VAgWdJZ_E&m! zzla#QI0U^mn<6hhi&;6h>G_#E*P2djNRwY%5fNnMD(Qr(<#NRHNF<$|!6(j;+qnu< zA|?8&nkDr%``CY;R+%>IN^$;g0C?e$TJ_Xmb!f+AHRB=}7>guLouOthDdMEA(l@56 z12L{ZF3Ho-Nb70SXu48hcp>Akx0RH|Wc}OM!pujxpO+ySK(W;lEB$Nz=P=GNz?Hb+ z6MFlu6UT4!HmXgjjYukm5-G~BGTc`VHz#wwf-1zU-bkq?2bCum_GKS6O@d$)(NMG# z#zGh-=44HdMS+R$(Le^;k7QW^A!tBMY6!5wNsLciu<_xf}qf++D?l#2&^Vu*ElNk0*DG~c%@+m;&Og9L)TXOhFXQO#pob4J1!pVks`+EGp zYn?a0t5!b};gJ$Y17_$>2>W6?vC)1XqWd;ZXwCDhP7$*?5Rf%Rs8}p`B4VM#2Ertb7S>af9eJ#= zSyZ6&II>jc(iwa!OPMr~G6p_CI}(|3JY#cNjWVlirIg=cJX|5$AV6z%>;gSv_;L9o zT_y=iT1Q>BPvuW?>)MexF9bAdyLf^QE)5x=nG&P85Wb&@tfOPa17}=rrL&2%3`!W{ zs)StD>v4@bv_^aHd5)1U`?HQ+c)6VRiBU^bI(fgXK9oeWJ{$^*BDl}_ZbX)uIahI1 znJ0YAOu&yWL6r{;vcW$*VpQ=4+4l3kl%K`_R6_w9XX=-E65-z8_V~3;I3!^93Uzcr z{scQ>-&vgY4q+v2dR8(4+x)hWG@5jl&zVEy^m{+E6QVAH+-yc$*QQfVDLVFW0sOB^ z#?C1o{|$g%7%D^1cm{5e*9Go&x(${a>0k_%GOP?I`H7+SXKPP3O%6p0#?v@=AOBI; zRQlD-(YN0Rw;YCPeU@w z)Ahvx;rG#Wmlhuq7Yf=_Pd_jIc%1nf@b!?iIP{0Blb`a27GOaqR#~=)N?bxJj?GHd z@drQVSb9JmT9CBCgC>uMe>77)zaqh?2H5uEDSgJ{q%EHXuTacl;I)Y0$*jePs|g=H zOT>!qJyDBzjieY``mkJti+~|GKVa6~ywIN91-vVsn-%2pP@4@D1NGmCyQZRm(Vu#6Tya&J97>% z!o`)i1V;rk zng4p1QW$U7$>fI6O<04WBy?KJj;MlPUL_L2JzKUf>AryiWTcxV*d)jheYO20))ebE zdQV4Z1TJ#vR`}aeBmr3`=$VX*()(st$H@S)X)9Y|j@%7SZTG`5>*a09?Nw)`{n*r{ zmN@fNg9&iTpO^%e*rs-(cZeAAR)B3Xr4Icw?lNK>=8L@tMvnBZj_)g#QJBU$zJHp* zCLGOgmawBl<%zS6{WfrMHy`RQu#>l|rM=KB$^XZ7=WpJhsmG$1!AsSim|)qzDBq@04fkSYqdVf=A?K6Sva_@8M&jRHEsS?h=+ZXVvJ^Zy0_4-V;7 zU(E@20+e1EYyPK58vH*CF)VCVogbMx78xhObc{k~rqFR4BCanMAq|poYiGMYX7|Yu z22m{hLf5fju)hqCrNjy!{d~Dqc{~HKZ<@IB(znmUv6XNY7#^#@G*s6!S+xiK2A3MX)vt-d_`{`9Za zim@EM@>a7839QIw=@DFLn*?u`vUVmm(AinGnmcb%em&$s#eJ=@iH;f*`iLb;a5<~R zt^#sQ%RxV@ovvbLma{d>YP~Lqdyh|$?N2(oD5Bz;gNVNUn;&=bkU3Uokx)Ik&e@SO zQn;NVg5ZZ6gg?PWY(kh+ARY@cX)JJ(<-WtV*qz~6D$M<1zJ^hF7V7I-Jq3P% zEE32vch0>dje^sEH3gtjL6i;B$1cvCt!+0c)OWlhx@D_SRy<((nyyo|oq&B(;WV)r zDA47f-cijibf5OAMV-huQnz#V31h2R6Mx|fUQot~gyOwUfZjjHdvNAFqd-@Qf51_u z(}e=R-NelF4`*Smbn51!h=yf+Jd%T{qrlGvX6%lUy?t$0^YyODx;9-sy>?w35^XIe zL#T*|lj%&Hd^)ZJCSHJ`j^0<*#-j^&f87zd@7FheG(uWtVSlRXktIi+l>>n5*k&*Pzn1_9! zNt&ICBld@3t!#ix0VgY(MrJvn!YItXcxoXhYslw{!AQX@8u1s=(Dk`{6^B7-a72WG zmgJk{FB0OVCG_e^zTi&1JYTCfAwhl4?Z57JDkj8D{R9jfZ;C6Tae zN`<9*YQs1;F;RlU;D`?^+=L9He=V-a5-+_RMf%EZTM5pi=7sgquhbZaAP)`?fqr|O z?;Spv{)8!OLwC1^)l2_Ej9Ijc&?BKCMP9hyXY27%aZ& ztFkf+46H@@o)gEFGQ!gT27na~X;}Y%aNGj+o&OeM0FBD*|0ThE4OJenGMqwe;r{w} zr9SW~YMD;jY<0eM6^YWKjV+WH!{}4T}X9lTW>`pHST4i6@O8%gTX`&+5VkD9E zNINqC8bSP^#@a~p?*d+sRJG+uvkjsDk2prFJd(PNK)R|AB91CXOJrJ6xCEMVWa46; z9BwL-QgL|IJ;4r}NDH))oh+S46)u+5AX~-wsO)cm9%C$MJTNhFj$N>^Gojc#DEBwO zAEs#%nzT74Ql0SHZj9@6v+5*F>Rn~dBFc;A@=``R>QW3;sPCqQ%gvooYA}o}=SB|FA~s zTH;nqn=~~ol-qTcIvdA0E~q&?dq*N4d0RIaXy zSu51hP&SMKM7;kN8h(gO6bS6y4VT40jOfR_E@hC(gHP?HzZ18QH8vesZJ?u83)rvU z1&X@qitf6NFS7|H@trJjMz9UpfICF|QJfn|#^bd%>|%lCYS*cfW&=gutuDRSzZRVg zz?#@{rI{4t?@`Wm{Q5bw7(VY^GJ9d~IWK&8dutB(t%!HRx&{68@8Buy|82khe|~9c z4J6I?J!ZgntDv>3K-8e{gG9RBfVI4Q`M@Cm2ofF&Ih6(-Tyohgtc78Z$hX_(hrJ%f5eOI`)D9E=b~ldWRoz5s>BZF`8_pqn#gXU%i=;BTRKUcAxrnj*(v2pml@ zxfgyo;T<;8}{ zCUBUVOsUaKp<}z-X#O&o#J4hjymQxUT&mRW8q9WXJ!x$3Gl7yO(O`Afvx^*GUQ1tF zD>L~^C6Mc#GqJlb>uegi3~jobcq@P7NJxFtjQmfy{^zn?XJfOpH9r#Es{2MPE!S?m zd2EGpFQ)U86>A!X&6bw1-;M?Er2ZZ;=JI+tkpiU3#N}@?Qt2t>^jJhFq?E$D@MJ5P zyHC-K9lw{>#;Y2X5AD@=8GFJNk;(D^o=A)klaw5Z&7O}IA;+FXfEM5wBA28(*KF0w zJ?LV|&4oN%B=MIfHd5xcg372hGoQk*Z%zHroo|**GRWC$ei0;nsoB;uL@) zUN?y$+&v7$Q>{Dr1xlzbJwC=pDsn88#EKU)8Z;(Vk*8y8{tN@^an*QM0_!K;7;6zD z_)%Bt*M!Ol!A4#^J*&K|>n@JuxQWeR7#sIGt;?^v$%JL8p#9o3AQ$~y#&evJU+|wr z<8z)5wKE;D!x73XH&`3ImecsrIT zbz}^C1@c^5Fs)wzoY^jXa^ZMgw4J~0`dN}^{~~ZRQy}%(4&t(PD;}CRAN^I_5Gwle zt99N^gb!w3E$qOchU*%q$*n{N7Ubt8N~Mvu!84WpdTj#AGi79m#aQZ?+6jrt$WWya ziG^HPfVlWpMBAQmr%sx@82`Q8Bj1NaNN)S z%r?DUw={!a)Xft&eS!70O_d2PJz~OP>!Xtg;4pG65Y2HLc99nb{2+SI5v;X-0 zjb@tmfJJTjYJ@$mz3?xivTi9*q|$#>@~2RU=Ow`ADAcDYkq_^9H+#I ztUXdOu7)Fzw1LPP`*Jw-S(dNhvlYSun(LpVHnxFZeIhD}Nxgz}@}5Kt5BSVy=u13m z5_0TSw(JV^3Rj&#n^s1hr^CKAWpol2dam^-@)J*ka;0fjy`<$Lu2U23cAaU-`+__A zqO-wz+3sS+dgmG1g4Q~WG+|Oon-Sa*aCwINGhf#;T-{6n{DyOyBMxQQN}8x-t*yCz zZ%c`>>9X+~b&(jaS;3)4D;ef4z7U1Ltz!{&?Mq9d&`uYl|8gcTpT1LsEu$@ZDYHl) zS~H_^J|3@{Dg~i)b>Nh(fwMZZJLa^`@CT(#5z|tUjw+NI+!PReNY9DIC+iH;dPb_s zlXq|;ePg(LA&RV5dcBNZDsbFNc3__YPBgnG?4VANif zD{^hM(Nn81$TvaMcf5UM*QYiK5rZ$BJ~*OG&+3_2PAPUP(>96BfMXCZ5)~k+H=idz z8%u=Gi+mE^s$3K^ovFqxXG&7f=oBt%JAZPTKb+Irv1$^{h2WwwzCl z)Sgje@v?vRnr95|BfAV*$mNXwVR7?WrqcHE4CZi(v-wB`u zGsJjIiQcGtjV-WVNyfQ>;$Ur1SQ6~U#_0IW)Z!F{MxV_SrM6d6e73bc+kF=JFIeK* z8wh&$Yix?G*W#Ojbo2Y|7S~R!ItXZqBIA=O}i#a`k6rMF-sE182PtB|*P5f%4i^W|!pNDSL2I^k6kukyC* zD`An?p_5g@$uT01kI%(h^zkwjFm;R*P%`^cRif-NJD$-xg3;()TYjV?xlp9TN1~c= z2$8EzS84$1I4hHmh=+M)E6F1<&;(QxGjbU@|89Kt_x~OB>+K8Y{9y41blc#&4MVGL zzl3+G6T3fq#@YwL`j2Xgj8%Fd#xO4pwQ>?Rz#{K{!%JsU-#E9ty0MY6sMe(?tHxE**rFopfNKsyA>j>AZ|_ za>q?#F=(iI1n5ORXShjG4i|701cr+~cp5sdUxm3^V72V0NG}23|*>bjQ z+!1XYd!y&f5wfz7zzf3Z^3onnD86I^Aj2Q8NgfSSJ1`*!GJH(Zg<1C3h+ATkk$c%L zY%FYQNARM?YPL3i`9$Uzd_2#yNPtQ!Aaoru zxoG1es^>Pu3|hI(-A=qO3a2^kkp$DmtaTqpbvcu)1RHkMurlJ~aL34X4M-a@_KI(> zv{nP8LfKn2EP4$)TEi#<_^omZf|eX;bfd`E8^Ux2I9b>F;CR6gEbde+ml+dKvn-g5 ziSL%FhG+F_#Z-&40&{OL*A=e!0+uknPj?CT8zuc}H7B#h?sh8?*#*$R+n<3)oI5yz#qGg8cD zz5OQei_)&;&!Vb{Cw>dHj=tlg9dRt?C*Iy+tq-bNq&V6%ZL2r4TwvJ31k)dT8fqjZ zdI){(e3SmN)xGpj`t8;E<@2XMzkUw=d{=1SvH$#u2%7Yo;Me>*?b|p{I8w&O#E#Hn z033YwC?+2G)`!Nhs&WLp}Da%xv8yS<+^a`lxm_ zp(Rm8fj?8<&{>; z^cWQoRvE6@9bedZ-j9^2x~g&3h?#Xl5)_aqTKV+M4V0Me$!GBHD;99RLR<~CRu-v1 zn)zxPK*A*Dtf|Ejn+X+#PN1P=5-Z5@{hO!*m}batg6}fvfm3~cPxwCY>E-UOXsKYn zT`j2l?d7&(!Di3GD>O7H^g-aVdC`}}et%V4!^=`v8Q-@P#y}U=M$AoXE>A*sVd4(z z>vGHFjVpepEmy+03JA`W<3}h(Z(^=83x9Jy#oCRV2Xi(u|CvQ z);_kjl;v*t(grx;XA|mPbBhH~_>UVF89d^(2O1W&JyTu$<*vA;`^)r8h@E7Xlbw08 z?()k_;RP#!8}l*Scx9NV0u2Kolhi6NToPiTC2a9WeO}!be!)u00$fM6b3N*n8KIVvH6d&4m!T8bfeHRGHKw}b+*imz2U@>Mnt5_j8K)j`RZrisSGoGa z@7&79H_jO+oSEz-+xO>ayaw6+j72PD?DOx2r=guMxDA3MN3Fau*nY`lzURl1;4bw6$FM`7pCUGHarw)htc>*c>cGA1GQ@e>a;3gimBv z>6LNULyTV&2Nn+?fn0V!DZ@XAvzKplJJj3%bJn+;ei!l9qBcR66kyz9SB`U=ESRwK z&%x;bbNlmu|I)(gP~oKO3qjOW;(5z&npD=v9kj0(dk@=c;buhFnw&i2`97z1yrg#I zajAdY@Od+eY(rTKGl;y^1x_Ne-Fy?&qNiSfS7?lAe@}vDY?g;^y*|PFwFiBDJ5V9i zT3u8E1(KC4C;#N)(U(PbQf`pjSDDq&TU6B~9%7wUedfRt%d8QDaL84yx+Xm8>4%tK zEHp~w%hl}u#aQVuo~XNZ-nZ^Fn_G5v(Ejd^T6>elv+5tNPuK3b1t7gU@P7kf35Uub zGOn&|<8{UTKQtnEu!Ih#NgbVmmEnH2b^z5S9j3;UU3Ex(4chcW>xo(WS(fE)Fikcg zb4}}?kv9SiUp*gW;8}eEdERA~t_q!sD5){CYds1bJ!>6eFWcl+ zm5I};F8G(vCUWAAd0XYw^%EfK{Jh-~0UKCY$+&b4^;#FmVZWTEWm2oV~nG?$Ev50k`_in(RT-qsnf^A%A5&#cIM-LOJ%vZ(@`FHr1}l!5UZXbz5WrpdQK1S%?eTb>lC~FhwlWJuXRA{ z-ww`Adx-{A<%_g+qPWRU_UBHEpJw5E%%Awug7TlGuHUddt#0V9jrSn^j)3$~|@~ERDHRJI(!E@bBs8+`kXA;?f1LT)AdD z;guFnswCFTiUEnK=ycncZU&WZCURI!*aUH4D9|`Fu0uj|%k^euu8;KA!wc8fdFH}I z(%($pQ|WA{F2~{6`rOB}>z!=;81_t^dDfCl9KSAJlBW7Jm>&p83HV7&yp>ZTSEo~H zPEg3+pniKr_SCW@5G~zcwz?|!E72r-`A8!vsQG1uEb<)MGkj<=dephcJ18$|rD(_$ z+~O-gu^x61s2KMuJsRPit_%kib5vn+4tI!}Fu&;7>i;K$GkW6JO_{z-ty@9(%5^y4 zM6H%x-?Y(8w3JId{e#D%a8Z|>tCc9DFcqAd@X1_lcsj?f!69YOYH^Ef(9R8IYt_n} zpvk}uR3~5*sKurBu?m8I-i-6H_63o5NMGZ<%|qw^s1ST`$c}nyPIoqr&{V|;?`1AzEz@Yp3p7&G~E5D2)D(AS9 zF1FFt)?l*D|twjO5{E#YVNe5Ae-6TCGq0yj5I4I2D^tL}j+uB6CnUz*}e@Rw>6x znzL1_GDqFpVHY*GXv6)`EO9S(< zmC|~;`%I!czea*$NiGH>^!sKx-UJdlQFtG)08nuZAaP~KP!iUq(lu8TY8TaX?6eKt zD?0n;d=|T4{R5&}D_1HtE5;xaqY{OFB%+}OBEJ(zH4tpjl;g-($pb8M&`!E4l8WeD zJ|ZFq%}0T$rz3i2K5^x76Gt2Mfwu69WmsTWCGyZWQ*byTGy}6 zsqMvy_XyGo0h{|zI4n!=+^QMhU#~fA5>IQ+>2ZC6Zn+$d@B5^<>;S>Be8;W$kN4q{9J+x> z+~(N!)aG=9NAbzUjcQ&{#GC(40BtzraEsZQ8ynYJps~3X2ZTcOziZH>u?T5vRTvoS zGVe>L7v{eY&zfAfrILV>2%3Yi%=1V$m; zSd?K*+%i3Wxj{mdafEi>6%&=1(F;P5f1db!FBS+`!)H<1WeUD)GOB#y`Jo7^TPSEb z@>%0E&E&WT+{Oa9 zv$s(EUT7}JZ013{r`ClvqiW0%M=LHp3`MD4EDYf*q6#68hm9r=Xg2K0#ml1lYscP} zoz_Gmn(XQnsp8sPU7YN;KTi?I1=5WlR!Pj&x|-U#AKU&H3!$CVZd73=TQG?Rj;2^* z;PpAu9v$d7scNAB>OxRZ&x12@O!jNZ^(yopGzsf7PcU%#il9^$iSMf?}1O>Z-+F0pm% zl#$<$|75Nc+>K03?(`cQE&A;Zm1flz-{sm9%)Y+uBsVSa?XMZaVU9^$)fR#}c$mf@k-o?aonU zhin@T_Wr8q+WeTCJscE6?kAQ~%d$w_NSl00h}cC^(qh2RuhmJ$lkf38wZ<~U*GkIh zl!Odd9V;GLzv5_uS|`{Fbd@X07r<~hGcvL|skI&7wR&a6qvVWcHy8=RzzcJ z+_7dn!r#=}PEFZf!+ag` zqc%;V@<}PuVvA$GP5K*up347uH~-)#(uT7LAnB{oRoC7GMXGADFaCaG(l}P+GgY00 zPgE97|H#>Kfo!!n-%%x}?yHO!yqU;!QWI^@syz~@J-*T74_{Vyy?HKjbKeTE zc9Iy0i%9FJ>h$>h+>hHMu3 zm8n)G)AT?qhNZC%N93qY6zC;`#Ic9sMJ1H7^{w7Adn-SpE<-laZ5GDSdWgiYXBT=|}_JSXRMbk&;bLt}VjMP~ni*zd^D_ z$>>OS=9p*0g`0@5tc2C_xyEiP{$|(x?smS$Br7nRzZDag42pI*Q%|A}wCfsIg$xd_q=hv(I8zLLt( zJXiJ)6ir#x{CXiiFT6S<(TU&2({r-4NVWD9!>05H#iU<6 z6ih#I)28C3mR~9w&Sjspu_jT#`{X9LHA=I+&@F5P zkoB03B>IFI@PpU=RY-Vscp&&ni~_*)HJGR6gMjI=Nr^^x5~G8N2U7z?F@*#llGA>y z(|Q0-xejQ=B^y_vbRWrgsyFlUz*q=6#0yHOcLH7K*#6GKc?S|M0vimE=<)0Uq3Fj>v`qEsJH-S(a+e-p(}D&#%5YUj_iHS#z@kRn1!dUN3G{$a55vFbHrJ(Xp`6 zHF#%HO-A?p-73>OC>P;~3YDIM&N5S05{rVLSM5tAn>B?Yg9ZP#_TJh5A$aGau^>&= z;d9%F`;GMYYxk1F#rww_`)#-uPG-|oBrGfz`c6iNyp}yuLJY+Kqh-lZ6=eEM-ZcyrFwnX_?#SF z>jPp!E^=fY$^@K|tIh~oV%fbyJYqrxtwB;cXkyEGjigcwUl@s1HD1s$+cE8w2_>O9 zB0&8e(q!EYvN=Tte1;{FV{i0YkK2^h>%H(^kC~9Ec*&i2!!H-6Bi=fRT@nN1rF}bJ zwJIl5NjNV->iAxpGYn}1b_;Z;?pPd8CdqpV!4FaW zA0FMD%}x-u53n&#+HBodWpPDSs12NLjM+>3%w()n5pMQZVpVMZ`6E#hMk@yMJ6L}b zD6l@O5S6a*zE!5fa`nP=8m&Qsjc0gvmNg%(W?jJv)KLU<$^q`N&5pa^BB!(sGH{LA zj;V7Zxq+La)W&0|N6AEEVJHYSWt9zcYLD^_-}eQbp$X`;+pO6~9IUIJVbsBLK0Wkw zg_PA0W6&}GI;43r_H$$OH(Q@ACnvkH!Lh!MGYQ(!#bb8!TS-A1sleSC8jWq{I2p7( zeXDf*4S-oBEE&#>rFAPh@^d@D9$w4 zlo8m9Dt*1S+1EsFI_7I*s14B?WpuJ+&{2{mNGXHX`)dyjA-+;#v6 ztJ-K32x3g@m>ms-X#nL?RdqH%16Op`Gqu8q9v16095CAJF)AbmF{=*^g=dy$+#x||+)f+F$h&o>ofRW;Zq(0fdEif-kN#n8=6 z?~y260U8r*tw9X{UGpc4-*DCeJKYprsUvjq{yroz{0nk@5hV`EJ6NgUP}&`jV{*jG z-wpbJi5y>5*I<2#~ z@b(qpemYCs1x?<)5j}9Zo`_yuk39*XYAYFSUYEu*XS9Y3nVC;|Tw{e+I-d*FT~X=A znV1XJ>h$NI(}y@G|2F{YVaVbzEDFpIPzf|9hmqk(Ih!eOU^xI@i%nfjRj)+IvIu>s z>laY4aU>JL`zvA%0*L-LTZ;g zFeszYtv2+vRMmWkKIW-ky)uqjyee0^rcg~FjyB9e+o?;0M?hkgrbbq7?`Y_*8s+Pf zn}+`4-NIx%;Y&AtrGAMton`6i3bNbX)YJMBJkYN{RkyQGk>N4b4xJEp`i?N#O^Q3{ zUD2Rpj_}kNRY`4Vo=&_Ew1^%}fXu*gE=;VsCKJp*s%O8_a3olv^sM07UPQmvc5A4rd>T%4(iiC8wabdPOJID~i`L))?1R$x zXG6#ObDZS(Pic#z*OI)yi$(d1^CwHe&l)GMIvTHExL$58Z!d<-OI_(d8@KKV?hmag z>_QvRSn;s4IN^l#I#fJ|VyI(}KM=>yGNr0NHn{7{DK@Pc7|Cxy_u8HdP6REbf= zCR6$kb+P+^y@Z*8UuP@1(=5vinL}sS2=g6Vc@c;c;i_n=;^B0-G8bqUj~@z-tAAFOqE`VM(E(Y;+u_a72KDmZ^hE&|MG^2^6HnLlD`=aTY?RVBG| zvt_BHyk}>XrcJ|Cs3-nrDhjMIIby==q)L8#TykAEtoIns%8jp5w3|LOk@U8Su$%dB z0CdBU7xkv~acwL|=ks86XgAQod-ng5;G8;G6{59+2{V`@6$#6YXp#0GMa|? z-jBmSlCL1eRdzpTK#> zfgk$&d)*=LH0d;~^CJ1uT?K&5U^Pw}Ib7m-YQJiehLF<5xPoq~W|hXH-j_80V*hf) zHLp6>>DhF!nMdyQq1d<<`SP1CWvEQl>4e;h`VpfAv${QoYl8ZzSA5O1Mo{H_#bg3% zR7}h$_cx83&Bx23zxu*X#)D)fmpeO^K3s16ru$vZO+}{vLZ06ZdbZr8Pu_U-`qGx@ zlp!DJ$!Zb~rZ$Myr`TYHVkmhM1JXm8)t*Ex!Xif=6jW4sE2AWI3vG$hJJ%*lJIbY2Y-*MHvcAV10dqIQ!OtQGqseP zS#!DB4$WyfLG%~ismKYkg`;)_Ay>ZvsO2nvT3I+RZcqIgl21MEKJ}+0O-e+;w;0=*p<0Xz(l>jv4#sRR8z#+PMNS2KJp76IUJ!n+ORY; z1(B_U|L}G4SA!m|NOCl0C*s#bM1Q=L+f-ds@KfdaHLX~d0Z404_NoF_86&;B$c!v& z)UeV%;h;dVVkbcRu)^>pX|6=zjxX2#3PvIwcNEf~Rjt zuV83IGx+~=3l#LpS~aGsM_S3Zap2U+WVQ9(>t4J?nX%btSuFb-3|bsaCrue91Qb)P zRLj!k*r?M+lQJ6-)>Im-WK;@%0kDz{q_(dzk=fxcV{XM1zwXzA@HyA<2x!XhBvFYW zSNr|V?RT)2I*?AKT;V9+xsak*X^j1dUjhbw5IC(S%pZLZKV$Le3JpvO_7mY?7Lhg@ z>T_K^GQQUv77zggGBV?qauJenP!ttelyNf$pRYXjPS?^iiA&Rz%DKkksH<`M{&Ge&K6|LFv9y?EO?>RyvP2e+%9U+Q8 zYKHUZ)a6L*biQZ*}U3dOQ_C$t=5B$;3xhX+gs?CTV|TJo+5jG>!4~kO>PFsW$UPk_k&$ z9|NBuGU^Uv6X}@W`+08bJw#bo7TXfO3^y&Ak5M7k*3puX5G{>^PELUW$Al2(nBmAA zMc|{q#VMdWNyToVCsv9qB6oj5-@2-YNIF`RZ;G_4^X@9_qY-B*H zTXq*DB*-9Dp4F~VjU&&{C0da_jL^}f!XFvY3S|b(EHMDBl_;<-I?1!*8)nwj>QXtl zuDaP4_*z9P8hF<0gt9&)suG6wZ2xZ`fCdgpN_XxuQQa{eDjEVyf&oREY%ob)xg4vV z0Bj$?tw3s>pqJXMyjK9XeC?)VO=Bc8=rln<9SIBg$Yu2{y_#I-jd9H)V5=xyrPp?y zj;-CCW5Wgr4c%Sz>%0SKQ0{s8L+bu%Hwa~_?w&T8>k#iyl5@}v|6zU?>muRb*oU9@ zHBeW^8$)$VAjQn~`*T2_B1g~QX(A1ziVUH096>R)ZbM=pe|VSSx54B7COcA3-%=bq zT7E(vjGvRu2X&#((FzACpN(}ErYNg(Fc>wmjNGjesiW)8RG_ttXG~%Q z=};bmY0c#n@NdSWj^d6xVY;0XO+c&pxJ#ujAaTNrcr&E{(dS;n*NPlpOP$!xn(sTG zsw!h4i{M<#{?}GJ75Kl}HjOPwR6@r168b#pvkOAgIm(<_!kGOJ1qtm(0|ebc-1@yE z`roSOq*8vBVlN%t8_eTT+EthgbjFjXAyiRoqIJfMGdf|cO!y-a zst>tzO!{?J*FeTPDx4|gbVg?xZp$=0v6@&f)9k%UlTnTDKl<#{D$LTe(rN9F6RJ+1 z@^LB8tZ+v!Qp%8fF{Y8Kw&^y4)wR$|r=_%h-e26LpM=E%xpHv5IkKbP+^^dImHyw@ z_y7L@Bgr7dd49xr*SVdmw{hQNRAC-$r_BL3YS3dCi;1D>bkUI!n&j-?6xuIAvYd5! zH0?@;QvY$A*y}x@Sc6BTh~@ESVL@{q%SW|dJ3KjbI5Nu)3MyugFai1sec=y|IV!y{ zif?k4t6tl3^Vm1DVTbIW2cchY5i@xs`7u}O`=}Bn{Dx9*FCW#y^rpllhbH77$m7U0 zv^mh}l-vT(&SSv=#@x8C`bH(hKf6o7pLuJZttJ?^_Oph*KX|+ScLKon0UrG))?hoq zTiUtZFfNdB;|rmtBT>jAyNX+t>9QsvbWO`0@T|M#)pJhA|jFv}3^7wt# zPz1c7v)9lRe%zGH@&6F^RzYoWZ`3bEin|7Pcc+Eot^ooB*WeT{{^Anc3GNWwwY0cH zai=ZrrFenTp7j5HH)qbpxy($il6hwDXRoz>YaPa<>Vup{>}(=N9(Q)!j_ao;rmJCk zylY#J^k*n+cRT{*nq8=WH36I0VE^VT=r~Mpu`S`qo-r_Q`$GZsz+)Dm*6fM2hwqU{ z*{!aw#S6CJ>WMlp_?TaFdN?l`-RBtMG?M!svY9b4b@TOHD#Pm3kmi%d`qS6eXBz9O zj}Kb58y6;!XO;Kq9G|{%xh~fKJ~xm{Ky|~RM(RH{XsV0KP@}ZbP8qJ5sumPZ8^Wc` zlNfteE7571yB8%&S)=KJmT;G`fW+RL)_uxKlZpPKgjV_MdPo~?R$Ej)$6cKJ%b`~e zQm+0=CDeF0tc4;qj2_053)YU!X=A~nQ&4KE&O}C?7v{jHGHdblUhXJ;AO#W>LdPDlgB>61RNhe>YFX%AGj+#T7 zro}hpwiLDu|4Qr$oSJ}Jbgzee&k9BBe{Fds!mDIx4e$b#iT-DG{bB%gDpoc}hQJop-Yqz_}EE?=RlS$Y#YBJg_xe=-p(+RL6)ym8y zBTdvcrO#4AkCZzF_zK;*wZ7UzXPVezpLx6+3)<yVbnFr*C#x}WtR3ex z`Iufkk=QrC33d0$s7Ng2>zTUqJl>fSa~iv!XqbUJ*3)o01t1?sXZxZbEaU2>pWdo{>Mec0|;zjb1;#%<~R z`{BR4&WFoCH*BB(X8Idi9Be+aDw=BY`tiXXM0lq0iIC&n)MWsQ-_NvZ?Mo`<=@hhU z2y5C0SghLM8ha-FJwmI22FdwhIy*N4 zvmP#)_c?8k9oqLOLn0W?-%S&{0Pq1dl9lpNts>w8fiK4xlF*;=}83`61g~Li4p8!Q`Y}cZEdaRXUIybO#gD$$M3_4L+*itSW z=BH*sG-?gR3W)2gAmlHc%`7ip&;|KV9@Lty#xY^oZQiwCKJI;bpC7~oQ2r5=uzI(1 z$`7v*ysyQ;Wt!$S9^FjVoJ<9tjG>`wH4fBsIdzD(Qadp^Vl2Kv7skErRbuZ%Be5ROQVr0ax%wQ$En=_Y_NF9yj zfmZL#Y3q#kdW9JrtW-iZngX2z$EI9GT!Mm*mNzhqKd^DOZbjYne9fOg9Gx4LIkQpljSURQ5gkqk8 znQ6um%M*qwm4}&&ZSsOJR&lu*;w0jKfD&80w|FMdjUxanDf13Um}ka$bkspn?hNME>e{^mMA%q+fRAkpk3c%`D~Z~eF%V}Zx$9zqBsy!XxB4|8>0 zMDA;jN>^(tr)7E5wj?EP{z@a|G7)=RVWHVrh~8bE15~q+w@nqRo<3gkDQW>HEe{=F zs{bY`Y(Z#P0~4E1!LqpYmCY^}Ryn(^d(IsOnF1?LB7V6FBfWlXD0ez?XDuO+oRND0 zh3y1OmVT`U!z9mPTjWc}*J>{1nps?Bh4={^1&k=AU3KcuFIqKcLeFbo#muVO_{_-f zn1rb(%C}gB4?^nYc3o0o&N2GMb|{VOV5Ho6)9C%kEt^O+T*c&@upW@95HfCPj5*3nAVR6CghHsjZz2 zU_VN+S{=!~^EtD)e102DPpOMWvX~prBCXiF$b$(Hi}lmEU&uO@tC=veq9M~bSF~MGKutgI_awv^t6*qkAM79EB9ZHPEJ7* zdhJjZDNa)Te*E-1*t;(@ z6)9GggPromr80#I9}05hy{I~s=gbRRVMxO|j9hYv_{$BF;O`J7C2Z9lMje#fdr}^q z^wEu>Ht*iU^!G3=;8ge_kl;>M8gkAxr({-k+d8N?uixULrxGVR*Q(qNk6u5-qRx z%JM>wZq&@ka95`UQ;rA3Pj#g#QQ@MVnsNB{-mf8G<8ZVwVQG^v_IKuTLyA@SMUrNr zFhRKFnR;H!wrT#=phthgVAyFg14T_%&3}}V<_Vupu7~Szw^6=)_}{{bD`LvF_gc_p?3! zxCA3sRR0L)N61-}mfgI=I2Mai!BUu@+zip0IVQAt!mR&oD#m)k#G2Ns7ncgJHNh`| z($A7)RQp!eu3ntEU$wFP>b11WjB|9^vO26|8W$#$wNw-F%BH`55lQTX%wQL<^(&3A z*!rlLfSjal1m_)JpG@X&Tl0Q4!qZMJtaI9vhz&DdDmV0aR1gjNLG-Ln37=eL&4gn5 ztmT$r={LIVdT|4-?+FPQ7_6a^yU0Me(+-l^?)WQyBh0`e!0f@XszPXXKndKm7e$AH zXf8C5%JG#TW`b4x%I*actI@CDLXpIl>R1BQUm1S-hLy!6V<^Y`;2j&s9FA!$i?fSl z_@cfSlXY`B*iPO%!!8u*)T)>&P-F%V3bnrV6L+%K+p3{($`>>Nt(CIMH9j} zET-}A1ds@Qjqg1EuOzRr29XFmcLiW}{v*Q;cEbN>g*Zp)Msr&9f)K0|Ib@BX4Lw>t z=vTyOt?ha)C1hu)b+O;PtoEL1Z<~Lep8lde^P$6@E#M(<*8BF-!dd7AZ5sicbQ=01 zO^%Cy)9l^Dr60aluBCJlc{_aQZu_2lN-mJ2HCeuqD`S{=fhE`AUV2MK0>jy}=KF*Z zNI;KUh-RKd-#YBA=bzFc8?Bz$=TUygS0ijqten(z_R>sKEp7J=GPxgX`XvR&|a+CtcXz>HRb?_9lQQ%y4dP2J2WWdPcXdc($`vwI)pC|h5gPRt=Qx403M=Q@sMlmsu8U9dBSWXzwb8_8tuF8zYqH-0F+S9 z(h+@eecMU<-6*DXhbyl)LmXCCiX|=;SABX0&~NJOGqOI}(5Sh810alqx&oY-M<~Gv zHmHOYw<`(D|Jn_;I{E5otJy>gSS5`f9gYb+A9U^$zQC}?Vmtd2gg%oCEEzz_D60o*>vdEz;|G9p*ftl{dP1|NVcq5=4Zn~|q@I${~ z8R|DYQlK#hkIHT1-x5fiSB(`LK zRMjQR$_za*yInd>M94#y;Yb~On8Mqtqo|s~A2k@_^gA^#t~rJKlduvPAqjC*%a{}eW%74&pxdE%U6eZ@GhIoK!0?T`FQ zFOLD#ME1UbtYScba!O`=&GDHq{yF4h&j0Hv2#qTok*D>xeXzTvT0@`!j{D(^c-PgP z{GS!lWY3(eEg4)+S8h*x7=Fcw*DTIx@vZGi#bb;2Mi2`X(p7=!<)j+RO;vsZs}nj} z+?|D7M$9&8S3>3bkA3|s2OS=)C%sl*c2BN-Vu7~y^0E1d%=RMNse4_Uii~YY^dT?f z4_+m|o*1G}bD!CBeSzPMdo{lqjt)LK|6G@&`>@hp&I4}nId9E^JuTGiPP?(wbqsgh zYpj&L|6b}Rg5tJp_~yfeu}bMt=YseO^x3Cu>r^cQi={3ct)`HC=9 zIXd=CZe=D^lIJtg)++Xws4x$7!cMe-ED~rG6OQ6yQcnFlk8D)0iUAIP9=yr2;^UNc zwj!mP!_IPNOO`Bh8!~EYpAqNg1slTUvXPxJK29QN0@pz0VsK2Opu*-&S5+A@|?H*U{E<=SLltxSnqh!L3xkZe6!O9qq)yow*XOous~z z+k$%EYA8FFx4M;kWqBnygwhMsmLTV7_7fl@so&s=iu8|BG45swv4*5cj3i`Xt8*sk z%@XIw@hSsR->%K=;aIvGy&HFm?zNwsq6ey#n~ zTDV5nQB|`Qr_3VDkMQ(Mu)N@Y*BERy%xN4wX{#kBOie~deig}FUb-jZDl>Y=M~xLf zRy$kQXYJ*zj5(M^)-YH@l)b6vl}*BCGXb^tbV1w+j+#?5%@eml~JJ@ zJ*20hCa%w~w~Wy(dnV?P<5YO&|Gcl$ZJzyOiR@;SWVs{5)_cmuHy;UrKNq$@N=}JO zXP}nLb?a!8K+bB=L6>$-W6kS=p?>YcYFF}>p_?9~iL*t-e zV$ZhAtdfEGYg2DXmTR1TBFtysJxQrvoSGQzlOfS6c_i?*<_+x8Xeq03f8}BMO#aac ztMOngso|~n_wQS`b$V=N3Z*rIF&uP$6MD@JK_ioO7IWh8EihJmtKW*?kmi4$PvoTc zy+7U^xc^Bqsr6-ik*~uCb8$Qa8)h@{0;PP?;+9ymGGA(bvxz8^wPy!!Ufxzn<}Qi^ z&eTOdT>Ogsj-^PII>wzQhYr(Tt7>+WGpc|MfXGngXtY*{Q{z-t#Dl(EFvie!2mH?q zM2dtOqo@9l4432Nm?(APN>pMcfY1SI%sDC%J3#vmGVRccN9E%zDHoeucGf6NyVJJh}^2*)wjg1A?a6{q5Fy>zUgq4g0by?hJY3dZFs- z_w#%zABC)^y%_ex)Sz!w%}XpXx`jl$9B`$dvRIm@nA1(%#s%#J^&GUU-z44XOyJ%a zADkY>di!RJYvC8qUZW;;a$jb%!9-$k8_akCuy1vOD_nz8cAzwKtwG)6c>?{o)Yxb= zmkJeAvV<6A!+3Vo6=RkhnR}SWA}5OzrJ06cjpjgxdyqOeI11&MfGJtrJko`S#RWFi zpdhmV&0!Ev6L=NTPE{*{B58X{mi|7)TE1s;Kg*S;J^Urkw^(Y5mfpLGqyn%s zkYU$}#TH9XAi@ueWGMbE%Z#Gu*5j1M`TY@N4>{O&QdstIk+%g|F>cKlAdAM7kcyI+ z24fi^Qwc)`3Qt}zZ^a${2TmzbW$S@Q@1+XP#=IB z@Es*NQ8hVN%;ne;PUDYD4QWEkao>?NMr_i}0)o^swN=K2B|W(z^e=BJFEJynwF%Ck zNyVdlCsrzr6~2843!#|r#C#C@*HuHERTIZEY2tVen$%Y1%6PC(p!PSBwG2e8h3hY^ z%~k>Sl0rnN!oft@BPv?nP@M#7sa&=vwPE~+e8UzfxVrVN?P%zW79G@Js00J*t5M-* zq}4EcHwAvGey5PoQ7ROxyyrz#)#lO*$|;+_F8Ta1ifOsZ>S=fJdq|WlkUK9t?B(iW zacF;N$JO!JFHp(ABlj?lUoZjCtm1q6go2KbOMle9g)|E*EXTmaKN$i~%a+yS?e<*aYr)rkpfwYIA)^_0Mu%-h3HpvWQkg^{ZSl zB8M|W51c;9 z$mAi;e3FakY_}Cgbz?ME7j71_aS5LFb)KF6+q1`979Vk4Gj&Zj>{>a@EQn`C4=)Ys zrw`u>{S|oWxiop=N<*^y&Eam9sX3w7cH+n%1i!XxYX%@6zF`!q`O+fn)CJo=kSQp8 zn`x>~!~nGykvVa6G2D(4&yV7*I#D7ynZWe6__;qsgXiWbO<;#|M`gnl$^3D8$_F%P zSD2ncDU#$cAjMs^SnEz`N$bFbYV8w@E8ONld zuez!2IfURM{`dM%GaODPB$XG&hbt@ak9#_O8Azd~mMm7#On!+D>*Bfw3XfuO$h&J9 z)#Kv;zrHM0h3fFeeCUc-wGY5SP1k`%w;q>)TLk@*S^Rj9lZb>& zRHg}?2p{RE2&UF)Dv9<9lTX)dt;U^(-;zvD2(qNR8a_zynFn^Y?SG_!31=6{>eYAK zY~?#*FOQ@}+Tfm+>-qY-Ullmt_pD#{>ivCQ+nK;gof=)6Si5~UKs z$aAOr__Wl-{%{pjMTHBI1~p7lhj`(yg8-5SVl~Z_K39Iw} z8XET@D{|ouAG#T%G3c-iTORR_-4rs?s+gjA>XeXWu_GfS;lZ$Bn`i~3g8mQ#cJB%qzu~3w4!X@ zPj?O1v5TLHNg-$RM)Qn+ERSb}HpJWcQjLttzz{C0>y@py##gD8%#}p5DM?xHuAK-{ z)!7VP?yEpNx0xc|y*{t(!*g~#6d0VMIhI|pyz-Ao68-s6DA!_T|S0}h$;nL z(R?9MOV-RGjQzp@F$8&q1KUGW;=)w9^qe)=EtSGbQC=TKI1_c0Dzav5Cg$lnlNpqM z)l^Sw4l;CF4gkmU;_|6!FC873n>YqdW!M}RvIKt5AkQxR?{EFY_J4n8($YCc(Z24- z_sv-AU)sM!qfa}T^o06=@TGvmsn-lpuVC|)UVA2DdQnCtrC53{xp`apQiE9ZX%${a z!&be7o!2JHBI^b;rU0CY!Lo9{>Qmx!DWC!cc;*$FI;*6v4GXy(yR~dkQM1ju4}_k1Ovjdr36|$^Jo#;?Hqg@I>3=Cwz;gw3cQQ1~^;oN1R2UdQBV>^%&#L z?Bi3VzfVXYTPXl_M<|sgr6beCyJ&u0Vj;nc`zdP;^!cl`bR8XUe-6v@J^ZYjIm-0L zhMNg;!E0)}y9$U#niElE#Z6^8qK%JM=NHT7xs#iL5qB`h<_EdqikrKHtgIWq{){3wxXL6NvF5k-C|~? zmLfDyCo<!b?Z))|Qi$DetKMvjvh4fKF*|NDFV z6>i45nf9uKdu;8-+Mp>}ud=R-QD6J@-0*LV5w4A^S8ztAF`W)x0DJSncxD)AJW-%o zmZy~%+63z6okx%{S|V8zYS#7(xg>Q&!GbLE3n-Ry#P(=@2@%+p<@nBCEF4$~I=?oI zN}1TJtOD1SJfR-e>j?lSqISNc{2j9LusQRbj5mRmM)7wnKlnM_7W&hfl;R`JxkDL8 zrr+%#I=|Q`$T-^eLlcRM$&>ffqOgNb;>e0>g>`!NS)IU#mN?KfU=*OevyK9LTTZWI$dfK2OKAWV6r z%#$R0qWEkixS1Y$^A5{==j;17;MzQ@f_Jt*$|rT-x*7XSgQfqzByT^wtQc->e7Sh| zDtRIOeT)82-+zbCE_CtJz#qr|uPyig=K~`>qk6)tQtXJj2#lW+xDolG1AL8nbBi<{ zv2B$4Uhine8ExciUo-C?>;S4YzKlUV?#$mL27oH_zdQYiTjd?f&G~aC3&bEwO(P65 zHE~E;f2@ndB*2#V024&TB29biQ_M^xoH~wA+d_6cutP|ZKZi_E>>mvy&XHra9GHNI zGKj~@wZxQsFAIqBt5hnJF;&?eni&2V=Xw29eg>#k39scncpx29e*Wog6!8vEk+_BDG|!jQjWEL*Zr9Q&HzNWu?KX%+SeNc!UjC4SK#P%W zXW<+qege?%SHsf8-^J6tpKuxD?0~!@8E#?FQB`I+ibUbT`LFMVxF97V;f0_f-(=R4 z;ojWS&V&%{*Hj6t;?AT2rQncV7_>3ECI7a@Z?)M|i_f_S>(YIF#utFLBSSv$Oyz>XL8~gJjEMy z>WWL&NqT7KSFQhOdg4T^EJw(Fg%KO=VfDnqd0x5~z)P(E>HPHrZ_0Lb{Em|8q}7W? zT3KyPGN8iTE(&vI79*P_Rh2Rb#2)C3dBPyy-8%NccdRBkot7_}iOS%0&Ao9Vt*79b zP@a&4kdV_~!w&lg$0DKi0;%*O?bh^O2iu$E*6Nm!pyt0h2j41?!a`HjT{UGWRpgok z51olDu>YWyWDPm->Jw#S76&!9_u=+Ob)dW8r@ak(UQk=ao)bJP@nLQ)4gaw z(5wgOzxy-VB~mzjtUCk84$MvTl81R;2ulIxAF^8QcT3Y-dM}8GW=cH4^LvgL$?%ljiaPJ$2ij#D|`d*HbcvTxQ%`UH+6*Y(EO;Y(6yo!OOc{^@P~-fMM&f zoR-bMZH1e^|K2V_o>8MGMA+5THy&Tr_NB>Cl&2!#K@t4MdXbMj8Ny{QE;|(pEKA8G z?`j+h-)+R|X+&FpSpO`@8AH?X!k8jGOZ=>F`3j$1^sxr)V2A!n86n~}FUJzpai!Unau+HvsRD zUgIMgV(`^HhtDw(bZ8eN&A5LB8G|P+E~Sa2;R-xuTW_V)H4f7tK8U+Ug}!|mx>`H!ZHD|m@QsA?wL>T{9BllVmgj!ZEU zhwx$lS_cj32ik*8TB9H3r6I@>OA?yPs7%+l?8sJJ%HfTlp=5-iTbf0fkO308*Sj>2 zkxt|y>`r7Q^7S-MY3rsZtYj89D|jhOnMJ{`9LLckJHRal;Lvezi_a9{@Zkq1p^>F$ zg`H7+3n#jQBnO+5<^hp_((B<;qv((UpVl2r%FJ7bny$8uoBNDhKBZ_4K`w+@J64;v zBWhDP*P``od$C*So51bxl zMOZ-m!#0Id&QK+whG`A&yyWJOd7^8{ELg+xuHuTvd|^HD?k+&Qon3s&%Q zYV7H0_p>KIstK7?SiGjAsv>!!kc5yNM@v8LeXP`y{r3{}w@x6fm9K{ zIatol;!KFc)n7eBY_!Vxq4ytfbt&sR1P^>0BJVBy2z*qOkK8ORzPO)Yk8zVzs8aj= zTq#y_qoU6P5>6uf98aOXvQc2V=1J)~sZg)>19G!kk-Q$~n#LNnb88VItr#uJ0%d?o z_BgB(KDM+(2RL|EV)3u1KE4?Byh!E4>g^95dpp))FxVrkZsriuJoR%S(?tJPcL2gv zSxh9j;9B9*YfW^9&5)M+$LQ*7~weq!-C|(HcSLm z2ebSg&2$e)pP3;Os`Yr$R7cE?kUBPSbcMBJhQdfw;{OJKGZc-*T=fKT1u8yult6^y zNna3|V1dNa1%wcWD9VOO1~l4O5whoYSlQ*)fwdjSmh3>(!rl3Ydyp9!^HnpjNyq}+ z;r@otbGAM2XjNL-x9MwR)uhJsk;e2)3*vjnA)gCGYOw%94OP-*Bi-HVFjY_FhdYzSv$(~!^wyVdrcuK~w&jl8u zRoER$mBrTVgh*MpIE@av#d<945q$JC)&^l(DiWzE9O5h+NI?_IXCMdy~k&5>;I(LJRydA-z((Ue@Xxp;n)6_S?MAx3E+ zdX9uL)PREQ$glnxw+p(Q@ZJM$ORoY$;#rNdBxGFlY2N{RgPT7;-1iO8Aw-`5+k*&ya;|gKg)KOUdw8P) zhIKardPpCssI9mBAjYG+ZnvY)hN0k-Ou^8kUSS5GD4_D1%eVa1WUy1Qt0r}1ztFU6T<6bzJD620Zv+0XGz`5ycx z2{R+z%B-71*cVp5zFhb0oEg~8x?4efJPzZmELmh`x+-qF+L=141)lAfEWbSw0D^#) za;~PNM0I|f@rE!M*{0osmj*42Hfy3AK2I1K5tWjLZF6F9MZ0HuuC~;b?`ag>C(*CQ za9C($D}%65d5%pPirIxVU4cG1(K%7Gil&J7X(q14lI zJKqiz6|}?^p>chB1Cj|Qp7jk3Jnk`qZ~j#$)LvA#dcXU;GHU0y?&DT$fa}AlEblJm zU3<-^U+TS8z8&s}wuSU0iv2qQ6p&E&{&|6H95OjoH4!@iS%nSDzd%d_J98Vt3*=Z< z*U3XKNh@njPY88vTmY(%^jQg7a|*ktDani9DAa#u!`FAyCRVF9a#2ZLExlSYH|H)3 zpUL2%vJ>3BY4b7<|NW5)008^%vxrs+&cF~R4Mh1vny4xQZIUUdO7VtWs6$cdusM!m zqFN&d?x_&Tu|HLfOiadV?}414lHki6rYh$g;DiNK`~X*{bj16@RJ49~$GV@v)3uhM z8=(rf`;t(5SJRTNrm*G7eEy2Xfmc5CNrvj=ZWD_t26;0cR)9IkD5vwi8#uA&!7FY+ z#!n6Bic|E#PxEaDwAlC+m@2=qOsK?uWB!)2T2~#1(kRjrY#eF5U{LdyboL#2)~^`- z#N{XbAESx<3k;DddRL$sN=MoswP5Pg=1EfjnR44urv;#yh`q z{a0B_CCpwyckMKAEOSR%0Uc z|GN;Vs`qQhex*lEAr(_v4bF$_i53L17LUXVFL0KA3lAt_?IB$%4Rq7SUHX2T@5PA4 zo9+pcjN{56^=x)cw7q{1<9Thz98jILJQFtGKe!9z_7Sw~XeVeOW{!g%MPp1QCo9-N zlz&`*y?$6WHpHmHZist}f%Z3c?Z7?R>i17gqYhQ}74Dugmb0JflVogfxtM9Uq~+lQ z66ps_@Rp9L25G%moA>WO&s^+$Rn~gG?N+|j>@)oc@&cILIz51{{_hU37xX_NY=>{H z((clY9H#!SC>weTFFT1AXl|XGBHGyyUWU&3oZe_C8(UO;_Nous&bk|IxRwbe`435q z^{LOE(1>L{h+OD(p+~*ynx##(`ZE9MzAm72GLo|wHs9q$#&(@Px&Ya>KTkEvGt{~y z)ar>25om64&E>}Fq+75$vQEYm)z{+U@}TNDzBAy*XGN<@Jge{$rpQs1sOu7FR2eRX zz@jHBm)e?r;hma} zVl&WD7aP&KzqEKvyJYY>y$^pLyzZurRl9r&@rsp;R*d_d>pxublyBdV^`u)+%zpBH zCTYX@2A;8b?`7@*%24xoTaBcs$c#m!bllhCvhRL&y}tQ2L(X)K5+9X9$z?)vYIFv5 zgFD9|9zAk`Ut#bS)1+WC1#fVKO?%Z(ej^^z0XT`4H4En0{Z>dGejLPpYV6K-$u)&U z{1a(v#|d-WY4m(ejqc<2cr^YxrVj-#HdHHn%C@w%R{f(y#sWBVVkT#AxiO1}N__9A zcD8R1!=zXj z^ek&0#Mg4vP&7@UAa_4L`3%bb)*OTw#QEtn7dLqLTh4Meh3N5Z$7biL$0gfX!7T)M z70d-csu9sr$9hLLs2O{GfF2w0k!I8x{RbGqn`bByOoB$X9oLv8DjsOP@sJ|y`y65S z@IjAmd&%#MlmDgDq2p~X=&!}!2aIb@-;ZX!CYuCUEcG{RO-Dk0))ZMr(d7&F#~s$1 zTd~0{$8wpCGAiaxUpwTb#E8%@-+9eVcYO@^A=b=u+HBM#;MSmL2t+CM$ztc9Qgw{= zbyIG!ok@rF4^FfhU2()xh$$7{GhXTK{u=-U7R60>9Ki;)?5PD)BfLPQj*WEOEIgAX ze0%HB0!!~;Zx7*XP(p;zNK3>ylKC*IpQ={ z?HrGA0q7iwV97$!nGJQP#GDOn7W-zZna`BSvQ|SEm5gsH=sb!=e)TQ_#}lOaz2R6A zDr)XMSg0bvSXQ1AX3e1~XP4CFX45STP0XyfIFMfDU_9lif;KkD8FWfrnM6-Z@|tIf zM@^?<1)o#a(`xFHX)&hQ*wp>eYs~j<%oEa#rDa-HrO32#9a8N*e`TGhMyN(i=3-fS z*<;9Yfo~lgOV3m3?ko5H6^9%;{8VSFqF zu@d@y5GU`*8P=`U3dygfUm_pZ-{D}5)+@Z&zhq0jiSqY*>Vnw*`1I$J@8#EnzL?hs zuOKT7S^d+u$KQ6Q{#rrCXv<1WYWsVPJ^y&_Ud4VC@k-S&=P(uQ7m}L4;EZUQNWHSU zA(p>sy_P>uQ(>+(!0vW2ZJ`>oVcP`rXU#k*#WXA)i|D6rP#0&UfAZ9mWH9p(G{{yn z-mSCevsOBAo9K_}7?B9NF#4Tlt5BH%1)8 zYjxFa85zRXqEkg1W1}c5-P;G%Ptt_wfy8>iXPUEl5eQUFqaFJ}oPY$Lb*s)TMlA}) zS(@_mbhnDwPLGOOiT~*WD_$PW0+$OmbJ%DL8W@SEsW}GEni|{weku!_uZdB9(`p-8 zWhA(Wb|6|~WIj}Ce6Kt*(#~2>vsK*YEG~;nrJ@9+oXnp)HEi*maGcymioCvIW?z7d z6wN$+2uv!fz1kSZe>mYI>iSQ};O}Uol-Z}>eb|wq%xa2=b|DVdQD>RNneFsX2248L zK|%!jn#^IXOH6Ax)f!d2C@65e#LMT&60nP5S)Do3wAKu)~v-*-swClbT7hICtI@7;=%~rV_=) zSBrD%kW&f2W2=agi+Il?00}d%JVl#8)#R2X7GzGZ?Bx-SLrQzK2gOQ#l_u=mz%Hl* zVJ1kC7M5u{4#o2OnjN;X3wNbdxh(>S?3Eo#otY~>R>Iv%ny-@a=$Xhws z3&GuzlCW@^7)|S$dNiL)&VEyj$Aakyr^;GDz9vLcPC@siTq#fat0HHj+&&<;3H;%; zyt_X3ZN%KpwBG6Jh|#pTQ%u1?(I5BsPsV;XB{5Eebc)or04Yr3QnbK)gaa!FW$NDm zAc~jJbtfDz)h%;tRJs4@03!dEV4m=04%>eXF~~Zql_s_cU1w~tbTbV;B@Wc=i&oVt z(8Vz%()!KT5$pFfM~hOx6jLj>dja&>3e7Nl#?)#pHMZbB{vd5h#_~ggjBTqCs@nZx z`Xhe@)cNhC-K& zr|N$+S}ool>G1ZvAF5pSVuprMi36E)-s`0K4yJ%bi_z1o-z6&P2nSn_88N_agi8-F zaYS2F>0}%dHr)jkA!^lN@^StTfe!OIjA-upBY^w`4}EqF5F#Bl=sRs>^Fe1fA3sBD zdBmr=CO8vGznWyxwYQlxA0K(@#=pqEh6AN^uz6;D=LVE4xpN$gtE(t`P%(J3YVLCl zwyb00A&lo?-~#QdfwPl#L)bl-tkd4UfoKznb`#slGW7c)u#I8#jCQOGs%4g&6Kv7c z3s8Q0Adg0gOwRRGM#kLYB!GgKf>))4No9$dU4wIwlw2-hBawI0!FcbAiCaZ$2xG4Q zOhd)8bWLg>ij{={saUw{CazXHj2eV04I(FM9+rN`^>wYa`%CbFnSfu@8%q`broYx~ zhrfbuyjCxVgBC=Zh3-sBpj}{0Lfc%09K_8P*kryAO4n`Pv>o!uD~t22^mOqy7ZW6J zh}vsA%R^gO26_k>dGl>M^#YP~$S5U5;q#@7C|xT#4J;Ugvftm@6VoqImB7?N3eWDj za#|&}$K8!__Gq0t_d=e)>uqSoDoh)dM+lzWemC}S0JMM~nh-1rKr4B;%9%$-y=YCtne4dNZSUq#BJh z;td`|(BWzy%KXUoF~`{i)saD^My<%EA6rd2P4gxgwy~-%^v&My)Vgo(D$o*Gl6q;@ z5}wT<_aLVl$x((Xrd;!0Y0c-mcfOE7zQxZ4&t{W)txum{)U~EvV_q$Kc#f+96dTAC z6*-Ye7PRJUxpdxBMZT`^et*mJCrZ&xfc>dywD;G7 zalW8HFve;i{4MrbeqHb`V4CfOTzK-JzF;G$W1=)&F-}t*orNj8!XHLd4O56>l$+!b z^1U_c^U@aGf&|y3B$32$Sh@}+vIwta8PgF5`{civikzShxj_L8)xX-xyog(@H3}0z7X-FkP*Wrj0K%nW~ zlU!$&t@lcyxw{^ZQPQ+zx(}hunC5*5Zfq4wznu)aH0LeqgLKYRYAZh9Kkyi~WS<&} z+8?og1E2iK)id#4YZ_N*D`-NQO@#Mm3iq#jE&SPTWv?kqDzPL{*|F@BG5#(rCDAwb z%6ci{q#dJ5scx_W{3~nni4;FOZ*WLh!%u^!(cJcry@Q#Y_K?eDh49_WR?;s5S~BSV z@7LpX&7gVGB`edeHwI(}C|pauX_hx;eTE#14rV1%V8i;BTB<`^iTrJ$39RumAu%fp zN~v`wYvSs(56{D-+v`Oi<9Iv8{(keB{Zs#&FYsvZ#fJ9Jd}F;mu+#YW-;3m{IDVJ? z6PinqyXGBR4x1@mT^|>7FTrf5!DGajeO~TE&j4F%JyFLl+$C~$$%52P9?iHX@;a!N zU}UsFbQ?svf1h;C9J|((ILeeH@;j(N?z*b2V^3|+X?2gvf_CH$W@s;P!fKei11+9q1FZSqzQZ9X(MXw zZIqLl%2mtYOFfM%pG{{6B&%BA|Du#&z0z?T@6~_mHT?YhzmpfV(qdIos_b1>gTdY{ zGPyr$+kPPexQ4+@063jC9&r{{mN^n*08WZPnk;ZEt)P~TTiC66Kv9j1PeaK9rB{W< zU!$!uWg&5}8J8msN6bc-o3-m1`c+Vf+F`U&CdjmE8qcK#{_BbdXIDzWw*aFkV|yS)*>R#xq3rEIQq87Vd6Avbuv1a6Tp4^Dob^( zyeXa{wg6XdsqEaaou1bZo^8`hFe#pLgY!2snwgKV4~(m^3*}0VVP+~i+S%W-&YIo2RRu}h2?tYt!r%<=BA^>VGqkQ@KBH^Dh6 zfviEJ_iq6BLecnjClHxn%Tg>yPALu-V&MOwLU_V$s}T(`j0}#E@l00o&Yo(K8!iPt ziH~d(#nZXv3T9GH@X7pKJ!eckS+v>X#knX9V-I=HT{4a{UX}o|GOOWw$M$MM3+v#z zp1Vvy1tuo-CcO=<5}JlcK-0NF4d|T8sY@1lF9yh57B^6*)V!~YbOUZC$_8iNf;|}> z4Mi%k&r?ZDZJaZWlk3(|6b%Uo>e&jEG)!YD=|k6YRdBmAY};;K#!~}NNL?ml6;&oh zS3s%VZ9w+kc_wfLD7D>yO+#yWBAY&cQz^1Vgx<-qJaNer*C=8AJ5rlIH@E4AL53}jh@7kT3%2;<+I#bSP`viq*p{mQ=8VMGRE7?ap* z;jH@i^Ph%|`|#A-W?po52&YCiD`>dsbon(y$}u@z&f0Rl2)|-d8ctS4IiCTM=fTI8 zElXf9Ho^CxpRF9a5Lg#o9vWT_I6ReUA&O7}Kri@l)^;r{f^cneM6v)vUGqL8OBJAZ zm%>)38IBC77m#C7H4s-&RhVfSCXH~&nv%(*VZTu zep|v(8zZ5wUPr`dglN!XuoKIu@m8aVbPn;_EMWK1x zD<5ZSj02gaa_`YA69-$dV2OzpT6y5R%bEOeJ!<6Q#Fp$d%|v7@#GQ_56wXY5HH+32m?agQ4DX5Tet+t^S@;Oi{XPF|1;usSPPz1uKTO>GHvr~H=!7A|h&+J% z>E(F%|HIc=1w`3>ZyOMhj-k6|=q~B*9=f}`8wI4B0ft6u=o-3}?(PtzrBpyrKwrM` z_doyUbdJ}v_g?E>*M(?r&xzYkBN7In754Q znMMn?a+`2iRnaF6Z7d{Pv%qDoTa8JAtQd|(AKHco16=mIMsn^CKWvH^r0=&es~?B6 z7G=A;RD-{KYEIcJO(yZ~Gwuh8#~3GHY1B?p?_a~m+6I5ehggmG+`c z)++v{M!HF%ua%~aw8lzv3EWn6$jJl2x($gn^Hm=`#FWk`r}G6 z*A98-FGu;eE!M)5&!`lyG^&=r7L_6qmx7q`2;`6pWH@lz*|}91Oc^8ZJcJG7S9Lh) z3(zx@R8c#D$WY>G;3Y6zUygy&go<%&Dq9rIKxK!G`aKpT(?uMJIu_Z=pBe#G6R;vz z=I|0?PWCS^#n7g>?<;`%|h;t#Z$$Oi1iXk&w{7Fzd#Q zu4)o&0AXcgIrf3_YCn2kE%VFy8q5&dh{l&0R?4U6APuLCug|IAR^R*{Z%F$lAZE#B zq&AsebNf)fb22lQ;O~pFW$?6;rq|i9SEG0wb;L*88QviZIU4o8AarG#NXHOd5KHA` zxm=afJ>Z)gD;?wBctQb0jyU<2Aq}=RulDHnWUwvOZ;gS0o>NnV) zmdir7L^!mg-f@05!3l{O+dv@-Ul1Fx2(JIR`-ZuK);#c->em;*>pw zntyGKl^czz8x^6!E|qt8?py6~A22Zp#QyX!dWW5mI7uNVQTBeWY*aBNX-JoQYs>z$ zOu+4yP16xZtjFSYPkuTOau%fu$PvnOl#we0l(7qElCG;^t`^eI?r4e(=Sbw! z7yDt@>vDVAYv^8bKlogbx9jTuH-!wvHDMqm{3+H;cKe^ITkz8XK-hl zn#?JhRAuh{F6{2ML5s$S9;|=H{ibtZ|KU>8fKn4dPS7D-6~&h#=*g)TqrTT@8tJ;u z!rJhgO(H0#H7Z?3*HchNHaAJB>SgFmVQ6#LZc~K2B(p)cD6o0Bp#^40S;nhyCo7)b z?3S9*!&fjG1<}T4HT9h??~}YnqJ6yWCbl5_k_|?+OYerY*{3>=zW4^7((Zdv^VW_{ z8VRW=*Lt!&pLl&ry;Ix9FoMjz3}m1K@iGJ%q?qM9E~TqF{DKUeym9H!$S^)3HU4Vm z{enGZ>N=07SPp{%P=6VlXF+?-&CP$)dG}kxEB@Xd5Pyr-At=VFO|ZUrXyH%Epk?;B zp*@);eZ(vm{>iB2Pc6fsNmkIfbKr-9F`1)gr%w!?O5eaCJ~eJ@ zf=|GPO&dz5q3oZ7mlyUoChwke{}q5{BwCBp1mX(hJA#vUA(`T7Tw6_}fe6Df@*g1{ z!97N&&vEPT@YN6Nm%p?se-$??N|oC`Zuw>Q`3YSg0r`SPzGXNZH`f9Ywpd+FQ9!Gw z^Sn8kBvo2y(HXsseBlePRn5ipcUf&^ev$ZHi6yCHB7eeJ9;;a&9KjJ2p)M;5q}mE< z)G`!*1FTTTj)c3CFX5D!YcTU?5*~t1PvW$a(h5GJtlZzT^nYV)G{p>!M=7RwXo16#xk5Ays_rx0iT}w0f?F$IcB|rF`(LT;Uy$LP@ zH~MM)SFl23`uNBlICt@$4U-j>6cQMTsx8i4;E-m{%ooamFHN8ip}~2LuCA<=r9o~@ zCDs#0tgeh*#Dq6emV15V``Vm~%vPm$mPW+X1Yp2YGf_rybbDYCI|u2&0@&PAuC!#C z#rht<=5%JReb_b)%Vb;M47pp0NdgV7IlaCT3zih~muF$slY9Kt>aZ3fcaM%U0Tvec z2^4r(m``%VoM9QZ>~0*dzmwc(*bZz%U=sKDrvE(X{+fP%G;5mv(=ni8oS7;D6SEe% zy2~)it43}|k_DcWvR!<8)^QOq8IN^kB(+aqB2j6uWZNS3t89q zMP1Rf55UGnrV@&JMu+h8VG7c721pnP-nC3D%B-2{ z%q(cYuZu?F*#8PZBogh1?&Kw65Y|`!NMn=YL3pFe_0JUV&IUuoq1(T)iOX4FO6R8M z8M9^9f*F<=%Gc&EaSdd&WNA0p0R-t&*h#Y`rf8S60KDlGK=Kc|)(H6tP(y+0)|e?P zJF{D!AS0!HVME-)eGe8IbDbh^NsX7R0d|^x`rZEOO*7^Q%Cb2uV$y!psvng9xJ-No*h?t4I;JQ?-Hl+%miGrxToJ2L9`=UN|^wxeP z!a8@*+EkL0u2x*qVmy2Waxrd*|J$H(cHVuinXZI?nD$bK2ABtV)}FJR+}DXByla$h zp~>MZ=$&11Tk)z2yuOsQ>`3pBgw^}Zi}^KvJ7=gr^{3nWuQ0I(DT`_94%w%FrF<*v zyZQx#T0R@3A^ubQq0WL*A_n7jCghW>NJJ|d8WAI?THkzv7fODIF6T5yj#64{Cjs5D z&cJg}NWp1gE}dH?F$@#lz@cDdA_wA^8FChD_E5dw(5%v~wC>5g1 zrG#a_N3lPVTSw?nM+M0dar4S7$vKn@tCS~z8y!2qKE(V1m(P!9UEi#BkN&*sJK0@uZ4%uL64ludY0&a2HU~jO7U*yL<@Xl`vw)tL+K$rN6_l@@!1DY6 zKBTHTw2VSeSH;p5Iz?+6{+?<|A&XuG+C0dO9AA${6aj!nCU0@sDpW+D_z;Sp46?T( zlT>sDuMq~Vc7mZ)G7@PqG96{8+Y&yro8C1mHcRTUa=yHe7(Y*S_zxX6O%&EhAPWsM zl(k~7u09EHu^8XU02oMO<*H^gquTA2DVJ1aJ2DlW@@yA@KU1pK8Nrlnyc#x6r36O- ztf#W&ipgI6rY3u2FF^wV;fC`Yk2LSzZ1pX1b{_8TjU3C| zN>6O63D&+L;`%}6L(M1!p+fF%3POH@7pKh?EVmLj8(>4%JEcvJT$9~<-`4c@RNTc9 zD$Jhqkqyt_Du2Zl3qfO*VHIm&kTjVE4f?70FM$qe}Ezr>U~x^DutQ z-qjb}!FT`imqzJc0CP;Ncx>#l03Cvcofe&?GaJ` zEf<)U@oq!-l&hi|PPg~>tiPF>ot>H7?u0G;{^0!`|4IITSs?RB^hl5Ke`v%BT=H!M z8qs*{lJX4BHNz-k_fL~rAM!oa7V<7Qm>?62KI83-jJe>C?VsV~NJtO}1Uay8VcYH_ zVg7GV5JkiZ+{FNP3kYV*itLZe4%vb~JnEOpXu-;c=$t z?vHpFmQ^p_>A+s&B+rnWzLApf+g8%nm0*fB#a7Ih)@}KH{DClhOFY9;*!^iFW@Z_H z*P{wn+zmagR+Q`@eG@8GhKr>W0n}6q!kjVi30VnXC(|fMY~!hDbkr~!ynY*0-FZ9y z_R=h5|7vH)>n7;ivmN^?+*yN_?Q(7&ySmTlHHj^1c2)~=v4U(WpSVsv__wK*I+t|O zrvw9z5e85DK?xwq8-3Ca3bDzd9yeIXQ{0`nwRFd zJR3cAB~}@SnE^!|_toeG7?45FU%(hl#UPhbWCWM!aWrM5C{Gl$R&sDaty0}#PCzsN zL7f(}>j4}0X!MXsVwL#=2%*3P9-3~*L*kUAC5xZwEUo_D#*|41!Q-mdR)I5hjb^&{ z&a$Fjw>k1&PGKgS>HppB82N7^p(0_p^dK!AXXt&$_A}z#9T+c<+>D-Z8v3MT#f5`C z0=RM<8NQzyWw?o=jaPP5Izg|C$??&@$hdsmeTpuics3FkE1Qh*G!r+p2;rL7UVGy+ zGd`nInLW(FhWcflm{Hb!EaZ{X)2d_P`|CHan)tpqEr@76&OmhEGTkW%s~U1s|0Lw~ zAguXuk)6m{{+anFSNHO-e5#n7s;}rQW{nG1YY3$C@pg&Hp<_dD+Pzz%(6scR90Y(iQP7>S(4&pBh#r&apio-m262m1(*JXd=urv(~(!y6V8 zEDWI0g5UhuitfoDC5CBZO;oqTKaHtIgk_N!5Ebfn>!L&}C8sqZqs-(oe$o}GlXuyi zjaUw zzc@6o#+C_;bf;F$QWajDvFQco)VaLDV;_Fa1a!&eNEP3yW~=FjuZw%-y9SZV4hGN&e!1#%VKg^RV94-__u_3SqmBooiFj zp^z@qn{x(Dj8Aek*6>_2hXqyKF727F8Uz_xHs{ zi`(2+?nJ5mByxO<14f=@gE9_ka-cDJ`fVtY4Kyym54S9*7@)?Al%R(b3N zKIES=9!BmWF|I))l(pB9e=!Sumw`r~pu|K8Sw@rlDMegUMa-tM`B$s`Q)fgce`A5 zpm+l0YdJsJ{}uo5;_b)%`j58r?*YfqWl|!oBwkjJ^JdaS>)!)6(;~qtc$z6L0gU>M zyrbjh{@ySy2A+B_(bgYW&jfofXt+9yj+!_R$dXk4hsgW{6ZT4RuGC{F^0%nU7*}k& zibb8wjTS~?5|0bNt)DA_1-oiMoO&Tc=Alh_p&z@^6s5DprQ>}P6lQmp1lou~V?!W^XbbDR?!s@BL#@!CzKfRc=NxO>6N0*-R4bo;&!d9YBYsR%aI7D+c+vFDwoff~*yWHi4(Ts9EK9mB;9r zrjscXARNxQJg09!Xj3%_Hzn^+TbbX#8%)wy3_q@OeX3Cd6e10IvAn(@ogh9HT$>#=4YC#}q1Q;eF!5N1b71U3V z7z_qtJ#g;-Xc$RyKU7Nu%@|}G z`;=7f1!Nm#BmHke3EYLi{?9mWb5IF{Qn*bCw4?U~PR@vG=*T($3%kB$Y<1pF%i?MO5{ zJ(YiknDS|aA%@MJ93itoL?LDvg^w%{U7%c`j&P|iwU((uUSTrOw^lbjbaVpkaWJNJ z0M4Z4%xU0lyj-oB+;Vr>Bj`$8yuM8!g$9Ba@W=2e>}2M<$$!P?*A|?sS4-CzWy6Rf zgfC8G(y-dIzqjvIakW@k!4a|6xj5Y$9tgS9ZPN(kWri&cHktUHK$^q8C0uHKEm#?riU<#_H$sYfV}BbG2yT+g10^-9!2u zKtx*Lo|daGu*tx~9BpJX7n15~;Kc%sW*IXxz6qhwS4tw1l4L6LF3R)w?(Fy1NCn6* zPw5|bY6=2~TU1qS*8tLJq;7M!Ygfzf|1N$`g*826555RLHoY}s2@Is$v;8&o`Pp#a zrJ$qG5LB?8$tSufsO|hC=vzqO*rjo20umbWH4+*V_K#b!IhPa>qE!Np9hzX9=qF3H zF;hC!KRN9F-Q7nu3~)i#zI$vRn?!)g{znM9Z^P<$V+(1RIb93O@*O#Uimd;6!4}S+ z@!IqRj}M7*mF-I2mG`;nhTK}d-M_B`wjw`jB(l(chLYN%sLWzVE2y9lqP2mFBm_g6 z7|p@%5My7a+v&NG54Ap=PT@~_u|;|9?bCPRzpD1%%;*O3cokhwTdv%#%qyF0U045l zSeRqRDW$C&w++8vlL>guL4f=^y0AJpMJ?*H;~YcNelYDBp<2P802g}ARK{Z|#VdQ+ zAd7-JVz!<+-}jyx`M9SpAWonBhbZRqd1{qU7s~tgmuG0QG5xR2FH26z< z)X5M?HMn8aE3eav4@}t${hK_^3?kylm_AW>)m{b#QnAbb}(*v5C z`g-Mk4oq()F1_e?8c*7~uFmv^c>o$NpmYCE#k>DKf|1ZyLKL#_?R<9@@*oH>mYM1^ z0Ko1F6z;QgiW75jeJLBFBvj;bGudUWz9>_Y-qB*OsQWlzpy2`Ik=cl4$PA+G`hzPlGr zrwWQza5Y2?)i&W?5kW{&g0i$81a!V>Qp;8M_#J^(!co-*&mWU&4nHpl{^0Q%6&W;{*qHw@t2Yj@n<^PjDN=M$nI}L4GF;C0`6NchEgRx;u zL=b`{TpCAna>i&Ov&wK1^IM;vo=|l|t+NwEG3#7Sd=XO=;G5Uq(Zyk6M%i$1P)~9P zUr55&H!ofMS_G%p3Rhrc_IIOEH3Frnt$0Ak;ww@UmEHS-(vyOXbZYU7S&TmuyE@-I zJ1{xKeanH+(eRc6c9)-9z`E6-hOlhvt^@+=@+)z5j$cpG$t%;Q8F*VWgTS#N^Rp zQoiz@{%?4l9D9AFHp9uz_P+wai9`)SY=r#-W3iif{2PSbsIwu`pyl2ONgfo`esKSl zs-n!HdLR~FB$Y~811aW7XLufxUnegweu%cWr}6{VA23II9-qh9TW zEN9I1BPTs@(X0j@sqVPLr<_R^4Z0XtUE~wTS)!kCM9${eRCa%QN&kl?!Mq~r?T znH4a>kir51A0M&8SqF%3^GvlL8&%Myoa2I+?qpKuO0 zhk|SEpBRPOO#>#)Tj&I>#wfv?l`9tBC(H9%mhpGiN&Z%V7)S&`GCJ3AE1LYGsiO#O zf-9zGD0HQg{n$S=R>+;`$XSsFrC_KWovx;=#mmXhk$eVyT0^eaOJu+6m9U1ljJ3Wz zOhG4;7D5UmvsXq1CYO17XKqUq_OJt0l=*r=_K%i@ehHys{d8iHtCYTey9j z;J0bitG#T-f*IM))x^%Bt;`rwo$f-*kMgb!e`l?FYhQ09f5`-L_-B-Uyy}%8oG9;Q z8a|LDqSy*I4%|L-nfdnB9Lg&*&8w1;S61W!&>U)VsTm&y0_$tR?zIp|eWarbC5bEP zTC$f1ac13Hu%L>ePfSM7Q-$y*Ov$l%F2VfwzQZwBbIS6|HTYp8I3` zYqfRF($F*<95cIuyv+6|EFhQ1v0Ycz^l^@=E?4ckNdJGizzIC={?}cwBRj7pkAnXR zGE^hcdBP|3FztM&ubmNeXisC3=6`V9>2t(JSUjwyer-rx;G?KOkK{(lhq~=qk}A); zfX1pp_4_t@V1$WwiA6&g}PBzotC=! zj%o3(P6V^+ed3QV@+zFMjan@l#y2Nvn8R!ba!u@hxbdN#wXP%V;+IA`+~}xi*F`K^hF1bZSUS#@Yo*V!3!*4>8zvj^!{ z0w!DAgCoLS+GifuuX&(q6n}qGSee_mO*v!g*zf3WzwR&daJZS<2(;6!U&P)1z6wX0 ziv#m;skTyh-wQh917Rsz8Cd1oS+C=Y@M?kxv+V`+P|=eY8yzOM+40`Wabj|g8brv3 zEGhvtUr+K;z^T*$ zgNb1$eWt0v^;M>b`$~jo#1cql zf>o0c%jCh0kk_PYw~mZj5pGq(0PO=sR_;2FYJ^zQl*}$p z1YXowjpL*~Hx2zY@v6uuPi>xT48@e}O9|=wJ|F}SP>|2zQ z=k6qrW&gN9!!@;)tcWmNz~U`B-FSG--T8<6k8b17A;c7J6SO9wYae(9Tj9LdZoC4y zd3LcsWXq5}Dkw1N7b|S%_>T@BkWfm0fK50%rW(#Lzpb;NFg~v53{q$_H=gpd<;n0&8mo| zo$Y}_j^!SVZylpUnTQEsf~Gv9YjTR#y`t|0Dtv`G>nGb^$bQ8U6lRy1)6?1wsN>ut z)<}6&Rto~OsS?SB^bLTCket>D{i?LwiEOA*qB(jUu z2|Bxg;@1bLUG8Q@J!*u742^$mpXJaf0tOWvRZW;(Fuo20cNC^h^5m8qib)xT(3lwt zgfm%X)Ti71vr_>Xfa$b1!bJ=g+>voO0s3Hlv>e1s_)rhS{?^WUu}PT(Mx@<|J(nYx zo72lJip&2QpLPSjUgjz)fZNGA{SVvW4rWGUV_l%ml?NPPDSuJJYsN-v)>GiCE`$k(^lN(p` z0yjX>n7p#PAnz6|eN%Vfx7%A?YKeAlOLJpUDL7k%DtLJ0>v5pGpfa+4kkZg?S1~;L zgrl6k*cRexukQAB&E6@EZ_W3AT_82YMwsISViN4z!%0Ccnc_vkl}n?6KqI2@+SMZF z06r$oZLXI6KWFy>-8!}kEkpeT_?=kF<}c=(a=}5%)cMG1ziD53zi@FeNvY&eu@PBW zMX~CMyp}zlZuv1^mYrjz#0ODP%D_K5I#6Yo-CHM|fg&Bf##XbmUXrWG z0E{dxWo-Ps1`<^OrIkSw9Tx?y-w~4zq;9#TRp>@9ZQpIzx@a!IRz_wMK59+R+?Q<6 z{=KvAGA(p}05xu298ZBLBm46C3I^GuYxuc3xX|-Q1X5hLH-e6TE7UNywWzxfuXj5d zG!ieY;-^84yjZ3~bZ&HFIY$f{r$(6&u>4zoSi;x)Q=$z zr%KtyeoTlDZ~ZF%xxWWxDKZZU4cJ(UV#YzJW;?&LrODl_@m=>5mk5a(kcNdS?mjWCy^_wT=9o*mQ5mupt;5H!_NW=$h#d5R zk^zJVZm@Gx^BFDbw$@iWSGlJ+w8736@B8?eth z4>5FrWd;E|+5y;TdL&hB;=ihyole&ZX6K~Ceu*YBXd2);2F40dJagawjU2SS`<&40 zxQxU;!RaZ)?kU5cjk#nYp}E44sMJ^ow>%7%tdfQ6R6c@F6jpF9_?5EFW73dg7=0U9 zkSz3bKGyXdPgppA9b*KMPA&S)yREQK0;xYCAX;KRiVK_t^RM#={yJf*lnFU;K@Xm?# z;|BO^()Ij+^jnkMJR`%_clsbIjVz*l7lI|8u^EAv^_J$qkK{egE(C} z&Ivge7ji9g??x=LCQ~yyP~AQLr)SV6jaJ{f6?*%t$~w-BK~H}hM<*~yXJzCvUP3)- z?4clhQT5}ZPKaN{4D4uPdCv5BHI~{0#ce3WV_GC<>|2HOiIYcF<2=!^7LT+SxCQQe zKi9dvBTJ_o@G~|bbC1Hro}?;1p1?J>zt%`{D0Bbi<^HuF)bJ8MQ;UIh{EYu-&`3DH9ao<{-5Rl(q-Q@A-OBBA9nK$supC?FOOH#>8zAPu_m4+0n1>zqskuue>Uy~6)`foBYE$e-!lmH;|6mPFls6=(AC z^UF&E0uq5Yxvg2jq$PuCmoNzUi9F84K3pqP$LY11T$YjTttxMsc~YbL!510#r~K1d zOx0+V&E<7agJDf~n0`gn7R%v zk{M0G=vvXtvlaYX_8dfM!=Wk1V9e4RW6mWXqyxc*ZqgJ}e}__il_fD(c~1=w11XFFv3;j8noEDfsS&)WOvy)WZrMSdPalc zvb>~}lPg@M*!GReCpUi3(X}Q&f1R9~tfa}UQs z9O9VUTxgujeRQ|ckiW$?Dv5;O8^i+6p1a5@!ECGy z;OK82ynVvXXsozXnAtt4*E*J_k%mO=Q(_cbbo>g~$B^$wlDHdeF{N|a)&=6st<5Kq z+@x+9EQ>YRSJSAV*7VGB#VcnH>dj=+*=%=I4L?5P?T-BPUuyl(IAO7b?+nNHY^^f8 zuPsWGm`>cLVw``R28%lfP5YlWI*JB|AH?4|3|RVFAMU3%t$Iwn8T_>J;KZiBSL}z^ zCiP-&*dRDGO>8Ae9EkA$(U?Tk5;%4FL!X5Q$gdqN%mCZB)SOTnD94kYdB z?opdG{DNgLESq>=z1?_k>=?wvN%=7Vm$w~mAYa3qzU;g>`iSe)=NcP?JBAxGU8m4h z)^NpHi#wi-Yk0%yGmOaH8;+$a3qNMTuST1y{uO{Y5<0V;3ix}NcmD-Kl6U1!w1vn5 zAsk^kY_NZt)LgYK;wk;83gn_cZyO?zLo$uyYbl<}7ug$)ovzif5@y+1N#;vcIlmv( zdo_lKzia;WQRCgqoY%shoDpM7DeUT`A7uHbY25LYIc& zO=fmEoe{T)Lc^m^G~wsP`BJ5KK0qpef;?`X_WtXU=$jEjimdZ=lXm(jYsKoZToT^| z2BPmI+y{&#F0=l7G0*`yoD8V&OhCPvFEUabK-Pf*Z5szLrlQ3g=t(2%3eYn8Y<6Vg z`JvCWD)~1T8 zc~*m3k%Elu4fi%+L%MQL}z(0=c`6;(I$rfUKHGY&D6ACmK;0V>ka1IJ=j0 z$I)s1y~YIj-b&WHILChlppAqc^meQdU)_6Md-IE=)TsO1(61TvktxRVv5X?D8e<+PrJ#sq z(iL&Y(KJGc8J@B`&gi3`cR5zqnV&WO%5M3hwG`T3i+Fq%*_=t-yG{0fEf#z zY_C-A(O2^t;S$_H8>cigYg60TmisornAkY3OsQl&5cgwMn5uNm1mi11fJ`NQeW|i( z=yOxfc3SN+ZNoQ`$i1z+lpjp8Az*S@z%?!vZ|G`DiFL4Vt)@$!hF~J$`~Lpc;0{@p zamFW(Mjch-9p!|ZoL59=1>ViWqQ-NGKQIg#MQLZv@4kxs4X19k>i95_3N>l>-?YCe z&Y!y4FFwz|m=9F8=>M|=JI^m}UzfPfk~DVd?>wFTNtWlIB^`(oq; zSroSYr1?nefyu$o&aW!7cs?`~jha=TJq;DX=1NoMSJ&x0a2Jy}(S?zD4Pw4FuGg}+QROKny!Y&`-`ysK zu+kDXOX*2z zIO&rUz$(LntYjB%C*)l=!f#E#uHxAH5;JKkEFC3!U&Pd7s|$Xf+}SaW<6w_6eX0q# z|6c*{BB6uBl>a%x##8eCmjzlf0{u&aF0$GGBg5e}x=*<^>u-KJQiDNoVH_!YX*3Py zISexG!TsZKxgpM$jHjt2&6ZT#F&8SGtB$bIwKBIg`82NJKD9Y%sk;G*Y`$NcSpFMivAtOS#_P<$=PnoTF3G~2>!hbH zfubv)X13b837id*;`=$67zqx!wNeEPt#4T9=-TtnLDr&h42azvQCWNU)cX8NV`*zO2&h}_lH9OU5 z5O0mLGYP~L)=b+2R??fWc*9Ks3GNEM$*1=7C|dPfP5ac6@^;8$D?X+om$+U`Ektn* zm>>wi(Nb49RxTfV-DM0FK;MzeNh@a-iA%VrNZq0~6o-MFS;lMq^P&sq)sy!DjS5ai zJ|7^@%Kb4WTKSlsp7?*(wCOBArV&*oIi2!}4^Jdwl4Bt0-s758DZ*T$`oQ>4LKV6y zj1ZqU^eE)9-1w0{n9uLAh`*EumPC%%Jny6!1~q&j<6%=fHR6)SfFq0 z%z^T$QvGMZNfv)!xo${?H%BPdaG(KlTu42sh7LtxeA{!}^d9H$$V6+j{zU0?;xmOKsmLQwTL-@f_n@9aGZ4w|SPEN{Q2|tQWfVEy3FRNuFcpAAq zaEp+ zVs?z_1t26bli2OeW`8RSoB@gmjv1#zJ$s<#mfjs#ybW(cwrztk@9uOB9e@FlZ~vtf zzXpGUlAlfRcIJ)xtC3n_-l9y5kh>FN^Tg2ca;1!WY_g3N7$AKyV&vdMBc;0AQh#v{ z=hGy#P7kn=*SNPToNdshZCKXz`SNzD(mI_8d;9%5pHY!i1pB0oGUfYtL-6I;gol)e z?oO)2a!;GuwbK(%av1vw$I7?=NGHR({^;HOHS-WH2>G?8SyzY%%=;o)f0#N^<#?k! zTz1FdD$v7E7Zsfi)V1xMifZeQ1r95lJ{h!fS!hJLQD~d*q7peSY5E5%t;`qb$Q|0F zI=vyB10-B+atW2!%iL`X)R<&eW<4Z~7|6Nws+aqNb1ac_en6_7GRSu1T<^^_>MrTZ zjKBsaSI31qcYGjAEN=ROYM+$-j8gO3I2&U*E;Ik$=y4WgnbIf_P*bEzP3!o&ewxp4%^N(eGm@!%ueq%yEsDy zi&u2`3Gqkc&WCw6Rf-upp9TBAxvVDhJnPw;+)egq5#@TP{pa!V5voA?(~g$Hw% z10lr01Z=+Sa`GXWog*4F>)hzY%dScom?Lsw7Pin}kb1ux_%T9;!X`&$w>N|BLu_!Q z1^HfB)q44Wmz!Q^aGol)+|Z9Pw&9$ciqI3-u53)UuQ07vdV3fj_m6uyH2k;I-~G<; z%lbG@RRn|#APR17kf`HTo8V904BAb{B}>ky&ivg2?>RVkBWRG{_iRkyjfr=V{~YG(Fvt*eS+D`GohyJ^h5kqdhZix;V1Bu-73)5IuXKUdm~xl(MU zEKc_;9KzdRLJ1pPP=d5|SXJH8m*6nf>NbSo%C;QIeW}~s6`uZUzPx*rs4~R;?XbtT zxGde3xZl3NnCE@G> z6Z!BtKmdnA&ZNWS6e~)I{S-KA$@}0pb;4?^g}74DsN+IKfCEAP>Dw)jHnVqCCe_Tz zoTJYj@8JcbW8cj~mvnQ_Pq}ASpF}nLeUEvTx=*RV@2)J`s~!f-PClS%VKPy;bTE4I zzJekP==Mw>Iot8Vl2qGAeAuy*>So5LNKE7i`3Tup^FTG#qIN*tXi3cgmHZV<21QL^ zC3DXSz1hDLfB^~BU03ZqQQbK)$t8l1%>$65ifDs!l`H+XTBw zN8)IF>4)3qOvlK}sECS%c$RV`-BULFgajGR0L(;)+q!ZV~PA_HF&4T$2z1csvC&%#LRvY?OWub zr%=2SL7ven!dgyAk}a4Vz=2C@F)8ENxs)gx}rHAU0s_lNH~#|F7B#w3F~@%Wf z9*;R13nC{ZhsN0@Xaus_V=A6pV*ih=xBiOq|H8ddM7q1Ah8ns%grNo)dg$&Lq)S0S zx;ux?p}SF9ItP$a=|+(fkdJ5luIHEMtn(+_Yu$V8_qF%FUKi;=h6-!R5i3JJ1FsC1 zU-hDkx9DP>EZ-VMVW2Vd;O|y0!wasn|8eAOr2LBdD5) z-FC$}ZJFdlUo%q8%~G;#q-%lGE~|sO874BH+g6;ulR!v$`CkE`#-Is$YOZ*;PR%FAJSZ?0 zg_0%`XdSEmIlkE7Ry{#)NHJuLzr! zzOl)G*&s}a6_i3JE<=gL%Xbo>&nL%22UMxbn3>1dJwB(uKFS^`E>mc+rm7n#Ar%VW zdr=-(@S^fw?V6xwKU&jHl*f(J4a7;24BDCdHT}tG-7rHvP4n{Q z;;R7COod~!!kUW9lwNV@0Ejsr*y|Ww49AaCiqOrV)rkxZH=rbTq9$Q~F5qNxh>hcz zLM^{u7M}JTCVi`7CoHshYI}6;9zaZ?k-^9ox8LAU2{AS>hD4YIpHh=RMbFJ)zw#t0 zQ@${5Uq#x-Mwflog-e48NA?M`cHED1TEC`>|8BZ`dm-G;LyEmwVxy0cZ`iT9!Y7ya zxUr@@4%OqPlu7$Uc2xcUtORm?azI=bx>s7*NM*>k<4N$PBS;6+9OXSz?Zgn8ayew?O(?=(1p->d-!Rx9~D^EtWMsEWK!!FiHMRhP_To zQ&u7iJ8u$^F~#oDcTrW3_KfpNqvK1wG@D$9x>M2|IXdDr%7G{!ZW00-i&ip_Qe>Hu zs(($jsVk>hyI$d1;^8W^{`xQECaB}_KcA z@&CYBR%kEz|2e{Jy`~$eR#8(R6PX_rXQ-G|3+bI1)Dx(%BE6|IS@3(gUK<@z2EIs+ zl*WoVR_J$}J9BFFu|z`!6*!I_U?{=e=HynW&XCp+FBxw3;b(S}PT1_Dje_~mb@R+~ z1}_(PV>kD8DwVPdp}S3!?Io-frk$UvS^?!jJEL_idmdT4JXj|yg?-R8jm}%U|7ev1 zK~Cka$|;vG(G`h)P8|QL(9-WPx6rc6gEauubdN0rt@4`NBAfX8)B6hAL z`&Z28wl1Zvi;l;p8$?3puZFn{d$@20t43}71Rc4g^$7LRl zHwQTlFOa~IkkcxRWOoI{)Oo$QU*)oM(immhywv!bu3o~J`%{WQcH8aLR&bl#3VcPj zRmH*LVA|p?C;ZF(4duS4&!2ZETpEkGrnVDL!SN3Eoc-sW1|H;6XxPuX&>OR70^O3PK9gDPU z)jhU}dfOUP&tIfS8z+1jG#B9C(f9n!A;*pAU+L-kefi28eyeo)|#3*Q;TfUK{(_FIRhEtDy&QtfTIf1GS zZQ|+(1oELYL3Mr|GT~uFPo3LU-i#H(l!V6+5D*^lSauo5Xg@lXKp}|#ZGt~6ySPE#yVs9{bAw(PoZJ#kPJJFZ82wc;n5z1*sSCg& z!?lm=TpfI|mTdm0%yQ?nwmmG7SybWZ0NWD#9ALgp#$lzDC$_z!@|Jx0=;gs_+Gn?H zJ0fzX(DefCG-ki1-td;D1OIx4)d5VmZ~4MH#?1sjvauZ!NC;}&hW*PuzMjk{=~Hg` zTy*0AANXkp3*eKZ0 zpvJ<4JGVuZGJcU_P28$_=&^`b66~?A*yaa>Q&^ZRrkyC-SFlFdl70waqN|l1+NaVO zAUY~$e(|>sFr8SL@7y&|Yr*c~J1N6!<_JI0w$}A1=dR_jpn5vx;u3YMfWVh`ISi_LEb#jbm6fIei<_ObXC0D}24ryiV+$%aY1I?r)O_vrM zn@L`?;XO^vc2*J?tq!j|GYdDPs0NrRr$LE0(pGgY^*I=HP37`wi}6m4DJ&y5^0ljZ z6Uzu1L2bKU^HvdI2$9jRo5dXD4NZ@iF_K0D5iF%8M+;=w z%M>cU)hh8}%|_6p`ies!x4Wjq^w1=w#I3-)>t%!tWIiKTqC$RsF__jPL)ZO3r<6Zu zE&ALkxQ&rJdhv^#S~!vuZ)T~MU9+$fjA~ufKeq%pc<8k>A7h(qW3Q+#;Z$$1vYt@) zcAn}$J~_@o@;-9t#&c;wJG>lj)(X}p{uO}Ezgr-cf44w`E=CX5XKof@cLY4v=TnPv z)}wU-UH=tMop$Ce`FSF${58zyA@{F{#BR->T(>d{oArIKnMzXf+|SU6BE(h-v+lpQ zlcf(6ozYzYTVBU=!(!RvTG|R*6%i+Oig{^nDVw_E8kA>xP5nN5w+4#!#*vTN>qd1m zBY^1Loz&^{ctg%@rzDeLYm@zj>%m_N{!`^qfsu{FUiY$OOvsA_%6P}*_9`XT6bei; z>F!*cFhwODxNBB>^k)o_=zQvXO_tB6sU`4_6)b;r-TrRqnhJ^Y8;&JDtY9p+uljd2 z3GXr8yH>kXOcaGeY2WwXi<~??eL?$7&6&YHvbe1z9|{E0lMeU>KyH0gS9R0zR+mhzzy4{)Wb>2O%ErA2N%`_o7f*t%j>nbXJ9_d# zJ{~wmQZOl;h}e{$mXR76_odL`00r_cQ(reC8@|rfek!|$2ltJr_Z2o-X;&5A`H`c2l z(W4|cHUFZ7OZm?D?a74%q4XQ}314-m!{cIb(;u*D65&+RA23t2rZKq!7BM}pi&mTh z^@4PQ=`$uz>Gu{a1-}-gH_6#J8P;kpfA24X;BEFjmLLOXb)Qn|+{YMoodRC{wk`{! z5Dz!+`BuBC=zaT+jE~ZlkRei!p@&SQLD|XFidNH1kc-sWTkLQ9j}3I(*{SBeyI{D> zjRn-w24)3rA=%k^h;pVA{jz43cK+qIy;f`G$yB`Lcd~J>zaL(lcy1F(C#+SyJ`Ks} z8T~r#t2A@fH`o6~B;laFX#5ApQg_Pu7n8~fBc1rS2~I3ELZGM+tZhw&HO8ULR%Fld zzD%oOrQm$ukHl}(P*%J+VGf(NP|d{6u*=eU-7^&lj2lsQE*l-HND=ldCtw0O+htKH z$2vFY2eQi?l#f7^0nt}#RGIoxPL~pkH0IP!GN;z}qtC?!ll)b8vMQriy#wNKl}JOt zgnBPA(}-gtO;|l*$1MLMnd2nr-BmY3aXgdDl>BZDsWfY-0&9G9m06#o$(KW^<6o`? zIuN}i7FJXc?^ob5%6vYZ!EE8ynUcjEAE!hkpnHTAR928Se+{+87~E5Qft4!zB0;oU z0FygJK&J(j{YrUd@WNrz`0_wkFbq-THgxDP3{gR!5gjf_Tu{q`L8&a4c*)ydMI<`s z5gm?hlG@FDlh+bYOYJs=h4Ry2c~$T0S9k0OBxYFYS*M}n;6?x9$dkarom<4_mBin2 zUE188Pud@*;kheW_6fbgXR;7mK?GW#T4&DcGfO5)lFTufKs*r7?so6cGqi=>kAJ-n z-mw2}a#AtPrOAMtJlQt)aShZebIEy}-TTH;e{uNn55J4)O~~s0O8rGk^F9RtQ(mJL zV{uq>MPi-amQM>v)(qISAKS2cF(SZ6wu0~yw?<^=TXK;ixrnvs^cfPvbdH8ZMqhJ# z2);nFxJYswGW;hmeS5TVvM`s%u%h&E_)CO5S zoSk5E-yt|vvw;FxpB7mwoEFNIkf!CcONjn>&&`Nb5#fWaiuf_#?&fYy9a78Fk{On2 zhpqFcNpveTGBwZVVnSpzTr7NH&qEyr{Vy*I++9z`H`AEE|7R_Wx9k%2=vg3S z(i^R26qd*@>9TcrVwxhK+h#R)K+tt2)-95!o+uIeDX1>)0i^dk$YK2) zDJ^&5!7zvIiKQYVZ=}Ii*`BOVOJ63sxA*$GsrfOtAeX+w>pihG%N^m6BEB!s0T>=- zUtt7pVw8NiT!9eKxpg!|inKJWgf5KKQW+&o?MO?Rq64+(Q&!-=NFHU+$b!yCjo2k+O;kpsUKINM;_{y;Gib~au(j$0) zyW)qbx9_u7rZ)T+d0z6uP`qi&tc7y@kYdi5!^txvy2KU6b(XX>H=xLAr;~I1&x0r% zr6(NL!+6enO^++K9&D);G{Fhg2@>8sy&-aiR8TlEy5kE4qRDv;Hb{-n2I$BcF_@=B z(PDdw z@idjjHZfB0hp~HN@4C#3WD_Oe2id60DSYqZkieJB2`@a6y*< zI3JU5PME|}O>RtxlAbmkWI*$LL0ld?wFaW?xf`kZuK=XcF#6q8PqEcK>f=xyAOS`_ zI6?bw4_k6PT6%5FWZ7_g>qTd8pLSuH9fW_II2&w5rg(;3z_pHLz!QfKvNW$F_= zhQk4WyL}xR)@q>=WV*ujT13_IJiMewL9rdeZk>W$mh(4enYHcF^zsp3zeSA-wcc#) zd`burmz{hN$oU!JVnLckR1;#yDjs)Z^lO&h+VDL#>I-p*3BuBw+QH{jInPC^aMHDRgyKRQ_Exvl)pjT5}au0&|=&E`ESy1 z(eF{teB<5M^bNr!{2N)vgXY(ei$A0du7c@x$R!Cy(!CCwPrl{H8HLW zN9+MYh~NJhoK#FjAVJlh-}Q17-SWf9+V>Rno7`bl=%RfU*AOhfoGQ{xD zb0j&zt+8TyK$43dJP|;q?k&<@BTa9lL-3KV5_#WJCTnk3v>^88PAjm#HZ3jbq;|Mz zp!e4gn=;EA+r>|1?;AscOdtNx$8AQJ`vWB8{2OOoEZrwk#icE5o#3+WxC-0rRn=WH z%`4Mq*oE%uD(yj6ATh9WQ`5=9v^E4{a)>7xqQ+bPy;v}?nRSMuuv{;J*`9RGE*n=C zSOl0!m{cm)2AT(hhRAif+e$*tSfn810T!993*2aUZ!|^9ZvIzt0gWyAY4gTzRV0C)G!Z z$3}U@JQuOcdN8P@rdQDZg+1eNwP3npdfUsuu8)OK*wSvqq=2{Tzfb>>-@U&%z5n}n z+1%d9D&inU!^$Y47q zQ{L0dla(Zslxa(4d?=xH*>L=8*d1aLhn+5C%{17;Jc6%VlgN3=75-puWuBG!b5QB2m;SR~qJ9#S)@x4l8x~UWy5Tp_Pa?EIF6{vO|D=NYl3(yZBA8 zjTc#c|H3H20agr}9Dy|~pTz@5IGvAQFp}UT&`=0r#Pk$bGLM)}aBXSgdGQZVU{s%N zX_J8|(XB>%h)h?Z-u9Zx>I`$%)$3nGvKw=dJ&ArhzoXe%BzEXtN-fkddo~2N`lz$m zv=vb=rJM@fhaG8}g#R&xBUCIHbDJ3t z!Qx)_uK+C2Uh1Qc;rP@&zRrE=M493#nypz-8X){L55NPZ0kF(k58RCYhBS5`a`=)I zGe3XPg~HUwN+XDBX&o#cy15HC)^MFT8{Eh*Q%CSNCD{zAFc-4Saq|K`vC}SdbM9RC zDr^ngIm4h;3x{9t7nH*~FqH z?h9{gEj2Ql{DO9WFaDZnzSkJvL4VAO5SY>NIDQ@Y4BQr7KVoI)0hLrx&U#)xqV8Tr zryp=DZX6ZvJoRJ2W|Zgcy^N#f`g+@V|H*%b6dSAs9iMrb4I5!^oeqK#*_}i6U- z@XT#uG3w_`)Czs01Mk_bvz*Yga;DPf(IzdS!?nOy{F%8gVjOVRI=SjWy4C^McdU zIFPiyeyQx&sROlnFhTSwtq~k?{O;kLn|eSR@AN1uiKxUN@=ru0!7%M*r4iJq>$`Ld zhue)gST`6yU|fn`9YZx?fr&*-dursCA!+U?qrjNSwp>_++>67i07ja2v%gwN&z)Ol%$NEO`c_&|2T3YnO;h3$N1equ?+13GJykPL_%~T zFCE-Y3>V^JSzH{>s=KOEA*%Gu%PrbTU6Sj4d?T9on&8%Fg)^c)VM9~paBngIW*W8e zHvs%2h$Zm;EG^a(ok%&nV|m!h5jXc-D`tABo-^2Z;7UII3|Y#Z)Vfb%*Ia4CQw}X@ zujAtfV1d18SPpNjr{&!ApA?l{jQA){+7nlK0;6dY6?#He7+Npf49G>D?uVw8%Fb?3ag6{G`xX&llg8EPiDV|wZ^)@k#_OpY&;5|)D%2r4-i ze%Y#;+Q*34WN1XRMhMho4So8WQ1QmIn94lAYYUt zte>Y;owLH{x}v?Ew}S)VJ3J2(Z~Re%uXs&P9M8~~b3@||Ot`gz zA2m(59RU2=;DJaE?k^h=b`#Ui?a2W}tfZuq`Rqtc4L%A(@leC6pNTJ@M{HjTWUiaf zbwMzXlVw1FY|5#T=Vyw! z+JFyD=?BSsK=JlL;meQ9xB^FS_4m6O=FPl%=}@omPlP=$Y-IrW_pCP>0qjZ+sEzvpLW%hZ(Wo$Z~7{VU< zm|<+#CQe;B3ArbA&bJ!#J9l+~kSrY%dch2GP8f@_x_&ORfIee*-Us%>6O@Eo4qR=O ztvm@bSISIMs?}qy7A?nNKZ#rXYWiQwDNNWDDgs~`6UH#LI{l7uc`e$j>F!&5`X20#llc{0H)QNO3Qm-B8sV@}`FA$yd| zmfIL&S}(i`vpmw3C)53N6>`O{p=(_Ij$(thm2Pn+iJ;x#CGy0DzjblH?1A+SW8T={ z|Mmb@XqZMJ!|AAij30AfJRR}eDP`hWP+Xv)2}JonKR_gkiH|!=6Hy&IJ>=;3XHQkd z=HTN-htPP?2H^jC{eiTe@emYT>|8 zkO7f>oLWR(r6w1j6stcIf5iuL17q3^+)y)nAs9mxCS#bbTL&ZM|21~+BT7*Fm*lVTr#PCiOt7v%GcwQ>aVZ-i#VH{FSg=8 zok-BS$wtLtG5E&lvQ(9K01Tm@cgu6Gs@U%=4SD!px#8p;ovL>}zfCUus`2ZOY?$r! zOk$n%d6Mk6%KWrH@@@EvudUpORw5LtA51;o)y6oCq|xN0Di|B9C}xo?{RT#YjH0jo z$dc9=O*Ok>p)T8ha&&ze{p=x0u(kC$sF2G8FPeKlqW@}bJT$xxtu|H}*IBtrzw6W1ZcAbr3lB))6 zzP2*`5;C8pp6=5n3S^`tjihg6I5#rnj82l5Ay<30*cJ~YIr5HW#{2i~frQ^xbc zg<~Elv#IOUNW^g4lXzE?C`UG>oUQ#nu79dee&rC=XTY8Jc9U3uTyIPq)B9L&B@2OU zK1t$fuEAEGwCe<9+c424vxJx|g>e^#Y~AaNBq%Uo#3rT_eivi|Fp<3SmaD@<-AiJQ z%I|V-Q2Z=g0Q1CPz=qK&S8Kk~H%bXHXJ1HEn|QSA>KS}VfUBwg(*Rs(7@Rs2uGqF# zB|vAOHK!X%JqnFj!4qzdD6d9|;22=wQU#gC2A=48$F1=V;X4fWQ_62$mt_^vHAN=P zKI%^g9a)}b*K*Ew&e!*Sa^?IoLA@@*9Ubkn3grXWxTTw@tR8}EHV)lnzL`J(>mn#4 z4HlDlTHiEOq|$?y{fF>b|5dB*RZMdF$vwcWZ?7_wWCAoQJS)afJM=dm;=}NW1{R(Pa?tj9i!u$H^`!$xq0VcwZ;1Jx zt@?EIe20liW}PThy5w=2w?VbwBA(rG{|A-^!E~oQU)R{cp2{Z*2D z+UHV`7e{``Ml)NWQP%4-U?%P8&S}taQ5R{!s%dE9{#DB?KV&Fs&q;4tm!!%8X<@D- z5k)%V8PvM4t;~9dAZcr$B*9f`rJy#}jQteyID%`}Ubf7`=f`=b+tv33@^iZVEY7O? zZJ|_rYRcs<6c?%bH7k%Rj%0g6(7u-bmH^S8D3Qvw4|Z3q<%9s)?(^jnJssM1g#@*}jC7V@m*@%H zx*Cl7;KJ?>+)ajV%{eu%tcdh?UKx5cHd*ST&Ig8z`Ib=6g8bv_&6m$!hE|LiAOMQb zqaw=X-y&HgWfBso9xwtF$+b zxIa^A;F(QJUYeweHJasC(igh)xG>|*Ul*{MW8S^fAk zQ-d;#UZ$r1l@3`0fLrY_1}5#l`{514;6?5TnA3Q<&0a`@S5iBe7FVAh{yD^?sm`NR za799$yTfjNtUW2?VU+qoc}Y>Vz$A3myyAaPAXEon2>ut5u%-_mGCFQtAhKh~Y^fZUnk*w(%tftiNss>uQ_S3&*S6%@;~8umE~7?iR#Iu&yL8l2_^*CV(PS>WFYDJC-SY)i#Y)& zS&EePn(<0;R)RV-YIH||FUJ_=eW? zFT6D<`{JZsf(=fld(6HNx&wb_`Xo6APtu^!ESxUuv^M1{`uM+1herj++4 zL0xI#DSzI9IWowUu7LM0ji_1H*eod1F(r)in-K;Mz&5Nzjhmc0?t~Yqpnx<_~pPkXK8`Wn}&-YK&srI#yTF0MV zzGL_$bTZunjo#MEk)mOpC^yloaG~4DICz*jJK9TmI;--`HAYUreEJ%k4{-dJ$|Q>0 zZVqPw2d~t{oXob(NV5gm+#;A^6~eEzi<~r8+${j4g5Oo@dlD0V<*zcS^EY)>J6dr| zq#918&__S(@h~7*s(YbWYLt=TZUFpb7!}5`9~2sUGwz7Fx0ryd@?m#q$CXEt<>7(V zl=RKcW72G2kPlQCNHPmb`!Ql8-2hDAbv^X~r*Li_TR#@%F265bYi_+AhX8{ye$ZP? zU3Uv?-k*XFG_+p{`jiBbQ~fn6rPZuUf9elEg=hQh(mXD_BkOAht3c|hj6vs3txIsh z0sOHYUFbT5zf1IA2f#pk(TUOkC^B3YjxiXe0f;j-xvEeRNi5YBPAE@sx|4NElQ-X| zxJQr7UEplF6!m!0`^jiVV=u}Q^JO@Nr zs`0vP)=RNo2Qb?W+&Ff%aq9#!yZP$WC<1cj<6>tf;H7uU^k6HJ|07@npLdYH7}Pdl z!osoOzVM`wl9R|?-&K}CcPLr#cRoY8G#`fC41JcVkg4zfO2n|qw8UHNwZTdsK^gxU zg?R$l!KXon>dVLqsi@KLWgghm{!6~ycsdw|+Xa*;qHW_VCTYKyh-1IWVFZ^EGD*GF z2HY4L-$e0{r6r<%bLa}0j@N}3tC@z@afO{u-8o;fdAIe;(lLj)qRY6^KC1J)syOkM zyBo{D|5biG(DP)a!T^^TK{9w|YLI()D{4&ZWTHDq)7W;7JJ)}5{;1~BKBu&=W)z5W z1iQPyR9J+G1OsH3Ta@oxt{Ole72#qsAfEIf%vqz&ok|4NxQJpT&VIC!RTw2%idMitAm^8}S}?L|nk(RdDL(4t2*6O3 zIsRddJQGPR?gEC zmnpw0ryS)hfQqmO&8xogvc+e2@=10Ly)t!K`=I`ot0H26z1-x zVW=k%Dj}w!#+e5-1){oara41JB=HFEI-{;Z{Y|a~n%Y_~^UB=fpQm}2r)6ngQka#r z2xDS2NWh}F;y38R4E1hJMDg^wnKM_}5RDvQRlYUf#!2;~H)EZM5h3ZDKsfw~pAk!$4mMDL6o;#YKxhX%2iny-0qqn^@ z+h~T&Q=f;ZwA4!;or!Bhu(hqjoZwTEX3U=76Iper@PL=sf_7ahai*E7k;#3|=km2%r7Q`09`%T1K}ovCf_#wFD<+z9-#2jarYOc*H$NKgwkV$n*&=Rn zC%1~z_8{j6;&q*~6jS{jP^!_SpiM+}OilQQXBtPN)$x;zesOVmPem6-a=%paWIP)} zpMcA8mMw*0Z@xKhp5Om=^t+pZPhKxM1WlDxp)##{R{#0~cBG2He|iq3r|NN$;G0k^ z5?0}g&=Ucj_R3FapNm#>mH4 zUfPA%}sMRxo5-Uqb zXePuhTk!y!AIjapl7GB{wE7LNNBj9Dz1H`fQ&dT}smm__(oaF0$l?PJ?SW;&c+By* zzx?@FF?fR?{rvfV%KjAo?7rMMhc5m}5SL}^$H?a%neMZ=mBBK>PM+5Mb<*V$X`<@j zi{z5y<*c>bi?U!EsfSPYg}8VAQ>e}jvWwZk=xAR4pC3Ra6ywtI^8(5dHsMC~By;9& zY`u&EVd6U5~wAMd5Y&T>hH=^^m4FWeE6aH&F~!O`wpx zlZ@;fRcZ?*W+cY(?Dcq={;WsW?qh!J7zJkazAN6?;sy%)RkP9MbfTPo+4l@FST)C3 zMWLTerme4)Tk*yr?MqO7fi<>PjbFB>9$=|4A6OMp|ALR9h#0LoHE%sDuIj_&(ud)S z&j5Xvy~6U}HQ!Ss;d0J-^xj0JCLnI%fbj9OroH)=b4z)_W)^B-Ub#CZM@mM3)lgR! zJ`xlX;=}$*bZT$oMa&n4wcLC|9vKOdQ$wMuw^h48>C%{eCC!c+YA)wx{3po2Ihc+0 zgLJ*pH4#?$Ipd})oCN&i5%DR=JaasG7|gbch0H zvyy#JU}~!M;VLJfUi|a7$dM*28&s&&k>*HKPSgHdbzlXVhH<%H=xJp~sfF^^TE$Iz zEiGHYarkvn1%h|$keLz1mrxFRY^yv;Q1N$aF8!QIB8SBPWE8lPBtkZPu}12=CaGD;3+(!7bVsyXCWhb+m^g>eole~B5WZD4 zSmlDC56T605u2^J51&M>SJ-0ZpH=25i<#!{*l>mXF>%DsIZ(Xp?0L)ml{R*JWEsCf znNHcm4<7riTR}-esZ2MZR!_MUacZ;JJ*d%Wwg}bub%3)a>A9LF$}rS_Eofk?uFq9f z=Aby(=Sk9cev~bCS!jbK>HgON1Vb_E^i)p?ZEZTh&NQfNP^$I<29@T-$uds6n<#;{ zl9MaHWjG z0rO}5W0S|*J>u9Z&ji{F?dIZv=~X6qY{WTmi)qTV3x3!_s|nsW4m#=LcM;$9^c^BE z`OhLWOe_qIz;#S?%$`AtK!j&F^9{$hSRDg$r-kpC{?aP5nZ%Riq%|jz-<3IC98SrZ zR+;L^7Aw;sn`l|stsDy_G8*huwt~Q~wW^%bZWH4V;t}k81u=+-mzgo)0e&tx`0N*$ z5Pn~ih9fC6PvJ&EITMv1bb54>vF&r@846zI=SkL;nX(QASH#=J?(cRE>r52HMT-#< zso})jPBA|dd`h5S?!g}@2%)c%2(lO8TZwj+gS!ZF+OykozV#`*x#S&ZOI;*$h2}-KMIEKc?&e;}*N8ftD`N8K!k+D)khV-X}h#ja`P6=H; z%obx^@LvH4g}&H=sJUXRTNMD+Fi}$=Qcrc(IvJku1dj4{lqtR=!@6R6#+c&Q+D9s6 znjdsM=}{ayqu87m>QOB#2Anhz&>c&vQ5Ck~1-5CE%KG)=Je(L;v6kBolkB2 z#%YtY)!p!8c?p?5wGP*|{=V4Z(e=||oLn|RR3RTU8~n>8;N35Px4XA|oES!Q3BX8u zwp2!_%dJ)&bD<32$(>LjTnfVFnIx@K4b4(tBy(d!Qe>JeA)11_u{o}ssFR-7xY*ZS z&x!yk1$}=VK6td~Ae)hNR7{HiW*(}Q*aDIolP!UA_S{WXV`@Aj zT*&^k-6P(0usw{N_B5cz?%j%}b>_77ErOjgAs_6L-`c&^#He@SeTba%%%wdmgpf$@ zb=nm%D}cGIR40dAYO-H(C}JR`X;dd&*ig8@4*`?64|cr)A1C4*$qa{h1~1bJ0%7Z( za6Wdh8`C32+p2kRRx6M0yZ$ExsjR?-eHjOZPJG75KDMR#UH3z%CTKFwXumBoY1CGG z$tY+u5Gq^Z(lfyhI~O zPoT9anhI?9{j&S#OhTLNKMG^K>O=x|htqs_Bp%1r%*;gd-gtY&{kwPT*<4!#WoDQh zN!rG=L9f;iS-5=RLimmyi{2X;F!^HAD%B5gm5*vy;wx#V@H__dbQ8nNHvVtJnT|1Tf|wOzs0D>lUBxR@mOZX)Q|caNzjZfQ5$5s*K-mrS#lhmjb+GrRpL= zW0$zByuSm&DXS}N&f#gM(XiLAoBsTI{z<+=my>V_o-U^AKvkz%ZC1Nb%CU5Ee)3jP zr}r(afRfOcquq#UG6^OEbwW#^@X)E4mjgq8wM&fCaSw%j`25IyzEGe{}^GVs}OmCk!x(f8-h{X8Z&^#ted zUGcis5$^9{fu3=CtT7cI!&{rKdw=>ez3IsQ^C6^RBdE!q>teOBnMd?Y&v{B-b#NX` zX!DYR(3b>g_#@QsVn3piiuM zS^*PKqM=-l)lQ>hZPLiS>yhKErG)d*t()wLD6TEc8F)&1=0^W#dRAlRwm`J}Kd3{- zaqcI3v8n_7_VtF-oGNto9d-%Ry5`upoH(oU7)>cBY$KV-k%O1b?}Mab*Xh2x*BUg( z3O1dHYiF08g1r=4X#h3*lI*j^0CV_qxZbsi;h}M{WKqy;j zuuB(@%mj>@Z1?;MT+m3T*7b@Ek3Ct~`l8R`>qoB>MWA2O*3>jyjlJyS`wPM3Sgd*b zb96L@a;URpxy|OtS2>__gQH#rth~rD_ZL>_*LvmR|3>3_4(jKXom=n#nI6_$_XCMF zoCkaT@!fh_31wxDQD(JG*CtRBx^kX)UrKayytVMhUFfwezKGSx3eHPc^rhiDQsKUZ za0tBJ&@Z~$M@m3MNXk)rt@Jus@JW3Pm{oTG(V*asE)i3Z@J|J*lClU}z#DD#s)VFy zt9o%S>u)LRkcQ%;Q{B$G=Su%N04gR`MMo87h_QjkIn&6XMDR0|Cs-gcd=z2l8`0d< z7T>y?urHJqD74(4=VGdu6Oy>4()bjFw7}z~?f!f5=-w~&idpTdjMt)tg~;FiqR8U> z;py~Nos(0iiU-X}jGFD4_wYVxyZYUX=b8`_4DQ-=?iU;>@;T692 z;=yf&b(<}$;~@K;qVN=nGWT$vtNOdW#i^eo==eOc+ED>6T{2MU!d1K@9tDeZeLU-` z1-~5MKrl&5Z%XiLj^~=y`&Ws{(P(w!Q z2|egh^xbZ9PMAwT_Jkk(3;E(0q)ZqGlH2qZ?K>P{PbHlMt~La<20XGK&2v z4FT!U;bJVcd$ceG1tn!OmP!f8auP)7=~3aSM_?I&`#2XiJ9CkA%CVQ6h zWo|I>>AwO{4}Gca_gN3M2_8g&u~5fw#>U@h|Lp+?+iab)1iGVvm)2{>Z@q;igk&_& z;A{Cl2k#+sjykcq8^Nc}a~;sm=zpmMn^%kNPOX^OQ?~X}v44TUln1vJ%#vIy7AO9??wiKB>KQEF^ zhsF8FdFAOXx_(1n6{I0L+gg{T5{G-JB@~js{Als2G6e9VIUTy^fjo%q-`y}*`^3Cm z(uzqy%P_a#;yV@aUc11HI7>QnO}Ane(l0e_0_2UJX((%${R$&s;XfH>L* z+W?l5&{sMnI_+IP^9o5V=OO>^vNXIHW#X()1G_+HzJ zotGc%4bp!SW&eFJz4dIrNh#n5?V+*@Syxof6U?AWM!;VW8+5g(Qo=vzv}H5<%9Nru z5$8u`c5w}LFQhZOUnkhK*4(Et=&I~#wq59#vsA8-bDo=?==AJZr(n7;$>FAN($P_|2s{o>+C7prF7!%>Sq zcz^-dT;SkfqK7z#=-E)UiHjJe?D{j7RN3|X>mQvu&N$?3(Lk&dzgRM-rP#AQvPORL zjIl$jo0&sAh$YtSJ_r=I^j7(Myi@n%B27HDOK`~hhtf7yrFzeaq}3u6`7OOV~qUZfqJ=hJ9NHw*3Rka0{J(L_xYa*A^6_T8zJ zS=@zZ)v-nkBO4)zH^q+x$%>N_<=M0bWoWbPm}Fq>y=<(H-qQhRM%B+{I7(qiIN!ug~mV|Lv@l2U2Mn^YY3X zS*o}vppu8qo!85;kp*(-IhWYkL__4eRO-@gc=|-~A^=P{ZwsB;!J131@^jrrOU9)- zBGq8~Wy9d|9hG}l1)#rzZ=*jREibVVG}jqcX77k9$dVbkMY@O*|<-4xV70v6Im)F*+h=8 zpf;6#l$^YSnvPw1v7;79yM~}RfP~IVn@@zrotccqns{niDBl3zYfG#TQOgTsMLo%f zcK8mp*xXkRTLz*NpkPOGb;CNWR2@9BPdp>P@(l~rRXnAx9oJk&NgZauwM(txNZj@K z!SEETecN4N&l`x3^BD(P3E(ZREx3HoYT;>sxsR`cVF(#CtIW?x!I>vtEzt5J5@WgO z+nD^*6)@p79yLu0lrvnkl-p2t4yTWkxovSf*-Iv&Wh=|>=5Tx1ER`~FWde|2%vBsZ zEROrIF>ub<&95`t@W`SRapUtbSCG+l2k7CeAtakl6L^#@ z!oiW!!Xc>WguU4%CA7VB%yvNIv2&L%Br$4%!=V9pY2qlCT-Px#vIia1$7k*E@GL9y$NYZ;0J{SKf+k>OIPWd& zfJy5g?&f$;|D52_iGNP;K=+fzsWy)coC+%(QO#oI$l2qw zo8{_zKif2pzpZDCH#p8+=buYSbu}E1D(^PW;2sx9rolPEuM3|cHgI&094Hvtd35ajJT0s^s-W}voIj$NgBEh_6&lc zEWYMT{X^MMLkqGR`35Xog@_T3IC*NBVHR&UsL4n?VR?)x6IHo?l|$^fYBoLqq>HNZ zSsK%g`8cI9;Qhn2el(!7wBj<)xnqW56y=iV0++VCV0?5_bNC@qDY@!HS^rZ zlYcs<&tIl!%ywp_w|&6dtG1{!uA_2Sv*h_fqbuXrMYOXbI@qpayEeQxnxXq^+x-$M zCfL*i#4s=^&mdeim(Som0859^81ASU1TAmH;&VN(#s+wv)(tG;3#_Pg*=RJAARW#b z`D8dC+08bQeN#Q!(-U-BL@gLO0T%K6n*jK5h!(o4|8|1o5}g0-1mhlRu>Q*e5whC1 z!}bB>?0HZ-(oogdt4PaeI~Eb?by|)VkcXJ%2GlxY;89;uXRhe&90YCX8*#g- z2As4o7)q)(;I~Dz6!rjGQW-744~85{#{mxu-c>#5t9lV<407v#g21%@-;>Y(@q-o) zpCF0y?DZ2!VM#GgkMBWxuD%bov|U^h)){8kT|rV>onB=N=!hG9;cIjgU905RooPJu zFm{Vu>q^bP`sIFz)S=!OjiOeT8*zseB_1|buf~s86DMI^%G}vp_%e+8iQ`FguJ!B^Kbc(JVpwnvFgG}t2qY0C^sR&wZ~D(vhq z1vYM79p*O})nm@j;<))%fU-_^KuwSe@wx%^hXK9;t(TWr8B{npl*nT3g#1gZ?A9YQkm6=ykhzI9FFI6D zO4{8wZ-UJ>Za)Z6N&K0SD>?Zy!keZs1|7_SBTCVil%!DySxR3f@vdx}HUF>Q(;+Np-TaZpR2yKV3rc0=h z-g4WSos?NX*rNA)H2FcK2hS&80TxqrtkrNVAcO1SL+#2j{acvr!`cU zT%LaVB=ci2`H;!&o);F}Tl#9woE*f1kzuH$gwl-u#CpM}Xcqbe;ptSGk7(ofxZLba zxgPB;TUgw9xVDzMuaG_Vpjxzr~c zwL9#6+kfNL2?cfUH)BOA_vKVNFgow;eBGNE&vBqf-giI^+)8-0W;wOlvvl(I72UiT zk9E|oy=A|sKoyyarY3_JogpjhD@MJ~29orjiG_}@O}JK zlx9mJzuE-ldngfI8kedT9g(#YElpiPFZrsjeU&U7jxSGN(3H>BGj~*`kRFTsM;n5UY#347t4^pq8>gLE z=BU6T$h5a!r6cJ*Ra&7+r0==Y@uf}%krrj%vUk2b*G;hzXA~$A}J=D9R1(P#B(SU$d4)d>&ISZXb~Ox=f1xd z`NCenCifvLC*gNScZ2Zga%U<@kwi!NRv)+Vu7Y>SJq_VJsLtZgQ|0@fF)-A!e+w{o z_wAnm%;AuW+$O|vg1whBnV%vBZ1rFAuScQ8D9rw>X%hj6fq|M}FuCxsy0 z*x3QI4+7g%0S6Bp44H(P6-<&ok?)#R$pAmJEE4kCx?imUY;l^`O@61SQa)c?@Jrlm zV_q3+=IE6v;rHSW*F;^ai$dW6ilDmDf*r7X)c>V2yYMZB(-%d}fFs5<8his;>5m0P zkwNcE`k=WgrzMJM-4ZOd!W3pLfAyBbr78mEKgY$T&7rP&F4nu~Vb2M=!l)~1G|B_A zF*!_L4rbRx5LrATV|wWMyu}lHAG`aRyP%7f`q0EYzZ1s~o6FgAw@qlC`aP(9wrKux zA#e8Rd_{ey^R8bHLg8GwlH3O;VW2f~S0SfK@CD7z(%BA@>)ZT<{DuzX%^_cc8TXlR zNVd78#3qo}DE9qs4_OvQZNgS5w4#l8K534GC?T1%L?fZHkqQ;@TihW_6pfe5T+x~w zUKUHr;M^=GVPS8W_q};IAKv?3C~!JeD<#RacmAMM_rC9P$TwQQpy7nfVC8g0VDr`_ zMps-=L7*ZIk;OY=?=%s|U1QB$%cNaEuZPH~a~lMO6Qsn5TVp;0(8<)eOMe}=)4`W7 z$r~MK1i0e$-^8dnx)F}q36>QX5*Lj{j=zM+-oMt>S9Chuice%jDvlUY@Y62)E7SZ-CQXH!)(3+c)|G4!#``F1fT1^v9Ix86@RxsrcX?Ll;Q|d9 zv}JP$zIQtW{*4(cUEDb0E76dPuoC9Ky|XJB>U2^u+iOV_#c;#d8nsUa@K7hj$`8Nj zusTaH;h?{1ia0KN<)E6n$^$R3WzL~qC^6~z;?vM$>Uo7nTyWuVq@}9WEnzn>N;~_0 z@J}yeMuqM+1W^K??Cm@Bj6^kUmJYW|L6%jW##aMs%u0;~3IPk){{)~JhFln;&;|oz ztu}SH*`K-_KK!dm$F~zJQK>ejKGB*l00+(?K1`Is7xAk1a0R zc{VLHT@@d|`BX4TH`~pvlj6^`d{^kf&DLp`*;qhEq6pB_U(XThSpIDu;6fHNVN9M@ zkf_zEdh@9KGnZ$ooJ=TS#v8E5V25DUfLn;45B9=?8;L|X)F3mliVwh#r2Sc}Zq`Se zu7?P)(ZM4vMNn{9W~DAza*0whu@+#iC5=A#DPLIexGCKwK-i!2IC%V*$dEF^kl14$ zV#8y~vE%F?!jIM_vCx)D5PfJ@CSvlHr=f_xf1VsygkI0>a_V^7fYp=%xbwVB2uUBO;MLsa6G zFtLzX6(h=wq;#U3({4uU%Y7zpe<~Fa` zsufIl{3-f&b@dmOa@+`))!oJSx!)q?FVAuubSy@iMpe+Otoa23UZztc>xz1rEOl+R zar=Irj(p`$^s;(8uk26Kr10JkHR-i!;mR*Q#-Tay#(unh>f4kddQ9)$=_9b(+TpwG zav?>ReH?AWdul#%N!kFkk19H6ran3R@f2h4|1cR&FFY`bkAq265A{6glp{lcyt-Vq_*N`6mFbFr-TJsTE8$s}43}a_dt!;+J;} zRRhTppI8p=V3%NRopEIX|7zJKcq!}FELoLl1HGYu;R%Eh{a6M@&uR_IB{~}dRrKMC z7@U6Sv+VYgXb_n_`30EZ_2a__QODQgCq!rzxiPv+EYVxqY>m!L4KeV48?YQDmPL3G3X0%U2E$f3$Xr5)Z!&F^YYbAKs{nRJr(#5*cnh8X}4Y4lH~K zFMEuh*2qpsh{4g4zG{PTk$k^MV{}q1$uv`9pRMi9t7*zcjH}VkhRf_9ZaoLE(|#oM zvNr+H)vuvyf4}0`6wRF*`+BU6&(*%>zVW-9FZFw)X2B$W+^LNnNVC`^^Jm(`y*PQc z;l+>1k)&_Hax=3mA4&Jn?y!Q+o2?l`aoh9BYw!0EFgzKD<1$0UTIpw&t<&Pwg zI!&*r3&J88 z$4*k0sHq~VQO70pGzo~<*kndjGQll3ZD=1^yyOtlon%Dh73}Ek6o}}g*ij;rc!p?o zzN3Zd9DW?1GpM;JeEr*uUb9xd(-}^QvmF1uqiUTZ`QB9GDE}-IeG287g_*ia$nR7_ z#rmRGQ%ulugbquOAGc`lYRmdOabN93sgvtg-$2Z{Vk;QQkVv%+ z%rXQ>i*;zZM`2|xf2smyUo=fc*r1CtD0lGUA*b@X3R_Q+Wy!@miz`y$wx zUZ!Z~aMkPAsM95hMHQl(w2~K!l=$>nzSYuQ@)?BwW9wIG4HN=-xTt?spZ{Ptcl=JQ z#qY>rCBW_Qtv#!Xn`T^LZrLm&#t-^3ig!SguogKpHEU6owz>_1d6vx9G+OvHl8$H@ z6@A36gfMuZxc%YSUU8W+Wvph|W+7fDA3_(>qw*GCl>G7ms_g3C2@xuFB+$(L%>fRj zatQ*dDBcQ`oPkJ3-fbqEDx88}o)qF3n@)%H-I{I<4Tjm!UB8Cx@SWD`v9iz$}{TUE8Lb}#qv#Wty4)&3u z6E)hy9Yan}jpUEhFfNZZW7anMAR|E)8L-lTC!edyH9V(ugqv8v#nAhi25jzl+N-A; zb(6PKxrXju(hMOz@i!L{m+V9J>g>uEd4szl&R&i`(=KI}(by05!62OWy;x!=^Q)2X zxaPKCCV?_CYi;81+?B_!;arb&k99IO)KZ;wUbYag-4E_Q{hsR+2t4`lf$ug$G^F6F z;IE5^blZbP)nCn!y1O5z(3$P3${<_X%SP&93;E3&T1KXVcBEzbN~4v6DX+UQJ6`BQ zh>0F;v44+twkfx>fESK_4sIegyOded)SV)->z9F4^?l&z@htP67`YKJXRQbZ+)B1K zYux)=1!*wJNwq-5Hs`GJx`CEtWpamPOyZ!dD0uMV+joX$%b5m(q0<#wWS>~4)5`-+ zns@v)-pDPD>9Y^j|MoBy^7LF`{z-N3tW=Zo`f@3>S@`7{5~E`B>?fdPiD_qHTHW^R z)%H{Bi)BdD^bk=6D>FrBII&uu{iU+UnB0oGa6q9R`xq)l+=V5LLbd%QwexJ*VQsGm z@WK%@*d!edxwU1#DTp{)UYGAI8xI#7xl*bwXyaL5du+@mmschN$zg8Zo|utvK5o%= z=AQt#!;t88m6u=*G2jFhb4d;mDd-;=E_vh#R+Rm_r3D{$8Xr}hqEJr8J47lGI7A`< z=x_6F7h`tpvHRzR&t^j_oXSZ@|(_W{ukZ0_XPNHt8CO#Q`=9`Av zE9Nl&&DUqt#OTB_+MCo8JucUPHO>f|<)+Uql@&QzuN83$L<5!&_wt#Vzq zwW_Qd0}Mq}bD>_D<-$h#)+<@3lfD{j$1D0{w`d`4{P$73SIEWA1c?NkW|25Y8cYr! zf|(s0JX8ihANx29{(wAK5iSC-NgA13t~0T96{c{2T$x~VWrFBpUrCh$4?>r90u2JJ zmgs_OzjiKm0txvD70>xujpovA0;c6gbn|Vl1OJaOhJIN@4XwW|lDW1f!dxj(ovEpZ zzD5PbL1`MVjtz|?MQwQ08~U5BD#TV$(eZG6@@Ks3N09fpDz$MOS#GV$oIS>eg?ZQSg535+$2O1!AW@6`rM3T)<611zk3_LWy{y17zN}b zh}NrGm()%n`4KE)xnFs`hQ@WwNXjND&ZK`kmWDb^SLdX#rl8{Nz5h=DFf7WA4eSVH z>)GjIOb%;_Bz#f(*A$=7Qe(&Ri?=!Apg;n^8t--eSn=(1&`k=_se9wW=4Rf)?91f~ z|4N%V^kK7p{KA_MiESAj*|LONwP^CvMAec+W8&8s4L!Yg$>{99TwZzZ12!I|CIL~tw4T+YjEe(eaPJqd&+ZZ1M5}{GA$sQ<8TM!y&!@CDXI$TnLPT!4 zv#<)G!gjDv!4Kc)0#$&nPcXtZMG`%2Pyr`eN5WuMD47m=!zO_&^K0mIuQgd%ra9oh(*!fR6NoMz7Zo5ZhX!d9+k~a z+=#Q9^Yw#< zk`&(3{iCL#~oe4Nz?coxfTmOE?G zEM?Vj&ZxU!nt7vQ<1R;l^uSi548Y}Z_&F$Vu%Nv`oPO?WNF1k@Fj-h~f68zozqsln zKk)NH%xJiE4{C8P)2jd5?Mr8>5tGsH6f-WJP`3TOo?Dd=%#(8y&2-cv#vF6E+_c(2 zwD=ky^om<=7xFR9j|Dnwq-TjK2ENa^k{@ZB0RIG_35Wa|I`)qW@x6%@Z2!aE7_aL; zXhbd%TNoO#Ckw|~LY4~rrw8@t>Dj^=rBf6@%l+GZT?;UMj8P(p@EUCDF1vLUtgJ>ahgjRo2Dyn=I9> zl6(}g@O{X-A5-4fMktZ#=En)Mi5w>={b)?JL%H*23qr_eo;qZXd5G--nsT9NCg){x zgNtLrdgbRPI<~CKzWOC$a>)v?MB}>wR&u2ltJ9H{iPaX5#L+J_Tf$>E%bXXFjQ404 zBF$y|ODhh=laZXewuJHdgX6xxo(6uKngp3(K6Ts*9Zv9{yu3pyg<7Rip?UVuVkKH| z+=Nz{A+K-?-^HCh%*S-MeQHVftCLx?w<@2VbzXhi zf6<#5S|jVfara7clM(zIWXJqk;hwXD%ao@=ovAUn_lFS3n=3 zPoXRJ53i8p211>!cOE>N^Up+ItAt&zQO77UV+jVHdRr=J5j!)}kbeoJUa6JuuE?b7 znP6o|;DVN`BZ7wD+X*MkX;6SWN`MVBx_1y&D44 zfZ2Ei(cP`v3dZ}{&NbrIvqp*d*#1o)=D(oShc$Y>_+xum9nQS_x1;r^Zw^nA!RsG{ z8ou>DU$ROMtQI=Fni{tHzq@fJa(QP($}HIpRA!(>$In;!{O$W|z(hT>{gU_kV}Lts zSrvWq8@vQd{2M3o3EhUNe*%Cx!Ad~YU6>ObqY66$or3TLH8}tE17NdOw8MOWy?!JU zmot4qw_2h1n(EVCqE&2BI&7@Lyw1chl!;k5|7HCUiv^UFG+e4rC+{2jdmBsE+OsAW z&7-z#@D!)YnI)BP%$5ai^$cHNy2r%6QGJ~sD^EyX5{lY@U2?L*K<#wVG6tXwpG`i~ z>O;R5$j%NlSniP6KPO(0RQ^ps7kJHlp3@qTb#uv#f%V`s?{XMuHR5)W2P4@eTZ`5VoBzykN-BMO1>_E@ z39^)^0vob{dnOHMG?fSszBDp*e7lR9jaQ>gpV%ZoWyag5SBMbDOmrvoFyyPXkQGbk zEr&{mv!RdJ`>stObk{tjDxO~`8Di7doJ|e*x#W`Kr)eTiZ;S~kP?ogJ#hn8x(M2bq z`7Eo)!s~5l^hxn+MHVb;LjGB|*+&yqoKa2p&we)%?<5UFAIKvf3+Nx_2A_QCBO>J& zHXKsR(HKEvE6JTxF>lp4DLhJqOD*ZXxpvayu9SyqjIMtBslrmLo}W{pa!qaLb)_NS zRUFeoN|oURYYrx`S_NuYBWNwB8@*RS9;=61R}Ft6%}|{Zw70A04CJR;Sc_T85*8-- z+-KKms3oQs<5QF0kXV)Wn{9zd@KJy0l=JKHdsRp>=|?l%W2E{)ZJqE30qzAa`dOP z^=6V}_h$7+`p}^bB&2q;FwIL*qb&aJ!4-ID$gy$R0!{k`@9ZQ2aFHVjbwI&Nc!Uuvk&7Q_Ql-=O^b50oM*C!i__BHmPoH}Y)E~Kur5fnX2eh~Bz<-h#(`H)u8JD>_rY3Ab1UNWMgkJ2p`lLW4 zLh&hStZKILu&vtBIP4LfX1#buLLCG8=h9lTN(z%$>tio3KIWjAy$hMz`UhzkE$oRP z>|>~`t#^Jq50Zq9lEsJAix^fL*(oK~osk$iY{#?HsZXiPN3d3Gkg-0iw&lE^-DxLt zs=*e7Ip*u-^pY_3lW|?*Nw>aSvJ(p5{E>A$0wEcphRejS!*8+pIRQoDb0@?pe;srm zS-;S*dzMO?ceDzy7`{kUFkiy5Kg<3hBms@-=E+zc>qacmz{y4xMg-YV5v+38fuaA2gbETIZRo zUk~yL=yCFo^3wkk0CpH6KX7{KNX;r4HUVHAVR)=+tV$5hQuG?ee-i*09;6is#;}PA zFOFHQn&BuSe2iKJoS)nq1L#5d(==|a3GAr49M!GXksyMdsxuaeqZ5Y9@;XUDqQpKG z^9q+*>nZgK)Ht)PR!GfTXG&8FedG2Bh(2qXLT#OpUG4QZ%TxdPL-!Ivfjt%30?-r^ zTLzFcQ(-S#L#-vn-lWKEq+I!pM!RZxwx;qF^VHqr7&g~PU+tCV%-PZro(2;zT~uGE zghW^{Ro@LXGM#CtP?ULS2l5A(v_C#8TS z@?E;Bs-0RJddjBX#u(}|K@Qk~v5nhC{1ud<5nOOMk>N%;0uL`T^~Ek2W3x&5xeC5c zi;g+N`?u2WxIQX9i?Il?|3)%1Y{UoiYiApLYOuFNnkLp0SmBY=B#uWwp{)x6q<5l*fcI>5xHGQyTGE*VyE)R5X8U<5G)E zx#=2@2D~o#aq$b7Fke-ECoCQP?bI=`Q`~VQW`luGi-V)R+nwT=)3Yu?4I=qX9J&Hw z;ty+(qrSa8%~lej>A7nAz<6?`N*cn9!$rITD=wXN{DmKlQm)Igx2wXWy{Y=!?3s5H z_9WmG75{^Fg3CIHD5GB=$=5Z9M)|M<4M%!Ee?VYlhfU{J+W-3S|Gz&F-Y%8=VGa9` zGrXdtM{Le&%aY7#bOyh+K-C>Mj|UfY)oV6|tA4W&FS=0YZw;(O;;e1HgwGMnfN0Fk z*lQ(SbUJTm53L_t)dc@0i2ornZ4<9QBva19oo)%ws2gz_wm(j^^XC`f0YkkJfMTki{;4KG_vchcm~RO&D) z1Y*;EVQfoF)i)1Rh?$5DL5vkAt9|+T!WW*EU&JMalt*jgh`C=Tjq?=Sq-J}XOKSeq zOiBSVr#^jht*khuEcnl!SQRzVD!&y4 z^KT`u9Y03!^g$`)`t-{T)czR4n_Ru!{x!$hZ%rt|@v8i5f?h3XShD1akT^%N@cw)~ zUX#sC*Ce#RzsD5|lAlE^>x#bLSD7HRT;S`M>G#)cfoJ(lP9RZ7e>CdNYcdEY)mh^( ziSj+B2S;fCBxOyTBn6JXPe8-3m5I%FA7yWINNZNvP!X95nsLG+XG-{UiV?#*wF1@4v0wsfg2z2g`Z&5>48w}QLI?m&GKn!4sR z&k=^!<+tNjaYn6-!uUB2ZhBvueiXK6m&^S@wCO7k&ZDA+#hEB4a+Hw^s!zrz&@hRv z9M7?*?fLE@en+fqv^BTj3eNSho*-r5Z;=U8;dhrpg_n>`NH)cf!p^@sc^9J(pHumI z?t&XuEFh3C9}5>QY_)O>4@44cJ+QPSxP3?eov)Jx$il1EAGe;g=#E747NYp&IM zFl&B^eyFbVhKv~13hCx4RBJRZ{<&OX-&uIjW}bBH5VfO~6sFzOaqD(IS(;u?m|*rA zE5!X%aWm?Abi`9`xyqY7ql+Tn)NBw!ZhzvU^0Ul>!%kJQR%cY%t${meVvChMwlUu* zKKrX0A#>dq#|(Zf(r|dpB|DF@{I8;2chB<&&$CBIhox(@RF$%7#mvK6Ye#=R>WGnz zAq&}mnhx{oG6t0~r10Rn)Pm_af-KKc5Bcj??D;zo$NC`?Gd=JDLOGN|zgz4x8D_Gl z<5DQV?gh&(lF|EPiE;k~Kn;g@qN@rc!#P3D{>uiT?3h}$5eG{F(b*QNS zWPjeWO5b{!f^L@HBm(+q$4?>1qR2@?N?kjq5k%q4vZH3<0$bkO$KESlt5hT4VkxCv>$^gQuFd5<_vctF-;7bAru`z zKe;NuErqLo&ypkWa&!#z4+@w~Y6U$uWPXn%)rU6q{0Qg4IJ^tS$qky?r#YYZRbW@g zP%f8szxn$MdQepAd!hRbn%)_GKg@sz~JZ5}ynacbGi=JPH($_6| zD62PXa(1M=gbA06Da`EH*Pa78zWg&NZ#CkYBt1yCWDI})13`FM5FS`9T?IEW~!laW#h zq}R$U%YP%7fpJa$$N-{_;%n9lb*lRIU(vbfxR zgj(2V3)b#HiI6#>qxg~yIm0+^n2GJ`A-0_ zjxaK}NnH+G?@=t$Gy5cWW5F&mm=QLkF11e;+tPj8p5t*>SfzDjS&9Db_`J{AVdwiD z&DxqO^Wby;@7;kYRD>006&dyT6>OD5_e?Uj!1D#A3)O@2h$nUqJtj^Ow!DdHEFDZ4 zvf!EU3izHKrG~{tlxp+lM(N}v@8plDhzt`tt&hVe?VBU9@;)U4Q%d2BFG(Cxvkw*o zM4M%)tYsV-9c{6TS|qnWK2|woYJTaFr9d+R1^v+W-Pu(^eJ%4as3Rc6UG1)LKE2$e zMvO$T-gO4U|EN{NauoaE{Ym}N?rUgY*6YLT?BIQaO5x5QZ=qQGW7-^P-&Y=zh7>Zm zW`qO)3`FF@HwMrkO62cm{oY}|)?@yi=50;yPd;5H3hbj~AG@&AmEkdedVoc5 zKIqU3;6PIqH${m_NA{_1Z|u+ME@FALL|j~u+(%Y3zM z4*D{i6K(srMo{vsdb|YJ9lK7a%>FF{HQ$%#$@F9&08)Xz7aur{{zHX;MImUMrY{eevpdS*tC1|WUo;9B%zV$Kq8-i{;%;rK_1ho&r+?F#I~9(<+g{o6r<^+d zX;WZ-`6R9MblUuS&m>|-DYT;Lxl%#Q6ZwtfnzK3(!2OhNqXLS1>r#p=a23UIx2OG% z=tU{s_w7sO==__XPh!?0z6dCL5P(v=z4lB#x_WC6RaIPFQ2pWa`>8(#7Zc%A%xGt$ z?eREy4DCx+r%`qx%;X9ae%@mM5E@sB{+zfhCkgj)j9L!N6KPT%RT{a;A`g-C3+prx z*X&=Q>N|q-E!frj!mgnYM2i>Zs%@<1P5jn(X%MUSrGf~!y2UZT&&>1+p4F3*YuDId z`o{HB@J1r(yXNb4jJQ+iwAMmrynZ-Z`%yWJUz^_6IoM5E6=X`$el+);2`(UC_ zZjVEAYkvTYv{rU$Q4v(Q=0!{(?{ty3t;=ZDy}3`Qs3%(R*R6P$Z*mNp!53yv2Cob* zMW#fI4DWcSgiq{%q!;*3f)7CZHp&Tume$x!z7bl1?}RGVzm8hQ#7>7GQeXt})rb-_ zMw^-@W8q4s;G_#?#1UD+Wi04tf4_g+`bosjUgU5!#3uF?F#7G6@Q+bS_E=BZ(hjBG zM^;)m%qZf#Y&b@mI0wM6#fiH)ZES^a0*KV_m_eOQP&Q)gy=UR|T5I7&a}yfWq+6fC zy!puCl6kjV%b!W#%?Qim%N6p0AKs~~9PYiZlV?_3=F`cK%p~u2(X9od^Dgb;W=Gsi zjT|7akj^lL(b<;LN|PipnIRrw<6_0X2_OZBtm>qs3rmA8Bu|~eHo|nVU?q7KoTVl; z6#}p$5Y^Yt-g+j*DVKw@P67SOu0g`5Nc@d(yb%GaseKI5`lZqtlE8)!U0`M@w;6X#{Ops-?)ZF?pkU(;GDyq5ZTinm z#0sr`bKa4F3gspdE{-nB>-Rg+CX{~BOb$Nb@am5N91TwHMRM+b2wMq{weephl8wBK z2p0&6gIeH=m}mz(iiDLeT8!AHUv7fkFwcxU7^R3b`Pqr8<)WO=8(!U9Uuzvr=g&Wy zJvwx(3;yLy-j~Y#Gk!@U_SLo9TI$`m;86cN42)`#)#Tnx=N@>?df_OiaoXdabO9wK z2?IoxG*tp-CdR-9JUlYoR61BXOQ?~M_VWa&bM}^QrM?nx0s}%gm8gY{55=sA`*uvE zMakBSZ)2eFb`(D|e>KIH3r7Q8D82G#tlDm?qt4cN#nFB-BiE<8WaSo2*3_WsmR^U+ zN(iBsbjB0#Yj*~whDz{A)E*+O{aJN2d%Yu}a2HrfXC}pQ8VfAlOV`PWOIU+{taeK& zp^7ho!o>jTc% z=rGxOfWkcMa*V0U-47@t@j)`x{aZq>2)`BAx9Oza-J%NQmo&gihtmLKr&jMy8a~AC zzJ&_55MS3{2Agks74r5K^nU$vtw!}lBHrl@%jJ%oI(OwmoAv{Go(dt+g{h(*I!>+%!?D&+*2K)Ke{gSi&$8u;3^AO z5dhBw-Ul8usO^F>-#h=TsJC!w-?;MY^oANtss25J*;WBH85(u%BQ+!MuA2uxqaA(9 zMk+A@7?N@`%jqAqt3eGLl@8WmwZ-f->lFDJ)cXwe%&`5XI<0EcT{^V)j@LN`IprZL z3W+&%gA5`O6)L=Vghs3?vR?5aS&6D=mVI$SNfUzivf*7nKO?qZ5-ptQIjSU7dItq_ zgHAWEpqoXFTc4ywMV{lXeGcA;1V)%LYgZEe^rqba0Nu~XCd3ME!|o1+SFcz{L-DJ( zu^N%%6U&6e5uF9($=JrCtvjRXTV&8{2LD=z@Ovg(M`{DO=R2L+c*NXU>&C|n4aEAG zaRP$6ckce;UDAPTshfa7e&p>lX3}Gx1+^vmSo?W0Rv5$v z#$vkf-x*3djF6kqkeDv({t)U*!eh)@S%L8LO9qD=v$siyK0tELT|+8e`Nqo@hfvMb z-!6b2_e%9JG51UC5L9J)Gm?mT-)#A5%ck6^R+2;J9pmVIhIGfB6C&ySlo6-W5cbfS z-LzHN5s=s9-hba4FKcMG8p%M|-BdvZ#++tP zWXTU_MrADabHRT3dgre^-5Zd=VCZcgJ`u-YtWD&_fVu{%o`Q!YfY9WNZ8~Ib99DFNam0(uMxM7_hKe$EUfN1 zi25m2%3p#OjAmZ!X+=Iio)*{oRYSg2~!;wD?w0@FVM zz_2KLj{k{5v?n-IS|@=B9@JnRVaXA4H5I;NE$tWR$|tJW%0HB@+6T(tFuaMgbT+YP zO;kVoYjS(Ov7Zt!`0|-t?5WPky-gib0B!#!?%=Q@El>b~G+oRddMM|PSnraquO;0v zd#}p3j>_F{Agyq@SER*2+93~>8FHBt;r2+2#F%#V@3oi~4X15A^~#^G@6=`(WSfi) zaVL8v-di{WSXXY(>12(rub*VE7w>+`2r%MVP%9hh`{l$}*pDt(u+2qh=ds+8KXP!W|jimu=hmYOUXVArFAGzpbmof#s zQQTQ-R9Yi?F0&+c-XJ|s&apQNPAPx9(+ZZIe1F&7(|2 zbg1J%IiPkd3E-kkkulOuC6|g&g?x{wI-MW+g3A(J@_*WU%b+&fE@~7nQrz8LiWk=a z!686!CpZ+h(iV3O?(XhRi@UoOcW8^YKq)8B`=0s!e($d{bDrsBk~^7PfA+eva%E@l zy_U)cjruIy-ORFhvVp~LNt^;DFC#|UuVnK`&F5tu9lswhbm6nGyC-VA`>%q)X{6el zi4*DRX5*bLz6&BZH7j>z`EG2|Qv+(&UvFaNz$+b_pUfyP*>2`Q5amQGJpNMFXOj+) z8q%3&^93R|I#m!Ny|=l4pQb&3$dS5mDrP;aJ5q84H^zu8fv1&4I-?R*kVS}BCxPNY zp)bFqbL;L39;LpOeWo=twTO+He6XHH0l%G|;JTW5F0Yo#e{ z1M_knaGb=}+QL9nvBM`K`f>U35p%;6JMT?vf}9zz4+J8+*Tf%aYztRo8!OZHXny@z zb0{A$8MWuZsoY%iTQiQ4F8IV+v@@VCn4gC;c$58Ob85&qeXqXY?9^iZH6$$|-@J8W z#LRwTRNcx3TzI%d|Lt79*4|OZwpi2ToZp!ojk$dL18Qkc67yIUDBqENbE)+7WOqdL zh@KvSMe4NA<#)A^%!3gNyRQm^Ptg10S8lntb#K)Ac?Pl!*$p6y6O&XN8J|6?1Zy2{ zr=R`w*Zv^@7!HNY9_RoYiELq0M2Csvk|943UGT&XD2wb(g*S9;ulqS(zIN!fi)TKO<03_T9WO4(u9Uq=N%m*T{W2V;#-U=>o_ zo~Cfs$@|3(A#9xI$(B(V%WgBBD7`Tj)7CaM-=cl!yZVR|hhGeBJ_HFMr~BI9UGzRo zvTlTyjuH~AEWBk0 z=-BtX?p1eVt6(0cgDaK-I9D4=WyWW{bY36_(aYWnzZEE zS--WPTq9%uvHGQ`lljCa=3)>bYU0(PEPlep+LG+Rw*p+9`0{yE=!XRo3Ia5VT9Gz* zj#FOEO$DZ;*eHclENmk3ylUSw{dBsK-Ly@&DM^o8wP$RQ=blW!SW8>Zr z8wx?MA{FSI5hp$B$*a&)nfXs+oY~jYid}>?CmmOu6ymdZW#&O-Jx&%0S6H-5_Wj@n zW4h4FjQJ{B6N%pE$7pb}CBWYlSL*cjRU3Lu##5tDXUSea?;L7*X>v*_Pta;!+V9b{0r6wTs30yu06aT z+r&8H?6EhYA3&3$8J4s*b3CJ8ImoEu0XO?8{WO^egzQv=X?QpzypO?~+BetTLBfjb zHfFM}Xk~HJSgiQr1CZBg7iV~3SgF-6OSaZY6l(RKjMlI0Q%d7;BKOCKQ2rr+Kmc+U z2zYv7Y1RbO1{IHVB-Zr(k1*C$g%!*prkOLZP?eK|fwZa_by_u<#Drl&U0u0zZ|G22 zj`WaBolr;aTLCu^(xO&xr&FE$^+URVSfQ_>Z!9G2?&uW?GwzowL!{uo#YykmL(4)vicw_wSOyAo4?|fYI!^2#Ra|{O z2HF`~+pkj0IT+r{XwoL4d%<(ZM50IXBE%C2`lVxU>&UCA?#M9g)Rv0{0Fq|W=XFS- z@IwG=5F$;2UFd*pfEBe>yGAxSPQF0IY=Q_#C}wtjjvD~6-61ZEjL<@!wZIHWMse@A zF(C9=KD99?>>0SL546$tnRQAvOsuHhz(J!tnQU_AU5k|w5KvX-2t^M`K9=qeAn&hF z-$g@qB4zFN%N`P~B&1K@#Y^5iilutPnX;S(u;?vvgo02|2{ zWd$2>SH;9#oM~>(!Nhj7C$Qx!VRhMVCm@kgI#^bm@zr5ihp0fL0zXv9_>I^Ib=Lg( zu3ELb7MafZo}CO_%zdP7?Zc`6RqPuudUf4H-@M_Nr}2-fnOy{=I?-;!{?i>U4n{m_ z%RPKX9Da58j}Z&8(Wi{>Z94-{T=bIHQ{fiVpud6f7ANf%4n>Az=JWs+{8(B#_<0ey zaSB`g;BUNh?mNHAUt=2bFmTA68zhW8=`-WgCFqc{riAQFsfa=Qv=j^JL6j#uxD)bu_$|jG>tp{RfN%h^x#kG$Um%O}aYb=hFAxcG zIQ2j3(D$rGr?5iUFC}@;))KztDaD8>@(Rw7BHpsqtmxxY!ot$e)3fBCrsvr62#b6q z&<+=4!Z3c>T06g`+P=B$+A7=_{$73n0L`NwG^NC0fnmc^*5G4#c^AR`$Uo79U&%}{)69wppk zEhlTubwX3ZBWpYK2*hB6V4~pIMyD1?<(%p&eQ^8RNXOZixv zr5`A{vgQ@{&$dp{H1b+mpj^pHJseU|4qWV1eE#9!)k$4o$)Dl9o6AU&6?CLzNvgcS zFqNnafSsy@D6H;ia`!5ktwK!lmW_e}n+b9LXitn5;1lLj-q@2#P4$J5l0|aow%Vny z^OMy{GiqeGa_>R@thwz6rEglBiYvY`AN8`E5|sa__(#~vNZq; zM5sKibNR(H<7xl5$77Z@NgH`;0G2FL&(?kWiLNt8rw*p(60CGp;My{uQOIm9qFrgo z@S0d<+DTo9S(qp)kdfK{A@(T-T^ZiXm_MSyJESQ{FA}3v!H$SESkyvJvy)WkAk&+_D!Q)d9Pvnv}7q<(V&h_x^x}7Mh99 zaFDjgh$ayBht$ToY3rjgSNsr!TMPM1icvf^F&;H^lljZX%t#NI06aC303G3)#nnxg z$#l@c zabQ^ka3$Pzi`AV1QiHEV@jnER2taOtsYAp30m>`&#mz6A@SkC=5U^%AFV+%)FvjMk zP`5`i*0)MveH*nnY*Q^0KgYy-cFc{a2||(lM+XoQ36UEn;vRSajn-C&28!_tYCpU_ zU4KVdWl`U{5X(%18iIk<)biGM^Ho@G(+y?n0RKE~gnbRbm?De5YPQQ{96|(judd85 zRv@IR?zRjzs3#Ga~rxJ9|a9EF`PyI`2yl)PV3(>e1tiCpU@xCmMkXT^d)P?2Sxca{=rRa&jYZw;W#+i$y43@0}g+03YH> z+Mg_p1W;0*Alm$@VW^?V{_hG z6|rxq5e=}JB9c+759!G7RKhzYL-07}MOncv;8zu6AqqNYD$(-j)<{ZBtY5EDH5ThX zCsCDFdKW%I`OV#Ek|joK;pNkxP`L7%&=HExgbij45t(J}dq6%}yu;^Mf(b5!-Bl*H%yL5fdadPIH*Sv#o#zn@{hoH(URErdI9~^nwk#tNy%xq%Kbl;L&YN9dZpVrDmIH|obS)BKyw(Ln85r4{-l6 z%(+YZB{_UQUG_F_IrGq7Dhf6|| zDGB@=bEy)7+y18(^4?_*87Wz8nU;-z2K4AXYfBAk7IGaTg9 za_yUtzu!+>Pk`(XcdIqwknya{CZ(|m#^|EH+_aKBoh;L^q3)0WB6aNZ+AGzqFv=PQ zlXIWRebkxcN#WRAg$!BA3sY(hsHr3wew@yYs`TjJ8^3$jIS-n*3)nk##hR?5tu!k( z+B1*gtg*dqA#yz!D4)in#GzajJ*tvkSScVD;n5!U305Tn+>zvyjCB<}4u z%9@XJo4;p{N`EhEExCF%#b=^)XfQM=H+>3 z!A^mcIl5Cp+SfUN#4_G0MG;4DQ=>|inw?$hx}TNZVDP4>Qh%Zje*&QWqaOO0^$vv+ zFPAYxY#XYC5kE^tXHRAw94+{Gy~m_Dqv_XD#;DBeVQue1N18Zu0*u$r`F~G zCqPRSY$h0%1QWIq9m9HoqApOftLdhb>-)>&wG zdwUIk2Pf%TPMwzL+1&cQ&+R4FiOr~-r2!9ua)vVAhp@l`MJoXe?lv7d8tGRKrKOHX z0jS6f`*2m`84RXxTrRgM@Ig;&jlMUmfo6GaOkFO-{IosF)7HDef;# zWV4x^E;JynmcLh&EyB;dQ}+rW@uN2fj`IR92zc{>oWz6DEMEBtb9i_`UlKer2alGa zi{*~ZUQ-G}Gt?E=<5Z=e)^U1*-_G5G zN0h3#&E!3jb|ZiMt{hh`oA2T{-B}mBHk&B@w7^^PZM_?qkP32(Iv$tX>(z=Q87RDI z06KLL!I#i|c|x~e-LIv~c#el@*&V*`P{V0t6s{_1Vo!|ke=Kh4zp?1kk=fq^s@i7i zAl?b7k{0-e#>V?KLh1?_w$$vC6kLGt=@4<5MRg?HNSp@Y^?J$-5MkixB~XEb4xoiwuwG?KVBahGX3~$8gIk$GS%s1`+aSG z=Mk=g2ngLs4W>gMG-c`?Hp}2wx@00*@4`cPO$i84iS+u4EDl#S){?G$!xH?*7rE?B zhEE2Ey0o0r+DA`IvV=IJg(7|hjswP+&^GAr+ zd=WcoyDS6u(wQj(!w!_wSdL1s@#uW^TshOAVIRM0?!)x_`$Sd3N}s!AHpcMA#Z{ut z*wDdhn@o>;x95G1CP|68R%C zkQ`K<83_!YbgaRrT?S|K2YQpGg*RY3jW_0U*R0i%D;c;HSS7=gScVlc&-d=KEZiac zUh{AShx~Jq^LwMM2{}C<*^{)>(3{cVlj&2LW9JcSM z3r_l6p@+mc_?s*NotcT6Qdho{B!Z3^&?IRs`Hr=gkkK{AF^Z8{D`H8x0}Cq@rMEMK zcj&%P`UvHKM(~^#p-049rj<-NvdmE8;`?Zsyd?{v*Ns?k1QZ2OwOU8`kz~ID$2pd3g#Pb!elVoDQkduC7IE0W>?q zHg%$-KqYiIXmv(z^HtfdLnOJrHB~6wW-y9{8tZrNK}1pujoEy3T1+|aST_v^Fliaj z$s$m@5N$MJG-#be-XjI^%W6Jw-77>MDCZ+n24+y^{h9}ek~vhPwaq{!)ehomrUMHk z!*`~(px_k_QT>*y|8e*a0kq(d%|K)4*vhu`Z2!pt$Qm{XU`g~pVh+$7ngOt^3z%&n(QK1cHr0KiU@dCzuoE?_b1P$x(uqSiGj&xhOHH`J~uo<1d zYc>!ItJSyAnkOISQ_{E{9j7%sSixE6PD)$+;;iQuqApGsGCg{2bq(oa*L{2WQ`3PV za$IKYCJN1ivszNX?)8sgiUNmFK^;yWh0s(IY7&zJCH%O4@~Uu%CO;)K4C5Fhure*J(n`50&TeNd#W2Q zQ#=&|(2*gB(`T~T*DIa5+r`bzoYOvH>Gw_Vq@%#657VivejON!@yV)9>^?-C&lXHO z;U<~-%j=by;{Gi)D_xTD;5@$pq>35O8`=OkZa4&l2=c^I<^In^q{c0a$-Xq{)sp;a zv>Fpq>GWFm(DMu0t}fDVWWMI{?xzet4oYg(<)|y(Y_@R5j?jyJ)k+4Tb&NdxPLpS7 zVLiCQtJvdd8%*9lHvxr zcNghSchi69`73b;T%T|ySLnu-*z_P_Z4-1jFq9UQ8*-2&an?)S*-z{423CS+rBx3R1>@N(x=uPL4H_-$&#Y?9l3e=nP*SW|m6&V{a_FHG?jnn0#lR6fdC zT@id#mu^UuR6J1pjf5(Mwh|+i2R<-KEPD3_Ce$~c&l6Z~eGdjZQ)JR+@BX)f4#^?)1cJQwL>z(4Y zM<`GK1SL0r)|bPD!ul(c3Q{k`&{Hh=Mg!db#Vcvh5};zKj#JiCrWe>erZ^#QYpY-_ zJD-vLTzWBiq&AOl{;Is)_>KE_iYu~r&R;InifY6*zGJ--nM{h^05Zf%AC#{PfIo9| zu*cqq>GH>UFEvBe4)M+SHMq^v4+q8MquYDmyTq+MV0jz56EJ`X7ce!?7+`n8`c%I9qp zvbd&;!~=rY8~d1vDvkFmM1#il+GACw_k~fU|pm~EQFVqML1jr7{&b7l?&la;-YH*PZA94290?yuZ6Ab zHvJ}j#5~5?Fy#qvQapCR`?G~2tQ&NMZ-NWzL4T~i(z5%FAkrh}TA$6#`dHXmX>|X- zL?7ByG2pB*3f6VUt$g>oAOQ)TQK;{UeF~YC)FBNmH;6JTA@c5>TB05fb8b9h7Xm5; zwzl5rV!K4#m)X=BJ2L_JD(__uU&I)XKLmEmr1hQX;2}?X6je~GMZZo6ipQTwRpkgf z&Hf9HuXN={As!x_fjX0`C5zX*_LVTPWj`geAztX*wZ_ii&Y|AHslO+C0;M8a=gO-v zC;43YMmw7>Y`iuEQSQW{pR8?7CgW2iV`J7>Q{yl1J*OV(ey^uYOsLG%Wqf*U%Y9P& z<30akI63p_)3Wt#<|JM~0z4ARfPrei4Ff9ZU0&+lmPN0}1 zZbK|z%&A^LtM^+mXCa{87Jy^AX-B?kSmBIyBmTZsSuP2ybu#^(kuFfx2g-gw##pL@ zmn`BTt6{GzreyUlfws*+#N_)B@RhfoSo6=Z@oguIA;PY~Dl(czVczpt!G!t&4T7)i z+NXw$?=_YlGxJEBtoZQ@DX{f?cK7#6Y>W*rCp_DF3~C<`M{bwEk4^55} zCXHBdU0%|B!`KWV$xgWXtwl?4X|;`VWR+M94aiSKqf-W+1K6RIdJlxVAGk6+6=!kz z8)ii?5ZAU!>_00b)oU* z>0hVN6d8SYGL{zLNZa;BQBtdHi=$lycX;#^p?IFP({$JhL`1_V%yj34s-$JF9cG6j zs3V&{T93eb%%n6|$xI-gv58vaKsj`d_7INHf(|Yz5_&))yzt^dF3KWdJ|;atQ1R_( zC^XAfp^dA#efMY}_a)mMJ zRLn2y!}))ves;S#=C13p{&4JdRr+~-!WlX>^s!sr`|xIGeXF(9eb36S-(d62fb*ww z&`)h;HNgd@!A&ztkgQ|OE~W7+6@j49BOX7ci+M$Ei|nuj_lFS2yCU@*CB?VGq4`M{ zamko?a-ob2+dioq1oK`-p`+vTM>P9MSpu_t_GL`{XR;sX1v;lw2ejW12ySMpzg?DT zT@id}?9RI3{Z*kdT;5Z12WbvaSq zAnTOFe)i?#Qg!Z_`9|$ZVbcVqTF>ZxwT=VM!v0b1t%q}hEu08SGagdn4hX|{R5EO*gELAd-y=PyZg_0miu8b@wTQ4%i+|?b$Ht(X9$@oM8bkzS zt2~5!C9Zl0#AtICinA>#t*9#(-UPwaE`okkya(DmQ72{bNOBQO>u?t7 zZ4z5>exy6Y2~n27iVi;nnauWjwU3tm2-9V_C?3@}Sx*BO3q#bjhu){khZ>|Z+&OW0 z*L_x6ex)%(wxv*Wj>}=}W9l_*U%oa|>x912qyq{Y{?w#!^vCb!?zl9erU>u2dR# z6Xl7Y5@ouTc3#688O6ObQ`B?EFMGB&c|&{6RPAKn@I-26TKO`K6q1+?6dWNiqnOG7 z0O@A}u_=kX?L@>p6X8%y^8t`eb3~Pm4KKLAF!-R4qBJpTLq4>+{|}I&VM*s$Llwl< z65*ovaAmrAX0-mW{BX8gcUWTRt@)v~Z}}c3-Y6|3lM&)i^2EIPt-Pov=en)~8+Be~ zzbr~w1MUkAo^s6V44Gy4*j5tr)cX5<+(1V5p0L)bvxe#3VPT`hSf!ifpZiBJd@kr~w_tr26B?w*llY1v7_ z25;C{WyLRJ5o5CPVwkt6S*z??UQgPyzGQ}jx*?~+qX4DA$4`psd?w?}{M8I1xCS{3yCE+-NE2_=Onn3F~Kwq4ng=9-2HAa=fj}IO% zw`)kvZk|J(2+IJN7Y&nJRmy4h6k6EN%d5RbIdv6gH zLGXX1mAe?1G&JE(BPQWVz&*zjt5YrQJy&J<%Suxh)2Xz|DDXbY} zYD$GPu_PHxs19f@`efN5M-u`NqSmdjWR!{%izJ3D8Tu2y8dk?KMUaS%p}Rs#37HD< ziaBVrQmk3fW;eqXEo36$!Q+DW_`&=%w45k+GUtsl>b4756#UfA2s2cwKA2%3Aq?jrm3gP z9MUJ7(6Ce1iISS3O%TV7>>fdXq9Z_G3PqE*B(*K*(~{g?-hP?S=46PHYu+>i7@40M zS)yN$D-#%{jGQbZVMxO<;P^N;2PhOvC59p%W=G+TnLRJ!(B1qnmQW`OwN-}_niBsA zT61*_0beT)VbQ10w@Y~mvA`xAD}$YS_N=xPD^vyp-6tAbcx8-fIVdK^J#3SDLW)S$ z@!rv6=iu{aYS)<`6?N2To{LNBA;1^8K)yU-q5#NFtz#&sO0^t)UHF}^h* zfvgJ9{M@DIusVQw==D?gchQ>0p5+SPWoltP+v63Ep_v*q-;V84W8>4C zPe0U9;*-bOukIwo;f?h#1TqR|HyYaF&~Z4% zv|xn3ZOP~^6&16mFHs0DIY4SNFU2EB9YD#I*Xs;6Fz5~R9Qg^TKZd!v=W32^HL8m? zaZ_$Z7#L+pC!SuiEA`HgPj5)tK0CBeET!IUZ`xB-na+ZG2O8Xypu^zicZr|h$Wm6k zarl1u!cOthv@{%-h>AwTK#&weQhv|cT(P^6c_#&m$hzL%(6_8CMJpifBe~RsJ5iQW zW8AxF5Aj7mT(|mPFX|*uSE@W zTr+X&tx$C^#7|43>TiO0O>MgohOtw)3S0RK;yFwCSLRe|zvnf!Qez7(vC z3vT)o+Une3-QL+#sk?n|on)7Jfp6FQ>5j!+G5c7T!8f;tS9hSk?TJrl$>!dn2YWp^ z%X{97&GFLD?(N9ijRaCDICMtv>zI%VMwklzbX9V1F|>m6QLt4cTt-R&Ju)F-d=TMA z9;qadj+;XvAe!WO%l^(l%r=}PbJo{3e~Crp;(JrgAG6Aq2+B7I8&>6L9a2VrCV z(OsmNl1>GnC=YZ<%qb$DNN^MOfKYCHm7wRWO%7mDZxtp zni@J|Ar|mWU~RTF)_dj{LO=cF{lU9Uf_-k{H&8oh>A}>``|yRy^7m)YqRGk2;(52H zmbGZMqMKyoYOIN()He3i`Bzh@eJB3NdBFD;(oVGN30!E*jO7s^c1Ck;r=rM6#W`18 zl>NjEV^iafeuj|MhaQlYn>G>uI?>{%$$tny2Z!VcI{_k_(jV(k$Y@}MX{3WJv2Abb`b9SuuU9vT;s0AV8c5WX~Pb1_Yvm+N~*6E$b{ z^7+le1l7acSi2fXp1vM*x&P#AvRgU)rw4=*&map>8v}e;0RJAXJtE1pw&Q|@kxp{X ztVyaW9eE7ukcEXcsS^PjP-ZTz;6>nXx-p%QuU=r3_Q{;*wP)knFhrEw z1ZP`SJEF$tJT6B8wjkP&bk~Bzo%qoOME1%4VLNds%NM)Q{mj`4w-qwQw*vMe(7STOto^1 z@pjJTf^!5`!c_4VD|gFE3GLeFsB^F402hh|K{%c|vyFEOqj?&pr*eC&e8g!yvvg7T zjdQz@5gr|!vrYBsH#5dwh~YX{`>)25cocXbi&^g9m}NgNG3uqI)H<^ZI2%=tC}A$} zI(vlVY7KT$0kib<^?K*lk)uhUwjWn3tE>sa=EczjLv@tozWkrx`2UwD1gH$47=-Q& zS!sWr4)r%+RoC;Voo8VuJBI$j=uRNi2Z+>_74o(v{md*Xr?TfW$4}>w`4P%~0nyT< zUx|yDmt6B+o(S;btM<*=K)c`>c0>?2R07rrY$nX>H_jty;eQqQU|z5lW8;kZQAgo!@`T; z`%>!{^=^U3Tkn-F333PLhLrbDj~_-k0-XCt|C?B`|HM(~ zxtxfSv_OO90EqK>HvGNx1aNR5H7OCCH640r&j2MLi+oE64&INx2tE z#2HK*AGl|2e;qiLWgMjwirU@oandlEGsp9lxtLoEP66&Wh0hl6zK zMw?jJzQ$Ui#dDJJT^``W3q)<)zDhN%J8aR<5Y?5;E^6pn+v+IkuB@xE6?ann`rXEq zv0jOq`KN#=33oT}@)nH@UW03g0<8}q8umjc5lW?sIcJT2XopTSOr{;561bC1KNYlI zE;$`^u}P)`;Bnlhp+$6+*=cLy>{npVP7^n|efFk19Lm@Ya_Jz}O-1gDI#87cV}HAbJUPyi>`F~t0(mGb<(gt? zJHv|1n>GMYl=Lfb#81cq-S5h`x4OXG5==$r5a|#?P8Dc^} zy(UgQ1-vDV^hmG~a(O#diA6nG5f7dR$)T8qHP^J8vZMO`^!<5>W)S_nJz-jr%U9#=|=0FJ|r+ zN;*xNKa}MfdfrFZ{0Ok4i3XL?JJaCKhBMik>JyH7khKX6PUCZUdQp>yC1gYcH7WU? zk(KB@R_z7$l{&Q}s{bJXX#kR_(%3&aKrEY`2+Si4n>F|7HHj0fYGl+GlF`1LNsvj) zSV`vx>>TTiinLEuQkJf5rwiak`VV{s*^1T|Ccw79sn z$`&b96Pj@a9Gxgdg!;`w%{xZv5gB01Xr)tvMM5rC2rcM>Ka{gLF48JIp($YrX^>kF zk-C`!y`>QxRK)alq`<&k77h9(B5PrbTTZbNN*;8i$xgtImhe(t4G7<^CSC%mGBe3XwIf3$zu1uva0<--MMTv}@ z9T(cRUtV6GleyVBstItIQ(4UN14SGQf`X7vJ|stvj#cOVZv3>|D0#1^09*I+a#6$4 zSg#?KgZ;$#tj9v5E>!&*hv|DN8hV38VSKq>e}BOok8#V0Y9V*a&W_a0=hU6qVi_vJ zIBdMo5Zb-4tFpc>ckF|@Ko$obRDLqp1v&@5doWll6}-D4(4Y4=N0 z+snmV38BmL+PIC4U6B&oe$yO8;Ln0w@=D&l*UL)^Bf*cCrY1?)UDPX+zp$1vH=3pD zxipp~-&Ll6@YApI{Qt|B{lD_<|DFJ_(3Jlh9-7&IuJ9cHeaRT`-|OGUzX<$05%^1h zf9Jmbjp~0y;4cCGN1*;L`*$MnmjM6Hef=BN|A@d}0{o9a{ayC&MBpz0{+;{!H>&>; zfxiU!AA$P2?B9vNUjqC)_w{d7|04o_3GhDx^>^976M?@3_;>E>|7TIr!2SRG_WuA4 CN0}%9 literal 0 HcmV?d00001 diff --git a/voip/static/src/ringtones/ringtone_service.js b/voip/static/src/ringtones/ringtone_service.js new file mode 100644 index 0000000..766d5f6 --- /dev/null +++ b/voip/static/src/ringtones/ringtone_service.js @@ -0,0 +1,38 @@ +/* @odoo-module */ + +import { registry } from "@web/core/registry"; + +export const ringtoneService = { + start() { + const audio = new window.Audio(); + const ringtones = { + dial: { + source: "/voip/static/src/ringtones/dialtone.mp3", + volume: 0.7, + }, + incoming: { + source: "/voip/static/src/ringtones/incomingcall.mp3", + }, + ringback: { + source: "/voip/static/src/ringtones/ringbacktone.mp3", + }, + }; + function play() { + audio.currentTime = 0; + audio.loop = true; + audio.src = this.source; + audio.volume = this.volume ?? 1; + Promise.resolve(audio.play()).catch(() => {}); + } + Object.values(ringtones).forEach((x) => Object.assign(x, { play })); + return { + ...ringtones, + stopPlaying() { + audio.pause(); + audio.currentTime = 0; + }, + }; + }, +}; + +registry.category("services").add("voip.ringtone", ringtoneService); diff --git a/voip/static/src/softphone/activities_tab.js b/voip/static/src/softphone/activities_tab.js new file mode 100644 index 0000000..3c676b1 --- /dev/null +++ b/voip/static/src/softphone/activities_tab.js @@ -0,0 +1,68 @@ +/* @odoo-module */ + +import { Component, onMounted, useState } from "@odoo/owl"; + +import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; +import { _t } from "@web/core/l10n/translation"; +import { useService } from "@web/core/utils/hooks"; +import { isEventHandled, markEventHandled } from "@web/core/utils/misc"; + +export class ActivitiesTab extends Component { + static props = { activities: { type: Array }, extraClass: { type: String, optional: true } }; + static defaultProps = { extraClass: "" }; + static template = "voip.ActivitiesTab"; + + setup() { + this.dialog = useService("dialog"); + this.orm = useService("orm"); + this.activityService = useService("mail.activity"); + this.voip = useState(useService("voip")); + onMounted(() => this.voip.fetchTodayCallActivities()); + this.state = useState({ hoveredActivity: null }); + } + + /** + * @param {MouseEvent} ev + * @param {import("models").Activity} activity + */ + onClickActivity(ev, activity) { + if (isEventHandled(ev, "Activity.cancel")) { + return; + } + this.voip.softphone.selectCorrespondence({ activity }); + } + + /** + * @param {MouseEvent} ev + * @param {import("models").Activity} activity + */ + onClickCancelActivity(ev, activity) { + markEventHandled(ev, "Activity.cancel"); + this.dialog.add(ConfirmationDialog, { + title: _t("Hold on!"), + body: _t( + "Are you sure you want to delete this activity? It will be lost forever, which is quite a long time 😔" + ), + cancel() {}, + confirm: async () => { + await this.orm.call("mail.activity", "unlink", [[activity.id]]); + this.activityService.delete(activity); + }, + confirmLabel: _t("Yes, do it."), + cancelLabel: _t("Missclicked, sorry."), + }); + } + + /** + * @param {MouseEvent} ev + * @param {import("models").Activity} activity + */ + onMouseEnterActivity(ev, activity) { + this.state.hoveredActivity = activity.id; + } + + /** @param {MouseEvent} ev */ + onMouseLeaveActivity(ev) { + this.state.hoveredActivity = null; + } +} diff --git a/voip/static/src/softphone/activities_tab.xml b/voip/static/src/softphone/activities_tab.xml new file mode 100644 index 0000000..95f465f --- /dev/null +++ b/voip/static/src/softphone/activities_tab.xml @@ -0,0 +1,18 @@ + + + +

+ +
+
+
+
+
+
+ +

No search results 💔

+

No calls scheduled for today 😎

+
+ + diff --git a/voip/static/src/softphone/call_invitation.js b/voip/static/src/softphone/call_invitation.js new file mode 100644 index 0000000..57cf208 --- /dev/null +++ b/voip/static/src/softphone/call_invitation.js @@ -0,0 +1,34 @@ +/* @odoo-module */ + +import { Component } from "@odoo/owl"; + +import { Correspondence } from "@voip/core/correspondence_model"; + +import { useService } from "@web/core/utils/hooks"; + +export class CallInvitation extends Component { + static props = { + correspondence: { type: Correspondence }, + extraClass: { type: String, optional: true }, + }; + static template = "voip.CallInvitation"; + + setup() { + this.userAgent = useService("voip.user_agent"); + } + + /** @returns {string} */ + get partnerName() { + return this.props.correspondence.partner?.name ?? ""; + } + + /** @param {MouseEvent} ev */ + onClickAccept(ev) { + this.userAgent.acceptIncomingCall(); + } + + /** @param {MouseEvent} ev */ + onClickReject(ev) { + this.userAgent.rejectIncomingCall(); + } +} diff --git a/voip/static/src/softphone/call_invitation.scss b/voip/static/src/softphone/call_invitation.scss new file mode 100644 index 0000000..baa2a0b --- /dev/null +++ b/voip/static/src/softphone/call_invitation.scss @@ -0,0 +1,7 @@ +.o-voip-CallInvitation-avatar { + width: 80px; +} + +.o-voip-CallInvitation-reject { + transform: rotate(135deg); +} diff --git a/voip/static/src/softphone/call_invitation.xml b/voip/static/src/softphone/call_invitation.xml new file mode 100644 index 0000000..cb97a8f --- /dev/null +++ b/voip/static/src/softphone/call_invitation.xml @@ -0,0 +1,21 @@ + + + +
+
+
Incoming call from…
+ +
+
+
+
+ + +
+
+ + diff --git a/voip/static/src/softphone/contacts_tab.js b/voip/static/src/softphone/contacts_tab.js new file mode 100644 index 0000000..d22c047 --- /dev/null +++ b/voip/static/src/softphone/contacts_tab.js @@ -0,0 +1,30 @@ +/* @odoo-module */ + +import { Component, onMounted, useState } from "@odoo/owl"; + +import { url } from "@web/core/utils/urls"; +import { useService } from "@web/core/utils/hooks"; + +export class ContactsTab extends Component { + static props = { extraClass: { type: String, optional: true } }; + static defaultProps = { extraClass: "" }; + static template = "voip.ContactsTab"; + + setup() { + this.store = useState(useService("mail.store")); + this.voip = useState(useService("voip")); + this.orm = useService("orm"); + this.personaService = useService("mail.persona"); + onMounted(() => this.voip.fetchContacts()); + } + + /** @returns {string} */ + getAvatarUrl(partner) { + return url("/web/image", { model: "res.partner", id: partner.id, field: "avatar_128" }); + } + + onClickContact(ev, contact) { + const partner = this.store.Persona.get(contact); + this.voip.softphone.selectCorrespondence({ partner }); + } +} diff --git a/voip/static/src/softphone/contacts_tab.xml b/voip/static/src/softphone/contacts_tab.xml new file mode 100644 index 0000000..aa14fc9 --- /dev/null +++ b/voip/static/src/softphone/contacts_tab.xml @@ -0,0 +1,15 @@ + + + +
+ +
+ + +
+
+

No search results 💔

+

Contacts with a phone number will be shown here.

+
+
+
diff --git a/voip/static/src/softphone/correspondence_details.js b/voip/static/src/softphone/correspondence_details.js new file mode 100644 index 0000000..0ead714 --- /dev/null +++ b/voip/static/src/softphone/correspondence_details.js @@ -0,0 +1,274 @@ +/* @odoo-module */ + +import { Component, useEffect, useRef, useState } from "@odoo/owl"; + +import { DeviceSelectionDialog } from "@voip/mobile/device_selection_dialog"; +import { TransferPopover } from "@voip/softphone/transfer_popover"; + +import { isMobileOS } from "@web/core/browser/feature_detection"; +import { _t } from "@web/core/l10n/translation"; +import { usePopover } from "@web/core/popover/popover_hook"; +import { useService } from "@web/core/utils/hooks"; +import { session } from "@web/session"; + +export class CorrespondenceDetails extends Component { + static props = ["extraClass?", "correspondence"]; + static defaultProps = { extraClass: "" }; + static template = "voip.CorrespondenceDetails"; + + setup() { + this.action = useService("action"); + this.activityService = useService("mail.activity"); + this.callService = useService("voip.call"); + this.dialog = useService("dialog"); + this.orm = this.env.services.orm; + this.userAgent = useState(useService("voip.user_agent")); + this.voip = useService("voip"); + this.softphone = this.voip.softphone; + this.transferButtonRef = useRef("transferButton"); + this.transferPopover = usePopover(TransferPopover, { position: "top" }); + useEffect( + () => { + this.userAgent.updateSenderTracks(); + }, + () => [this.userAgent.session?.isMute] + ); + } + + /** @returns {import("@mail/activity/activity_model").Activity | undefined} */ + get activity() { + return this.props.correspondence.activity; + } + + /** @returns {boolean} */ + get areInCallActionsDisabled() { + return this.call?.state !== "ongoing" || !this.userAgent.session; + } + + /** @returns {import("@voip/core/call_model").Call | undefined} */ + get call() { + return this.props.correspondence.call; + } + + /** @returns {string} */ + get callStatus() { + if (this.userAgent.session?.inviteState === "ringing") { + return _t("Ringing…"); + } + if (this.call.state === "ongoing") { + const minutes = `${Math.floor(this.call.timer.time / 60)}`.padStart(2, "0"); + const seconds = `${this.call.timer.time % 60}`.padStart(2, "0"); + return _t("In call for: %(minutes)s:%(seconds)s", { minutes, seconds }); + } + return ""; + } + + /** @returns {string} */ + get displayName() { + if (this.call) { + return this.call.displayName; + } + return this.activity?.name ?? ""; + } + + /** @returns {boolean} */ + get isMobileOs() { + return isMobileOS(); + } + + /** @returns {string} */ + get landlineNumber() { + if (this.call) { + if (!this.partner || this.partner.mobileNumber !== this.call.phoneNumber) { + return this.call.phoneNumber; + } + return ""; + } + if (this.activity) { + return this.activity.phone; + } + return this.partner.landlineNumber || ""; + } + + /** @returns {string} */ + get mobileNumber() { + if (this.activity) { + return this.activity.mobile; + } + if (!this.partner && !this.call) { + return ""; + } + if (this.call && this.call.phoneNumber === this.partner?.mobileNumber) { + return this.call.phoneNumber; + } + return this.partner?.mobileNumber || ""; + } + + /** @returns {string} */ + get muteText() { + return !this.userAgent.session?.isMute ? _t("Mute") : _t("Unmute"); + } + + /** @returns {import("@mail/core/persona_model").Persona | undefined} */ + get partner() { + return this.props.correspondence.partner; + } + + /** @param {MouseEvent} ev */ + onClickActivity(ev) { + this.softphone.fold(); + const action = { + type: "ir.actions.act_window", + res_id: false, + res_model: "mail.activity", + views: [[false, "form"]], + view_mode: "form", + target: "new", + context: {}, + }; + if (this.activity) { + action.context.default_res_id = this.activity.res_id; + action.context.default_res_model = this.activity.res_model; + } else { + action.context.default_res_id = this.partner.id; + action.context.default_res_model = "res.partner"; + } + this.action.doAction(action); + } + + /** @param {MouseEvent} ev */ + async onClickCancel(ev) { + await this.orm.call("mail.activity", "unlink", [[this.activity.id]]); + this.activityService.delete(this.activity); + this.softphone.selectedCorrespondence = null; + if (this.softphone.isInAutoCallMode) { + this.softphone.selectNextActivity(); + } + } + + /** @param {MouseEvent} ev */ + async onClickChangeInputDevice(ev) { + this.dialog.add(DeviceSelectionDialog); + } + + /** @param {MouseEvent} ev */ + onClickClose(ev) { + this.softphone.selectedCorrespondence = null; + this.softphone.isInAutoCallMode = false; + this.voip.resetMissedCalls(); + } + + /** @param {MouseEvent} ev */ + onClickEdit(ev) { + this.softphone.fold(); + this.action.doAction({ + type: "ir.actions.act_window", + res_id: this.activityId, + res_model: "mail.activity", + views: [[false, "form"]], + view_mode: "form", + target: "new", + context: { + default_res_id: this.activity.res_id, + default_res_model: this.activity.res_model, + }, + }); + } + + /** @param {MouseEvent} ev */ + onClickEmail(ev) { + this.softphone.fold(); + if (this.partner) { + this.action.doAction({ + type: "ir.actions.act_window", + res_model: "mail.compose.message", + views: [[false, "form"]], + target: "new", + context: { + default_res_ids: [this.partner.id], + default_model: "res.partner", + default_partner_ids: [this.partner.id], + default_composition_mode: "comment", + default_use_template: true, + }, + }); + } + } + + /** @param {MouseEvent} ev */ + async onClickMarkAsDone(ev) { + await this.activityService.markAsDone(this.activity); + this.activityService.delete(this.activity); + this.softphone.selectedCorrespondence = null; + if (this.softphone.isInAutoCallMode) { + this.softphone.selectNextActivity(); + } + } + + /** @param {MouseEvent} ev */ + onClickMute(ev) { + if (this.areInCallActionsDisabled) { + return; + } + this.userAgent.session.isMute = !this.userAgent.session.isMute; + } + + /** @param {MouseEvent} ev */ + onClickPartner(ev) { + this.softphone.fold(); + const action = { + type: "ir.actions.act_window", + res_model: "res.partner", + views: [[false, "form"]], + target: "new", + }; + if (this.partner) { + action.res_id = this.partner.id; + } + // TODO: Missing features from the previous code: + // ─ if no partner but activity: prefill form with data from activity + this.action.doAction(action); + } + + /** + * @param {MouseEvent} ev + * @param {string} phoneNumber + */ + onClickPhoneNumber(ev, phoneNumber) { + ev.preventDefault(); + this.userAgent.makeCall({ + activity: this.activity, + partner: this.partner, + phone_number: phoneNumber, + }); + } + + /** @param {MouseEvent} ev */ + async onClickRecord(ev) { + this.softphone.fold(); + const resModel = this.activity.res_model; + const resId = this.activity.res_id; + const viewId = await this.orm.call(resModel, "get_formview_id", [[resId]], { + context: session.user_context, + }); + this.action.doAction({ + type: "ir.actions.act_window", + res_id: resId, + res_model: resModel, + views: [[viewId || false, "form"]], + view_mode: "form", + view_type: "form", + target: "new", + }); + } + + /** @param {MouseEvent} ev */ + onClickTransfer(ev) { + if (this.transferPopover.isOpen) { + return; + } + this.transferPopover.open(this.transferButtonRef.el, { + defaultInputValue: this.voip.settings.external_device_number || "", + }); + } +} diff --git a/voip/static/src/softphone/correspondence_details.scss b/voip/static/src/softphone/correspondence_details.scss new file mode 100644 index 0000000..71787a3 --- /dev/null +++ b/voip/static/src/softphone/correspondence_details.scss @@ -0,0 +1,3 @@ +.o-voip-CorrespondenceDetails-avatar { + width: 80px; +} diff --git a/voip/static/src/softphone/correspondence_details.xml b/voip/static/src/softphone/correspondence_details.xml new file mode 100644 index 0000000..cf1c8b4 --- /dev/null +++ b/voip/static/src/softphone/correspondence_details.xml @@ -0,0 +1,68 @@ + + + +
+
+ + + + +
+ + +
Call
+
+ + + +
+
+ +
Activity
+
+ + + +
+
+
+
+ + diff --git a/voip/static/src/softphone/numpad.js b/voip/static/src/softphone/numpad.js new file mode 100644 index 0000000..d5793f7 --- /dev/null +++ b/voip/static/src/softphone/numpad.js @@ -0,0 +1,67 @@ +/* @odoo-module */ + +import { useSelection } from "@mail/utils/common/hooks"; +import { Component, useEffect, useRef, useState } from "@odoo/owl"; +import { useService } from "@web/core/utils/hooks"; + +export class Numpad extends Component { + static props = { extraClass: { type: String, optional: true } }; + static defaultProps = { extraClass: "" }; + static template = "voip.Numpad"; + + setup() { + this.softphone = useState(useService("voip").softphone); + this.callService = useService("voip.call"); + this.userAgentService = useService("voip.user_agent"); + this.input = useRef("input"); + this.selection = useSelection({ + refName: "input", + model: this.softphone.numpad.selection, + }); + useEffect( + (shouldFocus) => { + if (shouldFocus) { + this.input.el.focus(); + this.selection.restore(); + this.softphone.shouldFocus = false; + } + }, + () => [this.softphone.shouldFocus] + ); + } + + /** @param {MouseEvent} ev */ + onClickBackspace(ev) { + const { value } = this.softphone.numpad; + const { selectionStart, selectionEnd } = this.input.el; + const cursorPosition = selectionStart === selectionEnd && selectionStart !== 0 ? selectionStart - 1 : selectionStart; + if (selectionStart !== 0) { + this.softphone.numpad.value = value.slice(0, cursorPosition) + value.slice(selectionEnd); + } + this.selection.moveCursor(cursorPosition); + this.softphone.shouldFocus = true; + } + + /** @param {MouseEvent} ev */ + onClickKeypad(ev) { + const key = ev.target.textContent; + this.userAgentService.session?.sipSession?.sessionDescriptionHandler.sendDtmf(key); + const { value } = this.softphone.numpad; + const { selectionStart, selectionEnd } = this.input.el; + this.softphone.numpad.value = value.slice(0, selectionStart) + key + value.slice(selectionEnd); + this.selection.moveCursor(selectionStart + 1); + this.softphone.shouldFocus = true; + } + + /** @param {KeyboardEvent} ev */ + onKeydown(ev) { + if (ev.key !== "Enter") { + return; + } + const inputValue = this.softphone.numpad.value.trim(); + if (!inputValue) { + return; + } + this.userAgentService.makeCall({ phone_number: inputValue }); + } +} diff --git a/voip/static/src/softphone/numpad.xml b/voip/static/src/softphone/numpad.xml new file mode 100644 index 0000000..b30e681 --- /dev/null +++ b/voip/static/src/softphone/numpad.xml @@ -0,0 +1,16 @@ + + + +
+
+ +
+
+
+
+
+
+
+
diff --git a/voip/static/src/softphone/recent_tab.js b/voip/static/src/softphone/recent_tab.js new file mode 100644 index 0000000..b02d7f7 --- /dev/null +++ b/voip/static/src/softphone/recent_tab.js @@ -0,0 +1,25 @@ +/* @odoo-module */ + +import { Component, onMounted, useState } from "@odoo/owl"; +import { useService } from "@web/core/utils/hooks"; + +export class RecentTab extends Component { + static props = { extraClass: { type: String, optional: true }, recentCalls: { type: Array } }; + static defaultProps = { extraClass: "" }; + static template = "voip.RecentTab"; + + setup() { + this.voip = useState(useService("voip")); + this.orm = useService("orm"); + this.callService = useService("voip.call"); + onMounted(() => this.voip.fetchRecentCalls()); + } + + /** + * @param {MouseEvent} ev + * @param {import("@voip/core/call_model").Call} call + */ + onClickPhoneCall(ev, call) { + this.voip.softphone.selectCorrespondence({ call }); + } +} diff --git a/voip/static/src/softphone/recent_tab.xml b/voip/static/src/softphone/recent_tab.xml new file mode 100644 index 0000000..57cb969 --- /dev/null +++ b/voip/static/src/softphone/recent_tab.xml @@ -0,0 +1,18 @@ + + + +
+ +
+
+
+
+ • +
+
+ +

No search results 💔

+

Your call history is empty! Make a call now and have it listed here 💡

+
+ + diff --git a/voip/static/src/softphone/softphone.dark.scss b/voip/static/src/softphone/softphone.dark.scss new file mode 100644 index 0000000..1db00e0 --- /dev/null +++ b/voip/static/src/softphone/softphone.dark.scss @@ -0,0 +1,3 @@ +.o-voip-Softphone-topbar { + --voip__topBar-bg: #{$o-gray-100}; +} diff --git a/voip/static/src/softphone/softphone.js b/voip/static/src/softphone/softphone.js new file mode 100644 index 0000000..19ad688 --- /dev/null +++ b/voip/static/src/softphone/softphone.js @@ -0,0 +1,265 @@ +/* @odoo-module */ + +import { Component, useEffect, useRef, useState } from "@odoo/owl"; + +import { ActivitiesTab } from "@voip/softphone/activities_tab"; +import { CallInvitation } from "@voip/softphone/call_invitation"; +import { ContactsTab } from "@voip/softphone/contacts_tab"; +import { CorrespondenceDetails } from "@voip/softphone/correspondence_details"; +import { Numpad } from "@voip/softphone/numpad"; +import { RecentTab } from "@voip/softphone/recent_tab"; + +import { _t } from "@web/core/l10n/translation"; +import { useService } from "@web/core/utils/hooks"; +import { isEventHandled, markEventHandled } from "@web/core/utils/misc"; +import { useDebounced } from "@web/core/utils/timing"; + +export class Softphone extends Component { + static components = { + ActivitiesTab, + CallInvitation, + ContactsTab, + CorrespondenceDetails, + Numpad, + RecentTab, + }; + static props = {}; + static template = "voip.Softphone"; + + setup() { + this.store = useState(useService("mail.store")); + this.voip = useState(useService("voip")); + this.callService = useService("voip.call"); + this.userAgent = useService("voip.user_agent"); + this.searchBar = useRef("search"); + this.softphone = useState(this.voip.softphone); + useEffect( + (shouldFocus) => { + if (shouldFocus && this.searchBar.el && !this.voip.error) { + this.searchBar.el.focus(); + this.voip.softphone.shouldFocus = false; + } + }, + () => [this.voip.softphone.shouldFocus] + ); + this.onInputSearchBar = useDebounced(() => this.search(), 300); + } + + /** @returns {string} */ + get activeTabId() { + return this.softphone.activeTabId; + } + + /** @returns {string} */ + get callButtonTitleText() { + if (!this.softphone.selectedCorrespondence?.call?.isInProgress) { + return _t("Call"); + } + return _t("End Call"); + } + + get firstItem() { + // FIXME: items should be correspondences + switch (this.activeTabId) { + case "contacts": + return Object.values(this.store.Persona.records).find((p) => p.hasPhoneNumber); + case "activity": + return this.softphone.activities[0]; + case "recent": + return this.softphone.recentCalls[0]; + default: + throw Error("Cannot get first item of current tab: unknown tab id."); + } + } + + get icon() { + if (this.voip.hasPendingRequest) { + return "fa fa-spin fa-circle-o-notch"; + } + return "oi oi-voip"; + } + + /** @returns {boolean} */ + get isFolded() { + return this.softphone.isFolded; + } + + /** @returns {boolean} */ + get isOnSmallDevice() { + return this.env.services.ui.isSmall; + } + + /** @returns {boolean} */ + get isUiBlocked() { + if (this.voip.error) { + return !this.voip.error.isNonBlocking; + } + return false; + } + + /** @returns {string} */ + get numpadButtonTitleText() { + return this.softphone.numpad.isOpen ? _t("Close Numpad") : _t("Open Numpad"); + } + + /** @returns {boolean} */ + get shouldDisplayCallInvitation() { + const call = this.softphone.selectedCorrespondence?.call; + if (!call) { + return false; + } + return ( + call.state === "calling" && + call.direction === "incoming" && + Boolean(this.userAgent.session) + ); + } + + /** @returns {boolean} */ + get shouldDisplayCorrespondenceDetails() { + return Boolean(this.softphone.selectedCorrespondence); + } + + get tabList() { + return [ + { id: "recent", name: _t("Recent") }, + { id: "activity", name: _t("Next Activities") }, + { id: "contacts", name: _t("Contacts") }, + ]; + } + + /** @returns {string} */ + get topbarText() { + switch (this.voip.missedCalls) { + case 0: + return _t("VoIP"); + case 1: + return _t("1 missed call"); + case 2: + return _t("2 missed calls"); + default: + return _t("%(number)s missed calls", { number: this.voip.missedCalls }); + } + } + + /** @param {MouseEvent} ev */ + onClickClose(ev) { + markEventHandled(ev, "Softphone.close"); + this.softphone.hide(); + } + + /** @param {MouseEvent} ev */ + onClickError(ev) { + if (this.isUiBlocked) { + return; + } + this.voip.resolveError(); + } + + /** @param {MouseEvent} ev */ + onClickNumpad(ev) { + if (this.softphone.numpad.isOpen) { + this.softphone.closeNumpad(); + this.softphone.shouldFocus = true; + } else { + this.softphone.openNumpad(); + } + } + + /** @param {MouseEvent} ev */ + onClickPhone(ev) { + if (this.softphone.selectedCorrespondence?.call?.isInProgress) { + this.userAgent.hangup(); + return; + } + /** + * The auto-call mode should be turned on when clicking on the call + * button from the “Next Activities” tab without anything selected. + */ + if ( + this.activeTabId === "activity" && + !this.softphone.numpad.isOpen && + !this.softphone.selectedCorrespondence && + this.firstItem + ) { + this.softphone.selectCorrespondence({ activity: this.firstItem }); + this.softphone.isInAutoCallMode = true; + return; + } + const callData = this._getCallData(); + if (!callData) { + return; + } + this.userAgent.makeCall(callData); + } + + /** @param {MouseEvent} ev */ + onClickPostpone(ev) { + this.softphone.selectedCorrespondence.call.activity.postponed = true; + this.userAgent.hangup({ activityDone: false }); + } + + /** @param {MouseEvent} ev */ + onClickTab(ev) { + this.softphone.activeTabId = ev.target.dataset.tabId; + } + + /** @param {MouseEvent} ev */ + onClickTopbar(ev) { + if (isEventHandled(ev, "Softphone.close") || this.isOnSmallDevice) { + return; + } + if (this.isFolded) { + this.softphone.unfold(); + this.voip.resetMissedCalls(); + } else { + this.softphone.fold(); + } + } + + search() { + switch (this.activeTabId) { + case "contacts": + this.voip.fetchContacts(this.softphone.searchBarInputValue.trim()); + break; + case "activity": + this.voip.fetchTodayCallActivities(); + break; + case "recent": + this.voip.fetchRecentCalls(); + break; + } + } + + _getCallData() { + if (this.softphone.numpad.isOpen) { + const phoneNumber = this.softphone.numpad.value; + if (phoneNumber === "") { + return null; + } + return { phone_number: phoneNumber }; + } + if (this.softphone.selectedCorrespondence) { + const { activity, partner, phoneNumber } = this.softphone.selectedCorrespondence; + return { activity, partner, phone_number: phoneNumber }; + } + if (this.firstItem) { + // Note: would be simpler if all tab items were of the same type (e.g. correspondences) + let partner, phoneNumber; + switch (this.activeTabId) { + case "contacts": + partner = this.firstItem; + phoneNumber = this.firstItem.mobileNumber || this.firstItem.landlineNumber; + break; + case "recent": + partner = this.firstItem.partner; + phoneNumber = this.firstItem.phoneNumber; + break; + default: + return null; + } + return { partner, phone_number: phoneNumber }; + } + return null; + } +} diff --git a/voip/static/src/softphone/softphone.scss b/voip/static/src/softphone/softphone.scss new file mode 100644 index 0000000..bab64ac --- /dev/null +++ b/voip/static/src/softphone/softphone.scss @@ -0,0 +1,30 @@ +.o-voip-Softphone { + z-index: $zindex-modal - 2; + + width: 300px; + max-height: 100vh; + + :focus { + outline: 0; + } +} + +.o-voip-Softphone-topbar { + height: 36px; + + background-color: var(--voip__topBar-bg, #{$o-brand-odoo}); + color: #FFFFFF; + +} + +.o-voip-Softphone-error { + z-index: $zindex-modal - 1; +} + +.o-voip-Softphone-tab { + height: 360px; +} + +.o-voip-Softphone-content { + min-height: 440px; +} diff --git a/voip/static/src/softphone/softphone.xml b/voip/static/src/softphone/softphone.xml new file mode 100644 index 0000000..1da5809 --- /dev/null +++ b/voip/static/src/softphone/softphone.xml @@ -0,0 +1,43 @@ + + + +
+
+ + + + +
+
+ + diff --git a/voip/static/src/softphone/softphone_container.js b/voip/static/src/softphone/softphone_container.js new file mode 100644 index 0000000..956b0bd --- /dev/null +++ b/voip/static/src/softphone/softphone_container.js @@ -0,0 +1,26 @@ +/* @odoo-module */ + +import { Component, useState, xml } from "@odoo/owl"; + +import { Softphone } from "@voip/softphone/softphone"; +import { useService } from "@web/core/utils/hooks"; + +export class SoftphoneContainer extends Component { + static components = { Softphone }; + static props = {}; + static template = xml` +
+ +
+ `; + + setup() { + this.voip = useState(useService("voip")); + this.voip.isReady.then(() => { + if (this.voip.missedCalls !== 0) { + this.voip.softphone.show(); + this.voip.softphone.fold(); + } + }); + } +} diff --git a/voip/static/src/softphone/softphone_model.js b/voip/static/src/softphone/softphone_model.js new file mode 100644 index 0000000..68ded13 --- /dev/null +++ b/voip/static/src/softphone/softphone_model.js @@ -0,0 +1,125 @@ +/* @odoo-module */ + +import { Correspondence } from "@voip/core/correspondence_model"; +import { isSubstring } from "@voip/utils/utils"; + +export class Softphone { + activeTabId = "activity"; + isDisplayed = false; + isFolded = false; + /** + * The auto-call mode is turned on when the user clicks on the call button + * from the “Next Activities” tab. + */ + isInAutoCallMode = false; + numpad = { + isOpen: false, + value: "", + selection: { + start: 0, + end: 0, + direction: "none", + }, + }; + searchBarInputValue = ""; + selectedCorrespondence; + shouldFocus = false; + + constructor(store, voip) { + this.store = store; + this.voip = voip; + } + + get activities() { + const searchBarInputValue = this.searchBarInputValue.trim(); + return Object.values(this.store.Activity.records).filter( + (activity) => + activity.activity_category === "phonecall" && + ["today", "overdue"].includes(activity.state) && + ["phone", "mobile"].some((field) => activity[field]) && + activity.user_id[0] === this.store.user.user.id && + (!searchBarInputValue || + [ + activity.partner.name, + activity.partner.displayName, + activity.mobile, + activity.phone, + activity.name, + ].some((x) => isSubstring(x, searchBarInputValue))) + ); + } + + get contacts() { + const searchBarInputValue = this.searchBarInputValue.trim(); + return Object.values(this.store.Persona.records).filter( + (contact) => + contact.hasPhoneNumber && + (!searchBarInputValue || + [ + contact.name, + contact.displayName, + contact.mobileNumber, + contact.landlineNumber, + ].some((x) => isSubstring(x, searchBarInputValue))) + ); + } + + get recentCalls() { + const searchBarInputValue = this.searchBarInputValue.trim(); + const filteredCalls = (() => { + if (searchBarInputValue) { + return Object.values(this.voip.calls).filter( + (call) => + isSubstring(call.phoneNumber, searchBarInputValue) || + (call.partner && isSubstring(call.partner.name, searchBarInputValue)) + ); + } + return Object.values(this.voip.calls); + })(); + return filteredCalls.sort((a, b) => a.id < b.id); + } + + closeNumpad() { + this.numpad.isOpen = false; + } + + fold() { + if (this.store.isSmall) { + return; + } + this.isFolded = true; + } + + hide() { + this.isDisplayed = false; + } + + openNumpad() { + this.numpad.isOpen = true; + this.shouldFocus = true; + } + + selectCorrespondence({ activity, partner, call }) { + this.selectedCorrespondence = new Correspondence({ activity, partner, call }); + } + + selectNextActivity() { + const nextActivity = this.activities.find((activity) => !activity.postponed); + if (nextActivity) { + this.selectCorrespondence({ activity: nextActivity }); + } else { + this.isInAutoCallMode = false; + } + } + + show() { + this.isDisplayed = true; + this.isFolded = false; + this.shouldFocus = true; + } + + unfold() { + this.isFolded = false; + this.shouldFocus = true; + } +} diff --git a/voip/static/src/softphone/transfer_popover.js b/voip/static/src/softphone/transfer_popover.js new file mode 100644 index 0000000..64dc182 --- /dev/null +++ b/voip/static/src/softphone/transfer_popover.js @@ -0,0 +1,87 @@ +/* @odoo-module */ + +import { Component, markup, onMounted, useRef, useState } from "@odoo/owl"; + +import { useService } from "@web/core/utils/hooks"; +import { escape, escapeRegExp } from "@web/core/utils/strings"; +import { useDebounced } from "@web/core/utils/timing"; + +export class TransferPopover extends Component { + static props = ["close", "defaultInputValue"]; + static template = "voip.TransferPopover"; + + setup() { + this.inputRef = useRef("input"); + this.userAgent = useService("voip.user_agent"); + this.voip = useService("voip"); + this.store = useState(useService("mail.store")); + this.state = useState({ inputValue: this.props.defaultInputValue }); + this.onInputDebounced = useDebounced( + () => this.voip.fetchContacts(this.state.inputValue), + 350 + ); + onMounted(() => this.inputRef.el.focus()); + } + + get recipientSuggestions() { + const suggestions = []; + const searchTerms = this.state.inputValue.toLowerCase(); + if (searchTerms === "") { + return suggestions; + } + const contacts = Object.values(this.store.Persona.records).filter((x) => x.hasPhoneNumber); + const regex = new RegExp(`(^.*)(${escapeRegExp(searchTerms)})(.*$)`, "i"); + for (const contact of contacts) { + for (const key of ["displayName", "mobileNumber", "landlineNumber"]) { + const value = contact[key]; + if (!value) { + continue; + } + const [, before, match, after] = (value.match(regex) ?? []).map(escape); + if (!match) { + continue; + } + const suggestion = { + match: markup(`${before}${match}${after}`), + phoneNumber: contact.mobileNumber || contact.landlineNumber, + }; + if (key.endsWith("Number")) { + suggestion.match = markup( + `${escape(contact.displayName)} (${suggestion.match})` + ); + suggestion.phoneNumber = contact[key]; + } + suggestions.push(suggestion); + break; + } + } + return suggestions; + } + + /** @param {MouseEvent} ev */ + onClickRecipient(ev) { + this.state.inputValue = ev.target.dataset.number; + } + + /** @param {KeyboardEvent} ev */ + onKeydown(ev) { + if (ev.key === "Escape") { + this.props.close(); + } + } + + /** @param {KeyboardEvent} ev */ + onKeydownInput(ev) { + if (ev.key === "Enter") { + this.transfer(); + } + } + + transfer() { + if (this.state.inputValue === "") { + return; + } + this.userAgent.transfer(this.state.inputValue); + this.props.close(); + } +} diff --git a/voip/static/src/softphone/transfer_popover.scss b/voip/static/src/softphone/transfer_popover.scss new file mode 100644 index 0000000..95fe864 --- /dev/null +++ b/voip/static/src/softphone/transfer_popover.scss @@ -0,0 +1,7 @@ +.o-voip-TransferPopover { + max-width: $popover-max-width; +} + +.o-voip-TransferPopover-suggestionList { + max-height: 140px; +} diff --git a/voip/static/src/softphone/transfer_popover.xml b/voip/static/src/softphone/transfer_popover.xml new file mode 100644 index 0000000..aed6820 --- /dev/null +++ b/voip/static/src/softphone/transfer_popover.xml @@ -0,0 +1,27 @@ + + + + +
+

+ Transfer to + +

+
+ + + + + +
+
+
+
+ + +
+
+
+ +
diff --git a/voip/static/src/utils/utils.js b/voip/static/src/utils/utils.js new file mode 100644 index 0000000..a5df80e --- /dev/null +++ b/voip/static/src/utils/utils.js @@ -0,0 +1,24 @@ +/* @odoo-module */ + +/** + * Removes whitespaces, dashes, slashes and periods from a phone number. + * + * @param {string} phoneNumber + * @returns {string} + */ +export function cleanPhoneNumber(phoneNumber) { + // U+00AD is the “soft hyphen” character + return phoneNumber.replace(/[\s-/.\u00AD]/g, ""); +} + +export function isSubstring(targetString, substring) { + if (!targetString) { + return false; + } + const normalize = (str) => + str + .toLowerCase() + .normalize("NFD") + .replaceAll(/\p{Diacritic}/gu, ""); + return normalize(targetString).includes(normalize(substring)); +} diff --git a/voip/static/src/web/call_queue_switch.js b/voip/static/src/web/call_queue_switch.js new file mode 100644 index 0000000..9e809a8 --- /dev/null +++ b/voip/static/src/web/call_queue_switch.js @@ -0,0 +1,107 @@ +/* @odoo-module */ + +import { Component, useExternalListener, useState } from "@odoo/owl"; + +import { _t } from "@web/core/l10n/translation"; +import { registry } from "@web/core/registry"; +import { useService } from "@web/core/utils/hooks"; +import { standardFieldProps } from "@web/views/fields/standard_field_props"; + +/** + * Represents a button in CRM leads Kanban view cards that deletes or creates + * call activity from the related record. Call activities created this way are + * included in the "Next activities" tab of the softphone. + * + * The term "call queue" refers to the list of the elements in the "Next + * activities" tab. + */ +export class CallQueueSwitch extends Component { + static props = standardFieldProps; + static template = "voip.CallQueueSwitch"; + + /** + * Useful to prevent other unnecessary requests to the ORM being sent if one + * is already in progress. + */ + _hasPendingRequest = false; + + setup() { + this.state = useState({ isRecordInCallQueue: this.props.record.data[this.props.name] }); + this.orm = useService("orm"); + this.voip = useService("voip"); + // useful to update the state of this view when the record is deleted + // from the "Next Activities" tab of the softphone + useExternalListener(this.voip.bus, "on-call-activity-removed", this._onCallActivityRemoved); + } + + /** @returns {string} */ + get iconClasses() { + return this.state.isRecordInCallQueue ? "fa-minus text-danger" : "fa-plus text-success"; + } + + /** @returns {string} */ + get titleText() { + return this.state.isRecordInCallQueue + ? _t("Remove from Call Queue") + : _t("Add to Call Queue"); + } + + async addToCallQueue() { + if (this._hasPendingRequest) { + return; + } + await this._makeRequest(() => + this.orm.call(this.props.record.resModel, "create_call_activity", [ + [this.props.record.resId], + ]) + ); + this.state.isRecordInCallQueue = true; + await this.props.record.load(); + this.props.record.model.notify(); + } + + /** @param {MouseEvent} ev */ + onClick(ev) { + if (this.state.isRecordInCallQueue) { + this.removeFromCallQueue(); + } else { + this.addToCallQueue(); + } + } + + async removeFromCallQueue() { + if (this._hasPendingRequest) { + return; + } + await this._makeRequest(async () => + this.orm.call(this.props.record.resModel, "delete_call_activity", [ + [this.props.record.resId], + ]) + ); + this.state.isRecordInCallQueue = false; + await this.props.record.load(); + this.props.record.model.notify(); + } + + /** @param {function} callback */ + async _makeRequest(callback) { + this._hasPendingRequest = true; + await callback(); + this._hasPendingRequest = false; + } + + /** + * @param {Object} param0 + * @param {integer} param0.detail The resId of the deleted record. + */ + _onCallActivityRemoved({ detail: resId }) { + // note: the resId is enough to identify the record as long as only + // crm.lead uses the CallQueueSwitch field widget. + if (this.props.record.resId !== resId) { + return; + } + this.state.isRecordInCallQueue = false; + } +} + +registry.category("fields").add("call_queue_switch", { component: CallQueueSwitch }); diff --git a/voip/static/src/web/call_queue_switch.scss b/voip/static/src/web/call_queue_switch.scss new file mode 100644 index 0000000..0a9d9e0 --- /dev/null +++ b/voip/static/src/web/call_queue_switch.scss @@ -0,0 +1,16 @@ +.o-voip-call-queue-switch-op-icon { + left: 5px; + bottom: 8px; + + font-size: $font-size-sm; +} + +@include media-breakpoint-up(md) { + .o-voip-call-queue-switch { + visibility: hidden; + } + + .o_kanban_record:hover .o-voip-call-queue-switch { + visibility: visible; + } +} diff --git a/voip/static/src/web/call_queue_switch.xml b/voip/static/src/web/call_queue_switch.xml new file mode 100644 index 0000000..dfbdbc9 --- /dev/null +++ b/voip/static/src/web/call_queue_switch.xml @@ -0,0 +1,13 @@ + + + + +
+ +
+
+ +
diff --git a/voip/static/src/web/phone_field_patch.js b/voip/static/src/web/phone_field_patch.js new file mode 100644 index 0000000..59fd600 --- /dev/null +++ b/voip/static/src/web/phone_field_patch.js @@ -0,0 +1,40 @@ +/* @odoo-module */ + +import { useService } from "@web/core/utils/hooks"; +import { patch } from "@web/core/utils/patch"; +import { PhoneField } from "@web/views/fields/phone/phone_field"; + +patch(PhoneField.prototype, { + setup() { + super.setup(); + if ("voip" in this.env.services) { + // FIXME: this is only because otherwise @web tests would fail. + // This is one of the major pitfalls of patching. + this.voip = useService("voip"); + this.callService = useService("voip.call"); + this.userAgent = useService("voip.user_agent"); + } + }, + /** + * Called when the phone number is clicked. + * + * @private + * @param {MouseEvent} ev + */ + onLinkClicked(ev) { + if (!this.voip?.canCall) { + return; + } + if (ev.target.matches("a")) { + ev.stopImmediatePropagation(); + } + ev.preventDefault(); + const phoneType = ev.target.closest(".o_field_phone").getAttribute("name"); + const { record } = this.props; + this.userAgent.makeCall({ + phone_number: record.data[phoneType], + res_id: record.resId, + res_model: record.resModel, + }); + }, +}); diff --git a/voip/static/src/web/phone_field_patch.xml b/voip/static/src/web/phone_field_patch.xml new file mode 100644 index 0000000..1161dec --- /dev/null +++ b/voip/static/src/web/phone_field_patch.xml @@ -0,0 +1,19 @@ + + + + + + onLinkClicked + + + + + + onLinkClicked + + + onLinkClicked + + + + diff --git a/voip/static/src/web/voip_systray_item.js b/voip/static/src/web/voip_systray_item.js new file mode 100644 index 0000000..f6e396e --- /dev/null +++ b/voip/static/src/web/voip_systray_item.js @@ -0,0 +1,46 @@ +/* @odoo-module */ + +import { Component, useState } from "@odoo/owl"; + +import { _t } from "@web/core/l10n/translation"; +import { useService } from "@web/core/utils/hooks"; + +export class VoipSystrayItem extends Component { + static props = {}; + static template = "voip.SystrayItem"; + + setup() { + this.voip = useState(useService("voip")); + this.softphone = this.voip.softphone; + } + + /** + * Translated text used as the title attribute of the systray item. + * + * @returns {string} + */ + get titleText() { + if (this.softphone.isDisplayed) { + if (this.softphone.isFolded) { + return _t("Unfold Softphone"); + } + return _t("Close Softphone"); + } + return _t("Open Softphone"); + } + + /** @param {MouseEvent} ev */ + onClick(ev) { + if (this.softphone.isDisplayed) { + if (this.softphone.isFolded) { + this.softphone.unfold(); + this.voip.resetMissedCalls(); + } else { + this.softphone.hide(); + } + } else { + this.softphone.show(); + this.voip.resetMissedCalls(); + } + } +} diff --git a/voip/static/src/web/voip_systray_item.xml b/voip/static/src/web/voip_systray_item.xml new file mode 100644 index 0000000..6bde0dd --- /dev/null +++ b/voip/static/src/web/voip_systray_item.xml @@ -0,0 +1,11 @@ + + + + +
+ +
+
+
diff --git a/voip/static/tests/activity/activity_patch_tests.js b/voip/static/tests/activity/activity_patch_tests.js new file mode 100644 index 0000000..7ed4b91 --- /dev/null +++ b/voip/static/tests/activity/activity_patch_tests.js @@ -0,0 +1,84 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("activity"); + +QUnit.test("Landline number is displayed in activity info.", async () => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({}); + pyEnv["mail.activity"].create({ + phone: "+1-202-555-0182", + res_id: partnerId, + res_model: "res.partner", + }); + const { openFormView } = await start(); + openFormView("res.partner", partnerId); + await contains(".o-mail-Activity-voip-landline-number", { text: "+1-202-555-0182" }); +}); + +QUnit.test("Mobile number is displayed in activity info.", async () => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({}); + pyEnv["mail.activity"].create({ + mobile: "4567829775", + res_id: partnerId, + res_model: "res.partner", + }); + const { openFormView } = await start(); + openFormView("res.partner", partnerId); + await contains(".o-mail-Activity-voip-mobile-number", { text: "4567829775" }); +}); + +QUnit.test( + "When both landline and mobile numbers are provided, a prefix is added to distinguish the two in activity info.", + async () => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({}); + pyEnv["mail.activity"].create({ + phone: "+1-202-555-0182", + mobile: "4567829775", + res_id: partnerId, + res_model: "res.partner", + }); + const { openFormView } = await start(); + openFormView("res.partner", partnerId); + await contains(".o-mail-Activity-voip-mobile-number", { text: "Mobile: 4567829775" }); + await contains(".o-mail-Activity-voip-landline-number", { text: "Phone: +1-202-555-0182" }); + } +); + +QUnit.test("Click on landline number from activity info triggers a call.", async (assert) => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({}); + pyEnv["mail.activity"].create({ + phone: "+1-202-555-0182", + res_id: partnerId, + res_model: "res.partner", + }); + const { openFormView } = await start(); + openFormView("res.partner", partnerId); + await click(".o-mail-Activity-voip-landline-number > a"); + assert.strictEqual( + pyEnv["voip.call"].searchCount([["phone_number", "=", "+1-202-555-0182"]]), + 1 + ); +}); + +QUnit.test("Click on mobile number from activity info triggers a call.", async (assert) => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({}); + pyEnv["mail.activity"].create({ + mobile: "4567829775", + res_id: partnerId, + res_model: "res.partner", + }); + const { openFormView } = await start(); + openFormView("res.partner", partnerId); + await click(".o-mail-Activity-voip-mobile-number > a"); + assert.strictEqual(pyEnv["voip.call"].searchCount([["phone_number", "=", "4567829775"]]), 1); +}); diff --git a/voip/static/tests/helpers/mock_server/models/mail_activity.js b/voip/static/tests/helpers/mock_server/models/mail_activity.js new file mode 100644 index 0000000..eb72996 --- /dev/null +++ b/voip/static/tests/helpers/mock_server/models/mail_activity.js @@ -0,0 +1,83 @@ +/* @odoo-module */ + +import "@mail/../tests/helpers/mock_server/models/mail_activity"; // ensure mail overrides are applied first + +import { patch } from "@web/core/utils/patch"; +import { serializeDate, today } from "@web/core/l10n/dates"; +import { MockServer } from "@web/../tests/helpers/mock_server"; + +patch(MockServer.prototype, { + /** + * @override + */ + async _performRPC(_route, { model, method, args, kwargs }) { + if (model !== "mail.activity") { + return super._performRPC(...arguments); + } + switch (method) { + case "get_today_call_activities": + return this._mockMailActivityGetTodayCallActivities(...args, kwargs); + default: + return super._performRPC(...arguments); + } + }, + _mockMailActivityGetTodayCallActivities() { + const activityTypeIds = this.pyEnv["mail.activity.type"].search([ + ["category", "=", "phonecall"], + ]); + return this._mockMailActivity_FormatCallActivities( + this.getRecords("mail.activity", [ + ["activity_type_id", "in", activityTypeIds], + ["user_id", "=", this.pyEnv.currentUserId], + ["date_deadline", "<=", serializeDate(today())], + ]) + ); + }, + _mockMailActivity_FormatCallActivities(activities) { + const formattedActivities = []; + for (const activity of activities) { + const [user] = this.pyEnv["res.users"].searchRead([["id", "=", activity.user_id]]); + const state = (() => { + const now = serializeDate(today()); + if (activity.date_deadline === now) { + return "today"; + } else if (activity.date_deadline < now) { + return "overdue"; + } else { + return "planned"; + } + })(); + const [record] = this.pyEnv[activity.res_model].searchRead([ + ["id", "=", activity.res_id], + ]); + const activityData = { + id: activity.id, + activity_category: "phonecall", + res_id: activity.res_id, + res_model: activity.res_model, + res_name: activity.res_name || record.display_name, + state, + user_id: [activity.user_id, user.name], + }; + let relatedPartner; + if (activity.res_model === "res.partner") { + [relatedPartner] = this.getRecords("res.partner", [["id", "=", activity.res_id]]); + } else { + if (record.partner_id) { + [relatedPartner] = this.getRecords("res.partner", [ + ["id", "=", record.partner_id], + ]); + } + } + if (relatedPartner) { + activityData.partner = this._mockResPartnerMailPartnerFormat([ + relatedPartner.id, + ]).get(relatedPartner.id); + } + activityData.mobile = record.mobile || relatedPartner?.mobile; + activityData.phone = record.phone || relatedPartner?.phone; + formattedActivities.push(activityData); + } + return formattedActivities; + }, +}); diff --git a/voip/static/tests/helpers/mock_server/models/res_partner.js b/voip/static/tests/helpers/mock_server/models/res_partner.js new file mode 100644 index 0000000..9e822bb --- /dev/null +++ b/voip/static/tests/helpers/mock_server/models/res_partner.js @@ -0,0 +1,44 @@ +/* @odoo-module */ + +import "@mail/../tests/helpers/mock_server/models/res_partner"; // ensure mail overrides are applied first + +import { patch } from "@web/core/utils/patch"; +import { MockServer } from "@web/../tests/helpers/mock_server"; + +patch(MockServer.prototype, { + /** + * @override + */ + async _performRPC(_route, { model, method, args }) { + if (model !== "res.partner") { + return super._performRPC(...arguments); + } + switch (method) { + case "get_contacts": + return this._mockResPartnerGetContacts(args); + default: + return super._performRPC(...arguments); + } + }, + /** + * @returns {Object[]} + */ + _mockResPartnerGetContacts() { + return this._mockResPartner_FormatContacts( + this.getRecords("res.partner", ["|", ["mobile", "!=", false], ["phone", "!=", false]]) + ); + }, + /** + * @returns {Object[]} + */ + _mockResPartner_FormatContacts(contacts) { + return contacts.map((contact) => ({ + id: contact.id, + displayName: contact.display_name, + email: contact.email, + landlineNumber: contact.phone, + mobileNumber: contact.mobile, + name: contact.display_name, + })); + }, +}); diff --git a/voip/static/tests/helpers/mock_server/models/res_users.js b/voip/static/tests/helpers/mock_server/models/res_users.js new file mode 100644 index 0000000..41b1354 --- /dev/null +++ b/voip/static/tests/helpers/mock_server/models/res_users.js @@ -0,0 +1,24 @@ +/* @odoo-module */ + +import "@mail/../tests/helpers/mock_server/models/res_users"; // ensure mail overrides are applied first + +import { patch } from "@web/core/utils/patch"; +import { MockServer } from "@web/../tests/helpers/mock_server"; + +patch(MockServer.prototype, { + /** + * @override + */ + _mockResUsers_InitMessaging(...args) { + const getConfig = (key) => + this.getRecords("ir.config_parameter", [["key", "=", key]])[0].value; + return { + ...super._mockResUsers_InitMessaging(...args), + voipConfig: { + mode: getConfig("voip.mode"), + pbxAddress: getConfig("voip.pbx_ip"), + webSocketUrl: getConfig("voip.wsServer"), + }, + }; + }, +}); diff --git a/voip/static/tests/helpers/mock_server/models/voip_call.js b/voip/static/tests/helpers/mock_server/models/voip_call.js new file mode 100644 index 0000000..64c8e26 --- /dev/null +++ b/voip/static/tests/helpers/mock_server/models/voip_call.js @@ -0,0 +1,173 @@ +/* @odoo-module */ + +import { patch } from "@web/core/utils/patch"; +import { serializeDate, today } from "@web/core/l10n/dates"; +import { MockServer } from "@web/../tests/helpers/mock_server"; + +/** + * @typedef {Object} CallData + * @property {string} direction + * @property {number|undefined} partner_id + * @property {string} phone_number + * @property {string} state + */ + +patch(MockServer.prototype, { + /** + * @override + */ + async _performRPC(_route, { model, method, args, kwargs }) { + if (model !== "voip.call") { + return super._performRPC(...arguments); + } + delete kwargs.context; + switch (method) { + case "abort_call": + return this._mockVoipCallAbortCall(...args, kwargs); + case "create_and_format": + return this._mockVoipCallCreateAndFormat(...args, kwargs); + case "end_call": + return this._mockVoipCallEndCall(...args, kwargs); + case "get_contact_info": + return this._mockVoipCallGetContactInfo(...args, kwargs); + case "get_recent_phone_calls": + return this._mockVoipCallGetRecentPhoneCalls(...args, kwargs); + case "start_call": + return this._mockVoipCallStartCall(...args, kwargs); + default: + return super._performRPC(...arguments); + } + }, + /** + * @param {number[]} param0 + * @returns {Object[]} + */ + _mockVoipCallAbortCall(ids) { + this.pyEnv["voip.call"].write(ids, { state: "aborted" }); + return this._mockVoipCall_FormatCalls(ids); + }, + /** + * @param {Object} param0 + * @param {number|undefined} param0.res_id + * @param {string|undefined} param0.res_model + * @param {CallData} param0.kwargs + * @returns {Object[]} + */ + _mockVoipCallCreateAndFormat({ res_id, res_model, ...kwargs }) { + // recipient finding logic based on (res_model, res_id) not mocked + return this._mockVoipCall_FormatCalls(this.pyEnv["voip.call"].create(kwargs)); + }, + /** + * @param {number[]} param0 + * @param {string|undefined} activity_name + * @returns {Object[]} + */ + _mockVoipCallEndCall(ids, activity_name) { + this.pyEnv["voip.call"].write(ids, { + end_date: serializeDate(today()), + state: "terminated", + }); + if (activity_name) { + this.pyEnv["voip.call"].write(ids, { activity_name }); + } + return this._mockVoipCall_FormatCalls(ids); + }, + _mockVoipCallGetRecentPhoneCalls(_args, { search_terms, offset = 0, limit } = {}) { + const domain = [["user_id", "=", this.pyEnv.currentUserId]]; + if (search_terms) { + for (const field of ["phone_number", "partner_id.name", "activity_name"]) { + domain.push("|", [field, "ilike", search_terms]); + } + } + const recordIds = this.pyEnv["voip.call"].search(domain, { offset, limit, order: "create_date DESC" }); + return this._mockVoipCall_FormatCalls(recordIds); + }, + _mockVoipCallGetContactInfo(ids) { + if (!Array.isArray(ids)) { + ids = [ids]; + } + const records = this.getRecords("voip.call", [["id", "in", ids]]); + if (records.length !== 1) { + throw new Error("self.ensure_one"); + } + const [call] = records; + const [partnerId] = this.pyEnv["res.partner"].search( + ["|", ["phone", "=", call.phone_number], ["mobile", "=", call.phone_number]], + { limit: 1 } + ); + if (!partnerId) { + return false; + } + this.pyEnv["voip.call"].write(ids, { partner_id: partnerId }); + return this._mockResPartnerMailPartnerFormat([partnerId]).get(partnerId); + }, + /** + * @param {number[]} param0 + * @returns {Object[]} + */ + _mockVoipCallStartCall(ids) { + this.pyEnv["voip.call"].write(ids, { + start_date: serializeDate(today()), + state: "ongoing", + }); + return this._mockVoipCall_FormatCalls(ids); + }, + _mockVoipCall_ComputeDisplayName(calls) { + const getName = (call) => { + if (call.activity_name) { + return call.activity_name; + } + const preposition = call.direction === "incoming" ? "from" : "to"; + switch (call.state) { + case "aborted": + return `Aborted call to ${call.phone_number}`; + case "missed": + return `Missed call from ${call.phone_number}`; + case "rejected": + return `Rejected call ${preposition} ${call.phone_number}`; + default: + if (call.partner_id) { + const [partner] = this.getRecords("res.partner", [ + ["id", "=", call.partner_id], + ]); + return `Call ${preposition} ${partner.name}`; + } + return `Call ${preposition} ${call.phone_number}`; + } + }; + for (const call of calls) { + call.display_name = getName(call); + } + }, + /** + * @param {number[]|number} ids + * @returns {Object[]} + */ + _mockVoipCall_FormatCalls(ids) { + if (!Array.isArray(ids)) { + ids = [ids]; + } + const records = this.getRecords("voip.call", [["id", "in", ids]]); + this._mockVoipCall_ComputeDisplayName(records); + const formattedCalls = []; + for (const call of records) { + const data = { + id: call.id, + creationDate: call.create_date, + direction: call.direction, + displayName: call.display_name, + endDate: call.end_date, + phoneNumber: call.phone_number, + startDate: call.start_date, + state: call.state, + }; + if (Number.isInteger(call.partner_id)) { + data.partner = this._mockResPartnerMailPartnerFormat([call.partner_id]).get( + call.partner_id + ); + } + formattedCalls.push(data); + } + return formattedCalls; + }, +}); diff --git a/voip/static/tests/helpers/model_definitions_setup.js b/voip/static/tests/helpers/model_definitions_setup.js new file mode 100644 index 0000000..7f2ead5 --- /dev/null +++ b/voip/static/tests/helpers/model_definitions_setup.js @@ -0,0 +1,18 @@ +/* @odoo-module */ + +import { + addModelNamesToFetch, + insertModelFields, + insertRecords, +} from "@bus/../tests/helpers/model_definitions_helpers"; + +addModelNamesToFetch(["ir.config_parameter", "voip.call"]); +insertModelFields("voip.call", { + direction: { default: "outgoing" }, + state: { default: "calling" }, +}); +insertRecords("ir.config_parameter", [ + { key: "voip.mode", value: "demo" }, + { key: "voip.pbx_ip", value: "pbx.example.com" }, + { key: "voip.wsServer", value: "wss://example.com" }, +]); diff --git a/voip/static/tests/helpers/webclient_setup_patch.js b/voip/static/tests/helpers/webclient_setup_patch.js new file mode 100644 index 0000000..d423d57 --- /dev/null +++ b/voip/static/tests/helpers/webclient_setup_patch.js @@ -0,0 +1,32 @@ +/* @odoo-module */ + +import { setupManager } from "@mail/../tests/helpers/webclient_setup"; + +import { patch } from "@web/core/utils/patch"; +import { makeFakeUserService } from "@web/../tests/helpers/mock_services"; +import { registry } from "@web/core/registry"; + +patch(setupManager, { + setupServiceRegistries() { + const services = registry.category("services"); + services.add("voip.ringtone", { + start() { + const ringtones = { + dial: {}, + incoming: {}, + ringback: {}, + }; + Object.values(ringtones).forEach((r) => Object.assign(r, { play: () => {} })); + return { + ...ringtones, + stopPlaying() {}, + }; + }, + }); + if (!services.contains("user")) { + const fakeUserService = makeFakeUserService((group) => group === "base.group_user"); + services.add("user", fakeUserService); + } + return super.setupServiceRegistries(...arguments); + }, +}); diff --git a/voip/static/tests/softphone/activity_tab_tests.js b/voip/static/tests/softphone/activity_tab_tests.js new file mode 100644 index 0000000..88afd51 --- /dev/null +++ b/voip/static/tests/softphone/activity_tab_tests.js @@ -0,0 +1,101 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("activity_tab"); + +QUnit.test("Today call activities are displayed in the “Next Activities” tab.", async () => { + const pyEnv = await startServer(); + const [activityTypeId] = pyEnv["mail.activity.type"].search([["category", "=", "phonecall"]]); + const [partnerId1, partnerId2] = pyEnv["res.partner"].create([ + { + name: "Françoise Délire", + display_name: "Boulangerie Vortex, Françoise Délire", + mobile: "+1 246 203 6982", + }, + { + name: "Naomi Dag", + display_name: "Sanit’Hair, Naomi Dag", + phone: "777 2124", + }, + ]); + pyEnv["mail.activity"].create([ + { + activity_type_id: activityTypeId, + date_deadline: "1999-01-29", + res_id: partnerId1, + res_model: "res.partner", + user_id: pyEnv.currentUserId, + }, + { + activity_type_id: activityTypeId, + date_deadline: "2016-08-06", + res_id: partnerId2, + res_model: "res.partner", + user_id: pyEnv.currentUserId, + }, + ]); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-ActivitiesTab .list-group-item-action", { count: 2 }); + await contains(".o-voip-ActivitiesTab .list-group-item-action", { + text: "Boulangerie Vortex, Françoise Délire", + }); + await contains(".o-voip-ActivitiesTab .list-group-item-action", { + text: "Sanit’Hair, Naomi Dag", + }); +}); + +QUnit.test( + "The name of the partner linked to an activity is displayed in the activity tab.", + async () => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({ + name: "Gwendoline Zumba", + mobile: "515-555-0104", + }); + pyEnv["mail.activity"].create([ + { + activity_type_id: pyEnv["mail.activity.type"].search([ + ["category", "=", "phonecall"], + ])[0], + date_deadline: "2017-08-13", + res_id: partnerId, + res_model: "res.partner", + user_id: pyEnv.currentUserId, + }, + ]); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-ActivitiesTab .list-group-item-action .fw-bold", { + text: "Gwendoline Zumba", + }); + } +); + +QUnit.test("Clicking on an activity opens the correspondence details", async () => { + const pyEnv = await startServer(); + const partnerId = pyEnv["res.partner"].create({ + name: "Yveline Colbert", + phone: "456 284 9936", + }); + pyEnv["mail.activity"].create([ + { + activity_type_id: pyEnv["mail.activity.type"].search([ + ["category", "=", "phonecall"], + ])[0], + date_deadline: "2022-11-16", + res_id: partnerId, + res_model: "res.partner", + user_id: pyEnv.currentUserId, + }, + ]); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o-voip-ActivitiesTab .list-group-item-action", { text: "Yveline Colbert" }); + await contains(".o-voip-CorrespondenceDetails"); +}); diff --git a/voip/static/tests/softphone/contacts_tab_tests.js b/voip/static/tests/softphone/contacts_tab_tests.js new file mode 100644 index 0000000..e29b986 --- /dev/null +++ b/voip/static/tests/softphone/contacts_tab_tests.js @@ -0,0 +1,39 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains, insertText } from "@web/../tests/utils"; + +QUnit.module("contacts_tab"); + +QUnit.test("Partners with a phone number are displayed in Contacts tab", async () => { + const pyEnv = await startServer(); + pyEnv["res.partner"].create([ + { display_name: "Michel Landline", phone: "+1-307-555-0120" }, + { display_name: "Maxim Mobile", mobile: "+257 114 7579" }, + { display_name: "Patrice Nomo" }, + ]); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Contacts" }); + await contains(".o-voip-ContactsTab .list-group-item-action", { count: 2 }); + await contains(".o-voip-ContactsTab b", { text: "Michel Landline" }); + await contains(".o-voip-ContactsTab b", { text: "Maxim Mobile" }); + await contains(".o-voip-ContactsTab b", { text: "Patrice Nomo", count: 0 }); +}); + +QUnit.test("Typing in the search bar fetches and displays the matching contacts", async () => { + const pyEnv = await startServer(); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Contacts" }); + pyEnv["res.partner"].create([ + { display_name: "Morshu RTX", phone: "+61-855-527-77" }, + { display_name: "Gargamel", mobile: "+61-855-583-671" }, + ]); + await insertText("input[placeholder=Search]", "Morshu"); + await contains(".o-voip-ContactsTab b", { text: "Morshu RTX" }); + await contains(".o-voip-ContactsTab b", { text: "Gargamel", count: 0 }); +}); diff --git a/voip/static/tests/softphone/correspondence_details_tests.js b/voip/static/tests/softphone/correspondence_details_tests.js new file mode 100644 index 0000000..fdae35e --- /dev/null +++ b/voip/static/tests/softphone/correspondence_details_tests.js @@ -0,0 +1,52 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("correspondence_details"); + +QUnit.test("The partner's phone number is displayed in correspondence details.", async () => { + const pyEnv = await startServer(); + const phoneNumber = "355 649 6295"; + pyEnv["res.partner"].create({ display_name: "Maxime Randonnées", phone: phoneNumber }); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Contacts" }); + await click(".list-group-item-action", { text: "Maxime Randonnées" }); + await contains(`[href$="${phoneNumber}"] .fa-phone`); +}); + +QUnit.test("The partner's mobile number is displayed in correspondence details.", async () => { + const pyEnv = await startServer(); + const phoneNumber = "0456 703 6196"; + pyEnv["res.partner"].create({ display_name: "Maxime Randonnées", mobile: phoneNumber }); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Contacts" }); + await click(".list-group-item-action", { text: "Maxime Randonnées" }); + await contains(`[href$="${phoneNumber}"] .fa-mobile`); +}); + +QUnit.test("Calls are properly displayed even if their state is broken.", async () => { + const pyEnv = await startServer(); + // If for some reason (e.g. a power outage in the middle of a call) the call + // is never properly terminated, it may be stuck in the “calling” or + // “ongoing” state. Let's mock this situation: + pyEnv["voip.call"].create({ phone_number: "+263-735-552-56", state: "calling", user_id: pyEnv.currentUserId }); + pyEnv["voip.call"].create({ phone_number: "+32-495-558-286", state: "ongoing", user_id: pyEnv.currentUserId }); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Recent" }); + await click(".list-group-item-action", { text: "Call to +263-735-552-56" }); + await contains(".o-voip-CorrespondenceDetails"); + await contains(".o-voip-CorrespondenceDetails .bg-success.bg-opacity-25", { count: 0 }); + await contains("button[title='End Call']", { count: 0 }); + await click("button[title='Close details']"); + await click(".list-group-item-action", { text: "Call to +32-495-558-286" }); + await contains(".o-voip-CorrespondenceDetails"); + await contains(".o-voip-CorrespondenceDetails .bg-success.bg-opacity-25", { count: 0 }); + await contains("button[title='End Call']", { count: 0 }); +}); diff --git a/voip/static/tests/softphone/device_selection_dialog.mobile.js b/voip/static/tests/softphone/device_selection_dialog.mobile.js new file mode 100644 index 0000000..e53ebf9 --- /dev/null +++ b/voip/static/tests/softphone/device_selection_dialog.mobile.js @@ -0,0 +1,57 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { browser } from "@web/core/browser/browser"; +import { patchWithCleanup } from "@web/../tests/helpers/utils"; +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("device_selection_dialog_mobile"); + +QUnit.test("Switch audio input", async () => { + patchWithCleanup(browser, { + navigator: { + ...browser.navigator, + userAgent: "Chrome/0.0.0 (Linux; Android 13; Odoo TestSuite)", + mediaDevices: { + async enumerateDevices() { + return [ + { + deviceId: "default", + kind: "audioinput", + }, + { + deviceId: "headset-earpiece-audio-input", + kind: "audioinput", + }, + { + deviceId: "default-video-input", + kind: "videoinput", + }, + { + deviceId: "default", + kind: "audiooutput", + }, + ]; + }, + }, + }, + }); + const pyEnv = await startServer(); + pyEnv["res.partner"].create({ display_name: "Gwonam", phone: "515-555-0170" }); + pyEnv["res.users.settings"].create({ + how_to_call_on_mobile: "voip", + user_id: pyEnv.currentUserId, + }); + const { advanceTime } = await start({ hasTimeControl: true }); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Contacts" }); + await contains(".o-voip-ContactsTab b", { text: "Gwonam" }); + await click("button[title='Call']"); + await advanceTime(5000); + await click("button[title='Change input device']:enabled"); + await contains("select[id='device-select']"); + await contains("option", { count: 2 }); +}); diff --git a/voip/static/tests/softphone/numpad_tests.js b/voip/static/tests/softphone/numpad_tests.js new file mode 100644 index 0000000..13f6baa --- /dev/null +++ b/voip/static/tests/softphone/numpad_tests.js @@ -0,0 +1,169 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { nextTick, triggerHotkey } from "@web/../tests/helpers/utils"; +import { click, contains, insertText } from "@web/../tests/utils"; + +QUnit.module("numpad"); + +QUnit.test("Number input is focused when opening the numpad.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await contains("input[placeholder='Enter the number…']:focus"); +}); + +QUnit.test( + "Number input content is persisted when closing then re-opening the numpad.", + async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "513"); + await click("button[title='Close Numpad']"); + await click("button[title='Open Numpad']"); + await contains("input[placeholder='Enter the number…']", { value: "513" }); + } +); + +QUnit.test( + "Clicking on the “Backspace button” deletes the last character of the number input.", + async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "123"); + await click("button[title='Backspace']"); + await nextTick(); + await contains("input[placeholder='Enter the number…']", { value: "12" }); + } +); + +QUnit.test( + "Cursor is taken into account when clicking Backspace.", + async (assert) => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "01123456"); + const input = document.querySelector("input[placeholder='Enter the number…']"); + input.setSelectionRange(3, 3); + await click("button[title='Backspace']"); + assert.strictEqual(input.selectionStart, 2); + assert.strictEqual(input.selectionEnd, 2); + await contains("input[placeholder='Enter the number…']", { value: "0123456" }); + } +); + +QUnit.test( + "Cursor range selection is taken into account when clicking Backspace.", + async (assert) => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "011123456"); + const input = document.querySelector("input[placeholder='Enter the number…']"); + input.setSelectionRange(2, 4); + await click("button[title='Backspace']"); + assert.strictEqual(input.selectionStart, 2); + assert.strictEqual(input.selectionEnd, 2); + await contains("input[placeholder='Enter the number…']", { value: "0123456" }); + } +); + +QUnit.test( + "When cursor is at the beginning of the input, clicking Backspace does nothing.", + async (assert) => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "0123456"); + const input = document.querySelector("input[placeholder='Enter the number…']"); + input.setSelectionRange(0, 0); + await click("button[title='Backspace']"); + assert.strictEqual(input.selectionStart, 0); + assert.strictEqual(input.selectionEnd, 0); + await contains("input[placeholder='Enter the number…']", { value: "0123456" }); + } +); + +QUnit.test("Clicking on a key appends it to the number input.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "123"); + await click("button", { text: "#" }); + await nextTick(); + await contains("input[placeholder='Enter the number…']", { value: "123#" }); +}); + +QUnit.test("Number input is focused after clicking on a key.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await click("button", { text: "2" }); + await nextTick(); + await contains("input[placeholder='Enter the number…']:focus"); +}); + +QUnit.test( + "Cursor is taken into account when clicking on a key.", + async (assert) => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "023456"); + const input = document.querySelector("input[placeholder='Enter the number…']"); + input.setSelectionRange(1, 1); + await click("button", { text: "1" }); + assert.strictEqual(input.selectionStart, 2); + assert.strictEqual(input.selectionEnd, 2); + await contains("input[placeholder='Enter the number…']", { value: "0123456" }); + } +); + +QUnit.test( + "Cursor range selection is taken into account when clicking on a key.", + async (assert) => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "0223456"); + const input = document.querySelector("input[placeholder='Enter the number…']"); + input.setSelectionRange(1, 2); + await click("button", { text: "1" }); + assert.strictEqual(input.selectionStart, 2); + assert.strictEqual(input.selectionEnd, 2); + await contains("input[placeholder='Enter the number…']", { value: "0123456" }); + } +); + +QUnit.test("Pressing Enter in the input makes a call to the dialed number.", async (assert) => { + const pyEnv = await startServer(); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await contains("input[placeholder='Enter the number…']"); + await insertText("input[placeholder='Enter the number…']", "9223372036854775807"); + await triggerHotkey("Enter"); + assert.strictEqual( + pyEnv["voip.call"].searchCount([["phone_number", "=", "9223372036854775807"]]), + 1 + ); +}); + +QUnit.test( + "Pressing Enter in the input doesn't make a call if the trimmed input is empty string.", + async (assert) => { + const pyEnv = await startServer(); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "\t \n\r\v"); + await triggerHotkey("Enter"); + assert.strictEqual(pyEnv["voip.call"].searchCount([]), 0); + } +); diff --git a/voip/static/tests/softphone/softphone_tests.js b/voip/static/tests/softphone/softphone_tests.js new file mode 100644 index 0000000..0e52187 --- /dev/null +++ b/voip/static/tests/softphone/softphone_tests.js @@ -0,0 +1,151 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { translatedTerms } from "@web/core/l10n/translation"; +import { patchWithCleanup, triggerHotkey } from "@web/../tests/helpers/utils"; +import { click, contains, insertText } from "@web/../tests/utils"; + +/** + * @param {number} numberOfMissedCalls + * @returns {function} + */ +const mockMissedCalls = (numberOfMissedCalls) => + async function (route, _args, originalRpc) { + if (route === "/mail/init_messaging") { + const res = await originalRpc(...arguments); + res.voipConfig.missedCalls = numberOfMissedCalls; + return res; + } + }; + +QUnit.module("softphone"); + +QUnit.test("Clicking on top bar when softphone is unfolded folds the softphone.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-Softphone-content"); + await click(".o-voip-Softphone-topbar"); + await contains(".o-voip-Softphone-content", { count: 0 }); +}); + +QUnit.test("Clicking on top bar when softphone is folded unfolds the softphone.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o-voip-Softphone-topbar"); // fold + await click(".o-voip-Softphone-topbar"); + await contains(".o-voip-Softphone-content"); +}); + +QUnit.test("Clicking on close button closes the softphone.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-Softphone"); + await click(".o-voip-Softphone button[title='Close']"); + await contains(".o-voip-Softphone", { count: 0 }); +}); + +QUnit.test("Search bar is focused after opening the softphone.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains("input[placeholder='Search']:focus"); +}); + +QUnit.test("Search bar is focused after unfolding the softphone.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o-voip-Softphone-topbar"); // fold + await click(".o-voip-Softphone-topbar"); // unfold + await contains("input[placeholder='Search']:focus"); +}); + +QUnit.test("“Next activities” is the active tab by default.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".nav-link.active", { text: "Next Activities" }); +}); + +QUnit.test("Clicking on a tab makes it the active tab.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".nav-link", { text: "Contacts" }); + await contains(".nav-link.active", { text: "Contacts" }); + await contains(".nav-link.active"); +}); + +QUnit.test("Click on the “Numpad button” to open and close the numpad.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await contains(".o-voip-Numpad"); + await click("button[title='Close Numpad']"); + await contains(".o-voip-Numpad", { count: 0 }); +}); + +QUnit.test( + "The softphone top bar text is “VoIP” as long as there is no missed calls.", + async () => { + start({ mockRPC: mockMissedCalls(0) }); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-Softphone-topbar", { text: "VoIP" }); + } +); + +QUnit.test( + "The softphone automatically opens folded when there is at least 1 missed call.", + async () => { + start({ mockRPC: mockMissedCalls(1) }); + await contains(".o-voip-Softphone"); // it's displayed… + await contains(".o-voip-Softphone-content", { count: 0 }); // but it's folded + } +); + +QUnit.test( + "The softphone top bar text is “1 missed call” when there is 1 missed call.", + async () => { + start({ mockRPC: mockMissedCalls(1) }); + await contains(".o-voip-Softphone-topbar", { text: "1 missed call" }); + } +); + +QUnit.test( + "The softphone top bar text allows a specific translation for the dual grammatical number.", + async () => { + patchWithCleanup(translatedTerms, { "2 missed calls": "2 مكالمة فائتة" }); + start({ mockRPC: mockMissedCalls(2) }); + await contains(".o-voip-Softphone-topbar", { text: "2 مكالمة فائتة" }); + } +); + +QUnit.test( + "The softphone top bar text is “513 missed calls” when there is 513 missed calls", + async () => { + start({ mockRPC: mockMissedCalls(513) }); + await contains(".o-voip-Softphone-topbar", { text: "513 missed calls" }); + } +); + +QUnit.test("The cursor when hovering over the top bar has “pointer” style", async (assert) => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-Softphone-topbar"); + assert.strictEqual(getComputedStyle($(".o-voip-Softphone-topbar")[0]).cursor, "pointer"); +}); + +QUnit.test( + "When a call is created, a partner with a corresponding phone number is displayed", + async () => { + const pyEnv = await startServer(); + const phoneNumber = "0456 703 6196"; + pyEnv["res.partner"].create({ name: "Maxime Randonnées", mobile: phoneNumber }); + const { advanceTime } = await start({ hasTimeControl: true }); + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", phoneNumber); + await triggerHotkey("Enter"); + await advanceTime(5000); + await contains(".o-voip-CorrespondenceDetails", { text: "Maxime Randonnées" }); + } +); diff --git a/voip/static/tests/softphone/softphone_tests.mobile.js b/voip/static/tests/softphone/softphone_tests.mobile.js new file mode 100644 index 0000000..3a3dd89 --- /dev/null +++ b/voip/static/tests/softphone/softphone_tests.mobile.js @@ -0,0 +1,32 @@ +/* @odoo-module */ + +import { patchUiSize } from "@mail/../tests/helpers/patch_ui_size"; +import { start } from "@mail/../tests/helpers/test_utils"; + +import { nextTick } from "@web/../tests/helpers/utils"; +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("softphone_mobile"); + +QUnit.test( + "Clicking on the top bar does not fold the softphone window on small devices.", + async () => { + patchUiSize({ width: 360, height: 800 }); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o-voip-Softphone-topbar"); + await nextTick(); + await contains(".o-voip-Softphone-content"); + } +); + +QUnit.test( + "The cursor when hovering over the top bar is not a pointer on small devices.", + async (assert) => { + patchUiSize({ width: 360, height: 800 }); + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-Softphone"); + assert.strictEqual(getComputedStyle($(".o-voip-Softphone-topbar")[0]).cursor, "auto"); + } +); diff --git a/voip/static/tests/softphone/transfer_popover_tests.js b/voip/static/tests/softphone/transfer_popover_tests.js new file mode 100644 index 0000000..46d34e9 --- /dev/null +++ b/voip/static/tests/softphone/transfer_popover_tests.js @@ -0,0 +1,29 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { triggerHotkey } from "@web/../tests/helpers/utils"; +import { click, contains, insertText } from "@web/../tests/utils"; + +QUnit.module("transfer_popover"); + +QUnit.test("TransferPopover input is pre-filled with external device number.", async () => { + const externalDeviceNumber = "1337"; + const pyEnv = await startServer(); + pyEnv["res.users.settings"].create({ + external_device_number: externalDeviceNumber, + user_id: pyEnv.currentUserId, + }); + const { advanceTime, env } = await start({ hasTimeControl: true }); + // wait for external_device_number to be fetched + await env.services["voip"].isReady; + await click(".o_menu_systray button[title='Open Softphone']"); + await click("button[title='Open Numpad']"); + await insertText("input[placeholder='Enter the number…']", "+380 (44) 4315351"); + await triggerHotkey("Enter"); + await advanceTime(5000); + await click("button[title='Transfer']:enabled"); + await contains(".o-voip-TransferPopover input", { value: externalDeviceNumber }); +}); diff --git a/voip/static/tests/web/phone_field_tests.js b/voip/static/tests/web/phone_field_tests.js new file mode 100644 index 0000000..d409965 --- /dev/null +++ b/voip/static/tests/web/phone_field_tests.js @@ -0,0 +1,55 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; +import { addFakeModel } from "@bus/../tests/helpers/model_definitions_helpers"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains } from "@web/../tests/utils"; +import { nextTick } from "@web/../tests/helpers/utils"; + +const views = { + "fake,false,form": ` +
+ + + + + +
`, +}; + +addFakeModel("fake", { phone: { string: "Phone Number", type: "char" } }); + +QUnit.module("phone field"); + +QUnit.test("Click on PhoneField link triggers a call.", async (assert) => { + const pyEnv = await startServer(); + const fakeId = pyEnv["fake"].create({ phone: "+36 55 369 678" }); + const { openFormView } = await start({ serverData: { views } }); + openFormView("fake", fakeId, { + waitUntilDataLoaded: false, + waitUntilMessagesLoaded: false, + }); + await click(".o_field_phone a[href='tel:+3655369678']"); + assert.strictEqual( + pyEnv["voip.call"].searchCount([["phone_number", "=", "+36 55 369 678"]]), + 1 + ); +}); + +QUnit.test( + "Click on PhoneField link in readonly form view does not switch the form view to edit mode.", + async () => { + const pyEnv = await startServer(); + const fakeId = pyEnv["fake"].create({ phone: "+689 312172" }); + const { openFormView } = await start({ serverData: { views } }); + openFormView("fake", fakeId, { + waitUntilDataLoaded: false, + waitUntilMessagesLoaded: false, + }); + await click(".o_field_phone a[href='tel:+689312172']"); + await nextTick(); + await contains(".o_form_readonly"); + } +); diff --git a/voip/static/tests/web/voip_systray_item_tests.js b/voip/static/tests/web/voip_systray_item_tests.js new file mode 100644 index 0000000..9314ac1 --- /dev/null +++ b/voip/static/tests/web/voip_systray_item_tests.js @@ -0,0 +1,34 @@ +/* @odoo-module */ + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("voip_systray_item"); + +QUnit.test("Clicking on systray item when softphone is hidden shows the softphone.", async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await contains(".o-voip-Softphone"); +}); + +QUnit.test( + "Clicking on systray item when softphone is displayed and unfolded hides the softphone.", + async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o_menu_systray button[title='Close Softphone']"); + await contains(".o-voip-Softphone"); + } +); + +QUnit.test( + "Clicking on systray item when softphone is displayed but folded unfolds the softphone.", + async () => { + start(); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o-voip-Softphone-topbar"); // fold + await click(".o_menu_systray button[title='Unfold Softphone']"); + await contains(".o-voip-Softphone-content"); + } +); diff --git a/voip/tests/__init__.py b/voip/tests/__init__.py new file mode 100644 index 0000000..6d10254 --- /dev/null +++ b/voip/tests/__init__.py @@ -0,0 +1,4 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_voip_access_rights +from . import test_voip_user_config diff --git a/voip/tests/test_voip_access_rights.py b/voip/tests/test_voip_access_rights.py new file mode 100644 index 0000000..24a3e0c --- /dev/null +++ b/voip/tests/test_voip_access_rights.py @@ -0,0 +1,47 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.exceptions import AccessError +from odoo.tests import common, tagged + + +@tagged("voip") +class TestVoipCall(common.TransactionCase): + def test_voip_call_access_rights_crud_on_others_records(self): + """ + Asserts that users cannot perform CRUD operations on other users' call records. + """ + shrek_data = {"login": "what_are_you_doing_in_my_swamp", "name": "💠 Shrek 💠"} + shrek = self.env["res.users"].create(shrek_data) + bowser_data = {"login": "so_long", "name": "Bowser 😤😤😤"} + bowser = self.env["res.users"].create(bowser_data) + call_made_by_shrek = self.env["voip.call"].create({"user_id": shrek.id, "phone_number": "+246 532 4846"}) + self.env.invalidate_all() + + with self.assertRaises(AccessError): + self.env["voip.call"].with_user(bowser).create({"user_id": shrek.id, "phone_number": "+244 0915 050 7017"}) + with self.assertRaises(AccessError): + call_made_by_shrek.with_user(bowser).read() + with self.assertRaises(AccessError): + call_made_by_shrek.with_user(bowser).write({}) + with self.assertRaises(AccessError): + call_made_by_shrek.with_user(bowser).unlink() + + def test_voip_call_access_rights_crud_on_their_own_records(self): + """ + Asserts that access rights are working correctly for CRUD operations on users' own records. + """ + wario = self.env["res.users"].create( + { + "login": "waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "$$𝕎𝔸ℝ𝕀𝕆$$", + } + ) + self.env.invalidate_all() + + call_made_by_wario = self.env["voip.call"].with_user(wario).create({"user_id": wario.id, "phone_number": "2"}) + self.assertTrue(call_made_by_wario) + call_made_by_wario.read() + call_made_by_wario.write({"activity_name": "Team building (Extreme Ironing)"}) + self.assertEqual(call_made_by_wario.activity_name, "Team building (Extreme Ironing)") + with self.assertRaises(AccessError): + call_made_by_wario.unlink() diff --git a/voip/tests/test_voip_user_config.py b/voip/tests/test_voip_user_config.py new file mode 100644 index 0000000..2c214a4 --- /dev/null +++ b/voip/tests/test_voip_user_config.py @@ -0,0 +1,40 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import common, Form, tagged + + +@tagged("voip", "post_install", "-at_install") +class TestVoipUserConfig(common.TransactionCase): + def test_voip_user_config_access_rights(self): + """ + Tests that users cannot read VoIP configuration of other users. + """ + user_data_1 = {"login": "i_love_voip", "name": "Handsome VoIP User 😎"} + voip_user = self.env["res.users"].create(user_data_1).sudo(False) + settings = voip_user.env["res.users.settings"]._find_or_create_for_user(voip_user) + settings.write({"voip_secret": "Top Secret 🤫"}) + user_data_2 = {"login": "i_hate_voip", "name": "Evil Password Stealer 👺"} + evil_password_stealer = self.env["res.users"].create(user_data_2).sudo(False) + self.env.invalidate_all() + + self.assertFalse(voip_user.with_user(evil_password_stealer).voip_secret) + + def test_update_voip_user_config_from_user_form(self): + """ + Asserts that changes made to the VoIP Config in the res.users forms are reflected in res.users.settings. + """ + form = Form(self.env["res.users"], view="base.view_users_form") + form.name = "钟离" + form.login = "摩拉克斯" + form.external_device_number = "110" + user = form.save() + settings = user.res_users_settings_id + self.assertEqual(settings.how_to_call_on_mobile, "ask") + self.assertEqual(settings.external_device_number, "110") + + form = Form(user, view="base.view_users_form") + form.how_to_call_on_mobile = "voip" + form.external_device_number = "911" + form.save() + self.assertEqual(settings.how_to_call_on_mobile, "voip") + self.assertEqual(settings.external_device_number, "911") diff --git a/voip/views/res_config_settings_views.xml b/voip/views/res_config_settings_views.xml new file mode 100644 index 0000000..06d378c --- /dev/null +++ b/voip/views/res_config_settings_views.xml @@ -0,0 +1,27 @@ + + + + + res.config.settings.view.form.inherit.voip + res.config.settings + + + + + +
+
+
+
+
+
+
+
+ +
diff --git a/voip/views/res_partner_views.xml b/voip/views/res_partner_views.xml new file mode 100644 index 0000000..f625833 --- /dev/null +++ b/voip/views/res_partner_views.xml @@ -0,0 +1,16 @@ + + + + + res.partner.form + res.partner + + + + + + + + + + diff --git a/voip/views/res_users_settings_views.xml b/voip/views/res_users_settings_views.xml new file mode 100644 index 0000000..77ca09b --- /dev/null +++ b/voip/views/res_users_settings_views.xml @@ -0,0 +1,20 @@ + + + + VoIP User Settings + res.users.settings + + + + + + + + + + + + + + + diff --git a/voip/views/res_users_views.xml b/voip/views/res_users_views.xml new file mode 100644 index 0000000..ca75265 --- /dev/null +++ b/voip/views/res_users_views.xml @@ -0,0 +1,43 @@ + + + + VoIP Config in User Form + res.users + + + + + + + + + + + + + + + + + VoIP Config in Preferences Form + res.users + + + + + + + + + + + + + + + + + + + diff --git a/voip/views/voip_call_views.xml b/voip/views/voip_call_views.xml new file mode 100644 index 0000000..c729acd --- /dev/null +++ b/voip/views/voip_call_views.xml @@ -0,0 +1,32 @@ + + + + VoIP Calls Tree View + voip.call + + + + + + + + + + + + + + + + Calls + voip.call + tree + + [] + + + + diff --git a/voip_crm/__init__.py b/voip_crm/__init__.py new file mode 100644 index 0000000..d6210b1 --- /dev/null +++ b/voip_crm/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/voip_crm/__manifest__.py b/voip_crm/__manifest__.py new file mode 100644 index 0000000..2990b1e --- /dev/null +++ b/voip_crm/__manifest__.py @@ -0,0 +1,20 @@ +{ + "name": "VoIP for CRM", + "summary": "VoIP integration with CRM module.", + "description": """Adds a button to schedule calls from leads in Kanban.""", + "category": "Sales/CRM", + "version": "1.0", + "depends": ["base", "crm", "voip"], + "auto_install": True, + "data": ["views/crm_lead_views.xml"], + "license": "OEEL-1", + "assets": { + "web.tests_assets": [ + "voip_crm/static/tests/helpers/**/*.js", + ], + "web.qunit_suite_tests": [ + "voip_crm/static/tests/**/*.js", + ("remove", "voip_crm/static/tests/helpers/**/*"), + ], + }, +} diff --git a/voip_crm/i18n/ar.po b/voip_crm/i18n/ar.po new file mode 100644 index 0000000..b46d3bc --- /dev/null +++ b/voip_crm/i18n/ar.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Malaz Abuidris , 2022 +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "إضافة إلى قائمة انتظار الاتصالات " + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "في قائمة انتظار المكالمات " + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "عميل مهتم/فرصة " diff --git a/voip_crm/i18n/cs.po b/voip_crm/i18n/cs.po new file mode 100644 index 0000000..22b2920 --- /dev/null +++ b/voip_crm/i18n/cs.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Jiří Podhorecký, 2022 +# David Kliment , 2022 +# Rastislav Brencic , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Rastislav Brencic , 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Přidat do fronty hovorů" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Ve volací frontě" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Potenciální zákazník / příležitost" diff --git a/voip_crm/i18n/da.po b/voip_crm/i18n/da.po new file mode 100644 index 0000000..4d08aa8 --- /dev/null +++ b/voip_crm/i18n/da.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Preben Lisby , 2022 +# Ejner Sønniksen , 2022 +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Tilføj til opkaldskø" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Er i opkaldskøen" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Kundeemne/Salgsmulighed" diff --git a/voip_crm/i18n/de.po b/voip_crm/i18n/de.po new file mode 100644 index 0000000..8499c87 --- /dev/null +++ b/voip_crm/i18n/de.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "An Anruf-Warteschlage anhängen" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Ist in der Warteschlange" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Interessent / Chance" diff --git a/voip_crm/i18n/es.po b/voip_crm/i18n/es.po new file mode 100644 index 0000000..9d571f7 --- /dev/null +++ b/voip_crm/i18n/es.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Agregar a la cola de llamadas" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Está en la cola de llamadas" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciativa/Oportunidad" diff --git a/voip_crm/i18n/fr.po b/voip_crm/i18n/fr.po new file mode 100644 index 0000000..7f3cece --- /dev/null +++ b/voip_crm/i18n/fr.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# Jolien De Paepe, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Ajouter à la file d'attente des appels" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Est dans la file d'attente des appels" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Piste/opportunité" diff --git a/voip_crm/i18n/he.po b/voip_crm/i18n/he.po new file mode 100644 index 0000000..ae670d9 --- /dev/null +++ b/voip_crm/i18n/he.po @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "ליד/הזדמנות" diff --git a/voip_crm/i18n/hr.po b/voip_crm/i18n/hr.po new file mode 100644 index 0000000..39a2627 --- /dev/null +++ b/voip_crm/i18n/hr.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Tina Milas, 2022 +# Stjepan Lovasić , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Stjepan Lovasić , 2022\n" +"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Je u redu čekanja poziva" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Potencijal/prilika" diff --git a/voip_crm/i18n/hu.po b/voip_crm/i18n/hu.po new file mode 100644 index 0000000..59a958f --- /dev/null +++ b/voip_crm/i18n/hu.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Tamás Németh , 2022 +# krnkris, 2022 +# Ákos Nagy , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Ákos Nagy , 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Adja hozzá a hívási sorhoz" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Benne van a Hívási sorban" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Érdeklődés/Lehetőség" diff --git a/voip_crm/i18n/it.po b/voip_crm/i18n/it.po new file mode 100644 index 0000000..8d6c8e3 --- /dev/null +++ b/voip_crm/i18n/it.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Aggiungi alla lista di chiamate da fare" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "È nella coda delle chiamate da fare" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Contatto/Opportunità" diff --git a/voip_crm/i18n/lb.po b/voip_crm/i18n/lb.po new file mode 100644 index 0000000..ccbc791 --- /dev/null +++ b/voip_crm/i18n/lb.po @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.4+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-12 11:30+0000\n" +"PO-Revision-Date: 2019-08-26 09:38+0000\n" +"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" diff --git a/voip_crm/i18n/lt.po b/voip_crm/i18n/lt.po new file mode 100644 index 0000000..fb6a961 --- /dev/null +++ b/voip_crm/i18n/lt.po @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Andrius Laukavičius , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Andrius Laukavičius , 2022\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: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Iniciatyva/Galimybė" diff --git a/voip_crm/i18n/mn.po b/voip_crm/i18n/mn.po new file mode 100644 index 0000000..3afb03b --- /dev/null +++ b/voip_crm/i18n/mn.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Uuganbayar Batbaatar , 2022 +# hish, 2022 +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Дуудлагын цуваа үүсгэх" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Дуудлага хүлээлгэнд байна" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Сэжим/Боломж" diff --git a/voip_crm/i18n/nb.po b/voip_crm/i18n/nb.po new file mode 100644 index 0000000..4a5943e --- /dev/null +++ b/voip_crm/i18n/nb.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Marius Stedjan , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Marius Stedjan , 2022\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Legg til i samtalekø" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Lead/mulighet" diff --git a/voip_crm/i18n/nl.po b/voip_crm/i18n/nl.po new file mode 100644 index 0000000..003d4a2 --- /dev/null +++ b/voip_crm/i18n/nl.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# Erwin van der Ploeg , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Erwin van der Ploeg , 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Toevoegen aan belwachtrij" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Staat in de wachtrij" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Lead/Verkoopkans" diff --git a/voip_crm/i18n/pl.po b/voip_crm/i18n/pl.po new file mode 100644 index 0000000..fe4d7bc --- /dev/null +++ b/voip_crm/i18n/pl.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Piotr Cierkosz , 2022 +# Grzegorz Grzelak , 2022 +# Maksym , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Maksym , 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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Dodaj do kolejki połączeń" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Jest w kolejce połączeń" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Sygnał/Szansa" diff --git a/voip_crm/i18n/pt.po b/voip_crm/i18n/pt.po new file mode 100644 index 0000000..78ca322 --- /dev/null +++ b/voip_crm/i18n/pt.po @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Prospecto / Oportunidade" diff --git a/voip_crm/i18n/pt_BR.po b/voip_crm/i18n/pt_BR.po new file mode 100644 index 0000000..d91ef2c --- /dev/null +++ b/voip_crm/i18n/pt_BR.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Adicionar à fila de chamada" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Está na Lista de Ligações" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Lead/Oportunidade" diff --git a/voip_crm/i18n/ro.po b/voip_crm/i18n/ro.po new file mode 100644 index 0000000..e204cb5 --- /dev/null +++ b/voip_crm/i18n/ro.po @@ -0,0 +1,36 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Foldi Robert , 2022 +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Adăugare la coada de apeluri" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Se află în coada de apeluri" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Pista/Oportunitate" diff --git a/voip_crm/i18n/ru.po b/voip_crm/i18n/ru.po new file mode 100644 index 0000000..0ed8ec7 --- /dev/null +++ b/voip_crm/i18n/ru.po @@ -0,0 +1,28 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2024-01-30 15:14+0400\n" +"Last-Translator: \n" +"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \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: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Находится в очереди вызовов" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Потенциальные сделки" diff --git a/voip_crm/i18n/tr.po b/voip_crm/i18n/tr.po new file mode 100644 index 0000000..2a0a82e --- /dev/null +++ b/voip_crm/i18n/tr.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Yedigen, 2022 +# Fırat Kaya , 2022 +# Murat Kaplan , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Murat Kaplan , 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Arama sırasına ekle" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Arama Sırasında mı" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Aday/Fırsat" diff --git a/voip_crm/i18n/uk.po b/voip_crm/i18n/uk.po new file mode 100644 index 0000000..6cb9c11 --- /dev/null +++ b/voip_crm/i18n/uk.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Додати до черги дзінків" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "У черзі дзвінка" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Лід/Нагода" diff --git a/voip_crm/i18n/vi.po b/voip_crm/i18n/vi.po new file mode 100644 index 0000000..24baaff --- /dev/null +++ b/voip_crm/i18n/vi.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Thi Huong Nguyen, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Thi Huong Nguyen, 2023\n" +"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "Thêm vào danh sách cuộc gọi chờ" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "Có trong danh sách cuộc gọi chờ" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "Lead/Cơ hội" diff --git a/voip_crm/i18n/voip_crm.pot b/voip_crm/i18n/voip_crm.pot new file mode 100644 index 0000000..5363c53 --- /dev/null +++ b/voip_crm/i18n/voip_crm.pot @@ -0,0 +1,26 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 22:21+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: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" diff --git a/voip_crm/i18n/zh_CN.po b/voip_crm/i18n/zh_CN.po new file mode 100644 index 0000000..4e6312a --- /dev/null +++ b/voip_crm/i18n/zh_CN.po @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.actions.server,name:voip_crm.action_add_to_call_queue +msgid "Add to call queue" +msgstr "添加到呼叫队列" + +#. module: voip_crm +#: model:ir.model.fields,field_description:voip_crm.field_crm_lead__has_call_in_queue +msgid "Is in the Call Queue" +msgstr "在呼叫队列" + +#. module: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "线索/商机" diff --git a/voip_crm/i18n/zh_TW.po b/voip_crm/i18n/zh_TW.po new file mode 100644 index 0000000..899181c --- /dev/null +++ b/voip_crm/i18n/zh_TW.po @@ -0,0 +1,25 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_crm +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-15 13:30+0000\n" +"PO-Revision-Date: 2022-12-16 09:35+0000\n" +"Last-Translator: Martin Trigaux, 2022\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: voip_crm +#: model:ir.model,name:voip_crm.model_crm_lead +msgid "Lead/Opportunity" +msgstr "潛在商機/商機" diff --git a/voip_crm/models/__init__.py b/voip_crm/models/__init__.py new file mode 100644 index 0000000..26f8c1d --- /dev/null +++ b/voip_crm/models/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import crm_lead diff --git a/voip_crm/models/crm_lead.py b/voip_crm/models/crm_lead.py new file mode 100644 index 0000000..2f195ad --- /dev/null +++ b/voip_crm/models/crm_lead.py @@ -0,0 +1,8 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class CrmLead(models.Model): + _name = "crm.lead" + _inherit = ["crm.lead", "voip.queue.mixin"] diff --git a/voip_crm/static/tests/correspondence_details_tests.js b/voip_crm/static/tests/correspondence_details_tests.js new file mode 100644 index 0000000..40b42f5 --- /dev/null +++ b/voip_crm/static/tests/correspondence_details_tests.js @@ -0,0 +1,37 @@ +/* @odoo-module */ + +import { startServer } from "@bus/../tests/helpers/mock_python_environment"; + +import { start } from "@mail/../tests/helpers/test_utils"; + +import { click, contains } from "@web/../tests/utils"; + +QUnit.module("correspondence_details"); + +QUnit.test("Clicking on the “open record” button opens the corresponding record.", async () => { + const pyEnv = await startServer(); + const [activityTypeId] = pyEnv["mail.activity.type"].search([["category", "=", "phonecall"]]); + const leadId = pyEnv["crm.lead"].create({ + phone: "+1 246 203 6982", + name: "Vincent's Birthday", + }); + pyEnv["mail.activity"].create({ + activity_type_id: activityTypeId, + date_deadline: "1998-08-13", + res_id: leadId, + res_model: "crm.lead", + user_id: pyEnv.currentUserId, + }); + await start({ + serverData: { + views: { + "crm.lead,false,form": "
", + }, + }, + }); + await click(".o_menu_systray button[title='Open Softphone']"); + await click(".o-voip-ActivitiesTab .list-group-item-action", { text: "Vincent's Birthday" }); + await contains(".o_form_view", { count: 0 }); + await click(".o-voip-CorrespondenceDetails button .fa-wpforms"); + await contains(".o_form_view"); +}); diff --git a/voip_crm/static/tests/helpers/mock_server/crm_lead.js b/voip_crm/static/tests/helpers/mock_server/crm_lead.js new file mode 100644 index 0000000..3f3a4f1 --- /dev/null +++ b/voip_crm/static/tests/helpers/mock_server/crm_lead.js @@ -0,0 +1,24 @@ +/* @odoo-module */ + +import { patch } from "@web/core/utils/patch"; +import { MockServer } from "@web/../tests/helpers/mock_server"; + +patch(MockServer.prototype, { + /** + * @override + */ + async _performRPC(_route, { model, method, args, kwargs }) { + if (model !== "crm.lead") { + return super._performRPC(...arguments); + } + switch (method) { + case "get_formview_id": + return this._mockCrmLeadGetFormviewId(...args, kwargs); + default: + return super._performRPC(...arguments); + } + }, + _mockCrmLeadGetFormviewId() { + return false; + }, +}); diff --git a/voip_crm/views/crm_lead_views.xml b/voip_crm/views/crm_lead_views.xml new file mode 100644 index 0000000..01fb7ae --- /dev/null +++ b/voip_crm/views/crm_lead_views.xml @@ -0,0 +1,17 @@ + + + + + crm.lead.view.kanban.inherit.voip + crm.lead + + + + + + + + + + diff --git a/voip_onsip/__init__.py b/voip_onsip/__init__.py new file mode 100644 index 0000000..d6210b1 --- /dev/null +++ b/voip_onsip/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/voip_onsip/__manifest__.py b/voip_onsip/__manifest__.py new file mode 100644 index 0000000..e61ab7e --- /dev/null +++ b/voip_onsip/__manifest__.py @@ -0,0 +1,19 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + "name": "VoIP OnSIP", + "description": """Enables VoIP compatibility with OnSIP.""", + "category": "Hidden", + "version": "1.0", + "depends": ["voip"], + "data": [ + "views/res_config_settings_views.xml", + "views/res_users_views.xml", + ], + "license": "OEEL-1", + "assets": { + "web.assets_backend": [ + "voip_onsip/static/src/**/*", + ], + }, +} diff --git a/voip_onsip/i18n/af.po b/voip_onsip/i18n/af.po new file mode 100644 index 0000000..363cb69 --- /dev/null +++ b/voip_onsip/i18n/af.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Afrikaans (https://app.transifex.com/odoo/teams/41243/af/)\n" +"Language: af\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Gebruiker" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/am.po b/voip_onsip/i18n/am.po new file mode 100644 index 0000000..182bc95 --- /dev/null +++ b/voip_onsip/i18n/am.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n" +"Language: am\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/ar.po b/voip_onsip/i18n/ar.po new file mode 100644 index 0000000..4be7a06 --- /dev/null +++ b/voip_onsip/i18n/ar.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "تهيئة الإعدادات " + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "اسم المستخدم لمصادقة OnSIP " + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "نطاق OnSIP " + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "رابط WebSocket الخاص بك " + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "المستخدم" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "إعدادات المستخدم " + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/az.po b/voip_onsip/i18n/az.po new file mode 100644 index 0000000..11b7679 --- /dev/null +++ b/voip_onsip/i18n/az.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Jumshud Sultanov , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Jumshud Sultanov , 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Parametrləri Konfiqurasiya edin" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "İstifadəçi" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/bg.po b/voip_onsip/i18n/bg.po new file mode 100644 index 0000000..912d36a --- /dev/null +++ b/voip_onsip/i18n/bg.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# KeyVillage, 2023 +# aleksandar ivanov, 2023 +# Maria Boyadjieva , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Maria Boyadjieva , 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Настройки" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL адреса на уеб гнездото Ви" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Потребител" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "Уеб гнездо" diff --git a/voip_onsip/i18n/bs.po b/voip_onsip/i18n/bs.po new file mode 100644 index 0000000..76a05a1 --- /dev/null +++ b/voip_onsip/i18n/bs.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Martin Trigaux, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2018-09-21 14:06+0000\n" +"Last-Translator: Martin Trigaux, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/ca.po b/voip_onsip/i18n/ca.po new file mode 100644 index 0000000..e0f6266 --- /dev/null +++ b/voip_onsip/i18n/ca.po @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Ivan Espinola, 2023 +# Óscar Fonseca , 2023 +# Martin Trigaux, 2023 +# Jonatan Gk, 2023 +# marcescu, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: marcescu, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Paràmetres de configuració" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nom d'usuari d'autenticació OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Domini OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "L'URL del WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Usuari" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Arranjament d' usuari" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/cs.po b/voip_onsip/i18n/cs.po new file mode 100644 index 0000000..3aa8743 --- /dev/null +++ b/voip_onsip/i18n/cs.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Jakub Smolka, 2023 +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurační nastavení" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP doména" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Adresa URL vašeho webu WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Uživatel" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Uživatelské nastavení" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/da.po b/voip_onsip/i18n/da.po new file mode 100644 index 0000000..0b30617 --- /dev/null +++ b/voip_onsip/i18n/da.po @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Mads Søndergaard, 2023 +# Martin Trigaux, 2023 +# Ejner Sønniksen , 2023 +# Sanne Kristensen , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Sanne Kristensen , 2024\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurer opsætning" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP Domæne" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "The URL of your WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Bruger" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Bruger indstillinger" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/de.po b/voip_onsip/i18n/de.po new file mode 100644 index 0000000..e12cec2 --- /dev/null +++ b/voip_onsip/i18n/de.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurationseinstellungen " + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP-Auth-Benutzername" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP-Domain" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Die URL Ihres WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Benutzer" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Benutzereinstellungen" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/el.po b/voip_onsip/i18n/el.po new file mode 100644 index 0000000..2ee631e --- /dev/null +++ b/voip_onsip/i18n/el.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Martin Trigaux, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2018-09-21 14:06+0000\n" +"Last-Translator: Martin Trigaux, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/es.po b/voip_onsip/i18n/es.po new file mode 100644 index 0000000..241de7d --- /dev/null +++ b/voip_onsip/i18n/es.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# Larissa Manderfeld, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Larissa Manderfeld, 2023\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nombre de usuario de autorización OnSIP " + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Dominio de OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "La URL de su WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Usuario" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Ajustes de usuario" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/es_419.po b/voip_onsip/i18n/es_419.po new file mode 100644 index 0000000..a58c6bd --- /dev/null +++ b/voip_onsip/i18n/es_419.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nombre de usuario de autorización OnSIP " + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Dominio OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "La dirección URL de su WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Usuario" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Ajustes de usuario" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/es_CL.po b/voip_onsip/i18n/es_CL.po new file mode 100644 index 0000000..16e5d1f --- /dev/null +++ b/voip_onsip/i18n/es_CL.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Spanish (Chile) (https://www.transifex.com/odoo/teams/41243/es_CL/)\n" +"Language: es_CL\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/et.po b/voip_onsip/i18n/et.po new file mode 100644 index 0000000..ecbed11 --- /dev/null +++ b/voip_onsip/i18n/et.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Triine Aavik , 2023 +# Arma Gedonsky , 2023 +# Leaanika Randmets, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Leaanika Randmets, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Seadistused" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP Auth kasutajanimi" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP domeen" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Teie WebSocket'i URL" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Kasutaja" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Kasutaja seaded" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/eu.po b/voip_onsip/i18n/eu.po new file mode 100644 index 0000000..d27b0f8 --- /dev/null +++ b/voip_onsip/i18n/eu.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Basque (https://www.transifex.com/odoo/teams/41243/eu/)\n" +"Language: eu\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/fa.po b/voip_onsip/i18n/fa.po new file mode 100644 index 0000000..d7a3a14 --- /dev/null +++ b/voip_onsip/i18n/fa.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Hamed Mohammadi , 2023 +# Martin Trigaux, 2023 +# Hanna Kheradroosta, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Hanna Kheradroosta, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "تنظیمات پیکربندی" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "کاربر" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "تنظیمات کاربر" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/fi.po b/voip_onsip/i18n/fi.po new file mode 100644 index 0000000..6df9b6a --- /dev/null +++ b/voip_onsip/i18n/fi.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Jarmo Kortetjärvi , 2023 +# Ossi Mantylahti , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Asetukset" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP Auth Käyttäjätunnus" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP-toimialue" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "WebSocketin URL-osoite" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Käyttäjä" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Käyttäjäasetukset" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/fo.po b/voip_onsip/i18n/fo.po new file mode 100644 index 0000000..a21827b --- /dev/null +++ b/voip_onsip/i18n/fo.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Faroese (https://www.transifex.com/odoo/teams/41243/fo/)\n" +"Language: fo\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/fr.po b/voip_onsip/i18n/fr.po new file mode 100644 index 0000000..9c20ac1 --- /dev/null +++ b/voip_onsip/i18n/fr.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nom d'utilisateur Auth OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Domaine OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "L'URL de votre WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Utilisateur" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Paramètres utilisateur" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/gl.po b/voip_onsip/i18n/gl.po new file mode 100644 index 0000000..3fb4394 --- /dev/null +++ b/voip_onsip/i18n/gl.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Galician (https://www.transifex.com/odoo/teams/41243/gl/)\n" +"Language: gl\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/gu.po b/voip_onsip/i18n/gu.po new file mode 100644 index 0000000..3b3ef85 --- /dev/null +++ b/voip_onsip/i18n/gu.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Qaidjohar Barbhaya, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Config Settings" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "User" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/he.po b/voip_onsip/i18n/he.po new file mode 100644 index 0000000..72bc740 --- /dev/null +++ b/voip_onsip/i18n/he.po @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# ZVI BLONDER , 2023 +# Yihya Hugirat , 2023 +# NoaFarkash, 2023 +# yael terner, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: yael terner, 2024\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "הגדר הגדרות" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "שם משתמש OnSIP Auth" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "משתמש" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "הגדרות משתמש" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/hr.po b/voip_onsip/i18n/hr.po new file mode 100644 index 0000000..4884ac9 --- /dev/null +++ b/voip_onsip/i18n/hr.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Bole , 2022 +# Martin Trigaux, 2022 +# Tina Milas, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Tina Milas, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Postavke" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL Vašeg WebSocketa" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Korisnik" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/hu.po b/voip_onsip/i18n/hu.po new file mode 100644 index 0000000..48fdc60 --- /dev/null +++ b/voip_onsip/i18n/hu.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Zsolt Godó , 2023 +# krnkris, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Beállítások módosítása" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "A WebSoccet URL webcíme" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Felhasználó" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/hy.po b/voip_onsip/i18n/hy.po new file mode 100644 index 0000000..b5422dc --- /dev/null +++ b/voip_onsip/i18n/hy.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/id.po b/voip_onsip/i18n/id.po new file mode 100644 index 0000000..e1a01bc --- /dev/null +++ b/voip_onsip/i18n/id.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# Abe Manyo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Pengaturan Konfigurasi" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Username Auth OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Domain OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL dari WebSocket Anda" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Pengguna" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Pengaturan User" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/is.po b/voip_onsip/i18n/is.po new file mode 100644 index 0000000..3d3cca2 --- /dev/null +++ b/voip_onsip/i18n/is.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Kristófer Arnþórsson, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Kristófer Arnþórsson, 2024\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Stillingarvalkostir" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Notandi" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/it.po b/voip_onsip/i18n/it.po new file mode 100644 index 0000000..ae50a31 --- /dev/null +++ b/voip_onsip/i18n/it.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni di configurazione" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nome utente Auth OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Dominio OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "L'URL del tuo WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Utente" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Impostazioni utente" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/ja.po b/voip_onsip/i18n/ja.po new file mode 100644 index 0000000..8b67146 --- /dev/null +++ b/voip_onsip/i18n/ja.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "コンフィグ設定" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP認証ユーザ名" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIPドメイン" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "ウェブソケットのURL" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "ユーザ" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "ユーザ設定" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "ウェブソケット" diff --git a/voip_onsip/i18n/ka.po b/voip_onsip/i18n/ka.po new file mode 100644 index 0000000..9a8a868 --- /dev/null +++ b/voip_onsip/i18n/ka.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Saba Khmaladze , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Last-Translator: Saba Khmaladze , 2018\n" +"Language-Team: Georgian (https://www.transifex.com/odoo/teams/41243/ka/)\n" +"Language: ka\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/kab.po b/voip_onsip/i18n/kab.po new file mode 100644 index 0000000..4c68b2f --- /dev/null +++ b/voip_onsip/i18n/kab.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Kabyle (https://www.transifex.com/odoo/teams/41243/kab/)\n" +"Language: kab\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/km.po b/voip_onsip/i18n/km.po new file mode 100644 index 0000000..f26b37b --- /dev/null +++ b/voip_onsip/i18n/km.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Sengtha Chay , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2018-09-21 14:06+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/ko.po b/voip_onsip/i18n/ko.po new file mode 100644 index 0000000..ceb3074 --- /dev/null +++ b/voip_onsip/i18n/ko.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "환경 설정" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP 인증 사용자 이름" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP 도메인" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "웹소켓 URL" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "사용자" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "사용자 설정" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "웹소켓" diff --git a/voip_onsip/i18n/lb.po b/voip_onsip/i18n/lb.po new file mode 100644 index 0000000..e147fcc --- /dev/null +++ b/voip_onsip/i18n/lb.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2019-08-26 09:38+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/lo.po b/voip_onsip/i18n/lo.po new file mode 100644 index 0000000..c6ee305 --- /dev/null +++ b/voip_onsip/i18n/lo.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Lao (https://www.transifex.com/odoo/teams/41243/lo/)\n" +"Language: lo\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/lt.po b/voip_onsip/i18n/lt.po new file mode 100644 index 0000000..6d59199 --- /dev/null +++ b/voip_onsip/i18n/lt.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Linas Versada , 2023 +# Monika Raciunaite , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Monika Raciunaite , 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigūracijos nustatymai" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Vartotojas" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/lv.po b/voip_onsip/i18n/lv.po new file mode 100644 index 0000000..9726784 --- /dev/null +++ b/voip_onsip/i18n/lv.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Armīns Jeltajevs , 2023 +# ievaputnina , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurācijas uzstādījumi" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Lietotājs" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Lietotāja iestatījumi" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/mk.po b/voip_onsip/i18n/mk.po new file mode 100644 index 0000000..8537f48 --- /dev/null +++ b/voip_onsip/i18n/mk.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Macedonian (https://www.transifex.com/odoo/teams/41243/mk/)\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/mn.po b/voip_onsip/i18n/mn.po new file mode 100644 index 0000000..9b3ab49 --- /dev/null +++ b/voip_onsip/i18n/mn.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# tserendavaa tsogtoo , 2022 +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Martin Trigaux, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Тохиргооны тохируулга" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP домэйн" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "Таны WebSocket - н URL " + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Хэрэглэгч" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/nb.po b/voip_onsip/i18n/nb.po new file mode 100644 index 0000000..a998edc --- /dev/null +++ b/voip_onsip/i18n/nb.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Marius Stedjan , 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Martin Trigaux, 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Innstillinger" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP-domene" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Bruker" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/ne.po b/voip_onsip/i18n/ne.po new file mode 100644 index 0000000..930626d --- /dev/null +++ b/voip_onsip/i18n/ne.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Bishisht Bhatta , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Last-Translator: Bishisht Bhatta , 2018\n" +"Language-Team: Nepali (https://www.transifex.com/odoo/teams/41243/ne/)\n" +"Language: ne\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/nl.po b/voip_onsip/i18n/nl.po new file mode 100644 index 0000000..abb5922 --- /dev/null +++ b/voip_onsip/i18n/nl.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie instellingen" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP Auth Gebruikersnaam" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP domein" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "De URL van je websocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Gebruiker" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Gebruikersinstellingen" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/nl_BE.po b/voip_onsip/i18n/nl_BE.po new file mode 100644 index 0000000..7dcdd8f --- /dev/null +++ b/voip_onsip/i18n/nl_BE.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Dutch (Belgium) (https://www.transifex.com/odoo/teams/41243/nl_BE/)\n" +"Language: nl_BE\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/pl.po b/voip_onsip/i18n/pl.po new file mode 100644 index 0000000..384a4d3 --- /dev/null +++ b/voip_onsip/i18n/pl.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Ustawienia konfiguracji" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nazwa użytkownika OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Domena onSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Użytkownik" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Ustawienia użytkownika" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/pt.po b/voip_onsip/i18n/pt.po new file mode 100644 index 0000000..8e137e7 --- /dev/null +++ b/voip_onsip/i18n/pt.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# Marta Marouço, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Marta Marouço, 2024\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Domínio OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Utilizador" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Configurações do Utilizador" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/pt_BR.po b/voip_onsip/i18n/pt_BR.po new file mode 100644 index 0000000..a9e3607 --- /dev/null +++ b/voip_onsip/i18n/pt_BR.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Nome de usuário do Auth OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Domínio OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "O URL do seu WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Usuário" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Configurações do usuário" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/ro.po b/voip_onsip/i18n/ro.po new file mode 100644 index 0000000..8fb45d0 --- /dev/null +++ b/voip_onsip/i18n/ro.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Dorin Hongu , 2024 +# Foldi Robert , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Foldi Robert , 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Setări de configurare" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL-ul WebSocket-ului dvs." + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Utilizator" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Setări utilizator" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/ru.po b/voip_onsip/i18n/ru.po new file mode 100644 index 0000000..40633c4 --- /dev/null +++ b/voip_onsip/i18n/ru.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Vasiliy Korobatov , 2023 +# Martin Trigaux, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Параметры конфигурации" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Имя пользователя OnSIP Auth" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Домен OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL вашего WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Пользователь" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Настройки пользователя" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/sk.po b/voip_onsip/i18n/sk.po new file mode 100644 index 0000000..352edd4 --- /dev/null +++ b/voip_onsip/i18n/sk.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Nastavenia konfigurácie" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL vášho WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Užívateľ" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/sl.po b/voip_onsip/i18n/sl.po new file mode 100644 index 0000000..59a6e77 --- /dev/null +++ b/voip_onsip/i18n/sl.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Grega Vavtar , 2023 +# Matjaz Mozetic , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Matjaz Mozetic , 2023\n" +"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Uredi nastavitve" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Uporabnik" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/sq.po b/voip_onsip/i18n/sq.po new file mode 100644 index 0000000..14a4d89 --- /dev/null +++ b/voip_onsip/i18n/sq.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+0000\n" +"Language-Team: Albanian (https://www.transifex.com/odoo/teams/41243/sq/)\n" +"Language: sq\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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/sr.po b/voip_onsip/i18n/sr.po new file mode 100644 index 0000000..a82f59a --- /dev/null +++ b/voip_onsip/i18n/sr.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Milan Bojovic , 2023 +# Dragan Vukosavljevic , 2023 +# コフスタジオ, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Podešavanje konfiguracije" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP Auth Username" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP Domain" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "The URL of your WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Korisnik" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Podešavanja korisnika" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/sr@latin.po b/voip_onsip/i18n/sr@latin.po new file mode 100644 index 0000000..6071312 --- /dev/null +++ b/voip_onsip/i18n/sr@latin.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 10:16+0000\n" +"PO-Revision-Date: 2017-09-20 11:33+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/sv.po b/voip_onsip/i18n/sv.po new file mode 100644 index 0000000..822fa4d --- /dev/null +++ b/voip_onsip/i18n/sv.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Chrille Hedberg , 2023 +# Anders Wallenquist , 2023 +# Kim Asplund , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Inställningar" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Användare" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Användarinställningar" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/th.po b/voip_onsip/i18n/th.po new file mode 100644 index 0000000..92c8723 --- /dev/null +++ b/voip_onsip/i18n/th.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# Rasareeyar Lappiam, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "ตั้งค่าการกำหนดค่า" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "ชื่อผู้ใช้การตรวจสอบสิทธิ์ OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "โดเมน OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL ของ WebSocket ของคุณ" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "ผู้ใช้" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "การตั้งค่าผู้ใช้" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/tr.po b/voip_onsip/i18n/tr.po new file mode 100644 index 0000000..470a6ac --- /dev/null +++ b/voip_onsip/i18n/tr.po @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# abc Def , 2023 +# Umur Akın , 2023 +# Murat Kaplan , 2023 +# Ertuğrul Güreş , 2023 +# Fırat Kaya , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Fırat Kaya , 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP Domain" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "WebSocket URL Adresiniz" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Kullanıcı" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Kullanıcı ayarları" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/uk.po b/voip_onsip/i18n/uk.po new file mode 100644 index 0000000..3e0c319 --- /dev/null +++ b/voip_onsip/i18n/uk.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Налаштування" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Ім'я користувача OnSIP Auth" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Домен OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL вашого WebSocket" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Користувач" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Налаштування користувача" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/vi.po b/voip_onsip/i18n/vi.po new file mode 100644 index 0000000..c08b753 --- /dev/null +++ b/voip_onsip/i18n/vi.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# Thi Huong Nguyen, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "Cài đặt cấu hình" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "Tên người dùng xác minh OnSIP" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "Miền OnSIP" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "URL của WebSocket của bạn" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "Người dùng" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "Cài đặt người dùng" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/voip_onsip.pot b/voip_onsip/i18n/voip_onsip.pot new file mode 100644 index 0000000..828acee --- /dev/null +++ b/voip_onsip/i18n/voip_onsip.pot @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 22:21+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "" diff --git a/voip_onsip/i18n/zh_CN.po b/voip_onsip/i18n/zh_CN.po new file mode 100644 index 0000000..0fe011e --- /dev/null +++ b/voip_onsip/i18n/zh_CN.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "配置设置" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP认证用户名" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP 域" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "你的WebSocket的网址" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "用户" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "用户设置" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/i18n/zh_TW.po b/voip_onsip/i18n/zh_TW.po new file mode 100644 index 0000000..1fe12e9 --- /dev/null +++ b/voip_onsip/i18n/zh_TW.po @@ -0,0 +1,57 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * voip_onsip +# +# Translators: +# Wil Odoo, 2023 +# Tony Ng, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 22:21+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_config_settings +msgid "Config Settings" +msgstr "配置設定" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_users__onsip_auth_username +#: model:ir.model.fields,field_description:voip_onsip.field_res_users_settings__onsip_auth_username +msgid "OnSIP Auth Username" +msgstr "OnSIP 驗證用戶名" + +#. module: voip_onsip +#: model_terms:ir.ui.view,arch_db:voip_onsip.res_config_settings_view_form +msgid "OnSIP Domain" +msgstr "OnSIP 網域" + +#. module: voip_onsip +#: model:ir.model.fields,help:voip_onsip.field_res_config_settings__wsServer +msgid "The URL of your WebSocket" +msgstr "你的 WebSocket 的網址" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users +msgid "User" +msgstr "使用者" + +#. module: voip_onsip +#: model:ir.model,name:voip_onsip.model_res_users_settings +msgid "User Settings" +msgstr "使用者設定" + +#. module: voip_onsip +#: model:ir.model.fields,field_description:voip_onsip.field_res_config_settings__wsServer +msgid "WebSocket" +msgstr "WebSocket" diff --git a/voip_onsip/models/__init__.py b/voip_onsip/models/__init__.py new file mode 100644 index 0000000..df23a28 --- /dev/null +++ b/voip_onsip/models/__init__.py @@ -0,0 +1,5 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import res_config_settings +from . import res_users_settings +from . import res_users diff --git a/voip_onsip/models/res_config_settings.py b/voip_onsip/models/res_config_settings.py new file mode 100644 index 0000000..55bf346 --- /dev/null +++ b/voip_onsip/models/res_config_settings.py @@ -0,0 +1,9 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + wsServer = fields.Char(default="wss://edge.sip.onsip.com", config_parameter="voip.wsServer") diff --git a/voip_onsip/models/res_users.py b/voip_onsip/models/res_users.py new file mode 100644 index 0000000..cd893e0 --- /dev/null +++ b/voip_onsip/models/res_users.py @@ -0,0 +1,24 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, fields + + +class ResUsers(models.Model): + _inherit = "res.users" + + onsip_auth_username = fields.Char( + related="res_users_settings_id.onsip_auth_username", inverse="_inverse_onsip_auth_username", related_sudo=False + ) + + @property + def SELF_READABLE_FIELDS(self): + return super().SELF_READABLE_FIELDS + ["onsip_auth_username"] + + @property + def SELF_WRITEABLE_FIELDS(self): + return super().SELF_WRITEABLE_FIELDS + ["onsip_auth_username"] + + def _inverse_onsip_auth_username(self): + for user in self: + res_users_settings_record = self.env["res.users.settings"]._find_or_create_for_user(user) + res_users_settings_record.onsip_auth_username = user.onsip_auth_username diff --git a/voip_onsip/models/res_users_settings.py b/voip_onsip/models/res_users_settings.py new file mode 100644 index 0000000..be921b6 --- /dev/null +++ b/voip_onsip/models/res_users_settings.py @@ -0,0 +1,9 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class ResUsersSettings(models.Model): + _inherit = "res.users.settings" + + onsip_auth_username = fields.Char("OnSIP Auth Username") diff --git a/voip_onsip/static/description/icon.png b/voip_onsip/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d664de59d780d0ae8c9667ad362a983ccac0b5 GIT binary patch literal 631 zcmV--0*L*IP)OZ~r}Q{L$6h58To~0000UbW%=J z0APT>-$3ucAP_;2pCEuxub*!)@88dmaA2=buMkJk%LV`d0jNntK~!ko?bhv*f*=%t z;e!Vd#7*t{V^{9~F4w>fj7FO#ezbF*UwQ)GshKRu!8)hP+An~UwU9&CZS8kg4UrW< z=_47G*Y_|)O8Bz5Bc-iQ+cI-xwOf^4_Q+~$tL%}=?jU;vcHK2X2qAZH=jekr74nyYxF~6~J8;gF5yD9TG!;$E(HkxobrvJNF(V+>=PnHlH(5dQ=UfBjeY9)II@QUCgbG@LU?(=eL0Ru(+D1p z!)W&h`66w9BU`5PL_|MP zs~iz%c=CLBbHr!rxPuuYo-q4cWs@c1DR%Z#@%~7|t~PF*ErNc5UfAY6Z@QIVwbObT$IsEJPqi5sG|R1lJm}S|igy2qA diff --git a/voip_onsip/static/src/user_settings_service_patch.js b/voip_onsip/static/src/user_settings_service_patch.js new file mode 100644 index 0000000..d49965f --- /dev/null +++ b/voip_onsip/static/src/user_settings_service_patch.js @@ -0,0 +1,14 @@ +/* @odoo-module */ + +import { UserSettings } from "@mail/core/common/user_settings_service"; + +import { patch } from "@web/core/utils/patch"; + +patch(UserSettings.prototype, { + updateFromCommands(settings) { + super.updateFromCommands(settings); + if ("onsip_auth_username" in settings) { + this.onsip_auth_username = settings.onsip_auth_username; + } + }, +}); diff --git a/voip_onsip/static/src/voip_service_patch.js b/voip_onsip/static/src/voip_service_patch.js new file mode 100644 index 0000000..a48a022 --- /dev/null +++ b/voip_onsip/static/src/voip_service_patch.js @@ -0,0 +1,14 @@ +/* @odoo-module */ + +import { Voip } from "@voip/core/voip_service"; + +import { patch } from "@web/core/utils/patch"; + +patch(Voip.prototype, { + get areCredentialsSet() { + return Boolean(this.settings.onsip_auth_username) && super.areCredentialsSet; + }, + get authorizationUsername() { + return this.settings.onsip_auth_username || ""; + }, +}); diff --git a/voip_onsip/views/res_config_settings_views.xml b/voip_onsip/views/res_config_settings_views.xml new file mode 100644 index 0000000..ead2a17 --- /dev/null +++ b/voip_onsip/views/res_config_settings_views.xml @@ -0,0 +1,15 @@ + + + + + res.config.settings.inherit.onsip + res.config.settings + + + + + + + + diff --git a/voip_onsip/views/res_users_views.xml b/voip_onsip/views/res_users_views.xml new file mode 100644 index 0000000..76f0359 --- /dev/null +++ b/voip_onsip/views/res_users_views.xml @@ -0,0 +1,23 @@ + + + + VOIP OnSIP in User Form + res.users + + + + + + + + + VOIP OnSIP in Preferences Form + res.users + + + + + + + + From 5d28864514ca32a15988fcc47c143ed65cd2a450 Mon Sep 17 00:00:00 2001 From: ljmwkx <1340053001@qq.com> Date: Tue, 24 Dec 2024 17:35:00 +0800 Subject: [PATCH 4/8] 1 --- web_gantt/static/src/gantt_renderer.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_gantt/static/src/gantt_renderer.xml b/web_gantt/static/src/gantt_renderer.xml index ecdf9df..4f4b0e8 100644 --- a/web_gantt/static/src/gantt_renderer.xml +++ b/web_gantt/static/src/gantt_renderer.xml @@ -27,7 +27,7 @@
-
+
From 1f189632174bf1168656e14715c95c25947d6d8c Mon Sep 17 00:00:00 2001 From: ljmwkx <1340053001@qq.com> Date: Fri, 27 Dec 2024 21:29:40 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=89=AB=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- barcodes/__init__.py | 14 + barcodes/__manifest__.py | 23 + barcodes/data/barcodes_data.xml | 15 + barcodes/i18n/af.po | 330 +++++++++++ barcodes/i18n/am.po | 326 +++++++++++ barcodes/i18n/ar.po | 362 ++++++++++++ barcodes/i18n/az.po | 331 +++++++++++ barcodes/i18n/barcodes.pot | 339 +++++++++++ barcodes/i18n/bg.po | 362 ++++++++++++ barcodes/i18n/bs.po | 331 +++++++++++ barcodes/i18n/ca.po | 375 ++++++++++++ barcodes/i18n/cs.po | 368 ++++++++++++ barcodes/i18n/da.po | 363 ++++++++++++ barcodes/i18n/de.po | 369 ++++++++++++ barcodes/i18n/el.po | 337 +++++++++++ barcodes/i18n/es.po | 375 ++++++++++++ barcodes/i18n/es_419.po | 375 ++++++++++++ barcodes/i18n/es_CL.po | 329 +++++++++++ barcodes/i18n/et.po | 377 ++++++++++++ barcodes/i18n/eu.po | 329 +++++++++++ barcodes/i18n/fa.po | 358 ++++++++++++ barcodes/i18n/fi.po | 375 ++++++++++++ barcodes/i18n/fo.po | 329 +++++++++++ barcodes/i18n/fr.po | 372 ++++++++++++ barcodes/i18n/fr_BE.po | 328 +++++++++++ barcodes/i18n/fr_CA.po | 329 +++++++++++ barcodes/i18n/gl.po | 329 +++++++++++ barcodes/i18n/gu.po | 330 +++++++++++ barcodes/i18n/he.po | 355 ++++++++++++ barcodes/i18n/hr.po | 334 +++++++++++ barcodes/i18n/hu.po | 361 ++++++++++++ barcodes/i18n/hy.po | 339 +++++++++++ barcodes/i18n/id.po | 368 ++++++++++++ barcodes/i18n/is.po | 343 +++++++++++ barcodes/i18n/it.po | 371 ++++++++++++ barcodes/i18n/ja.po | 353 ++++++++++++ barcodes/i18n/ka.po | 329 +++++++++++ barcodes/i18n/kab.po | 329 +++++++++++ barcodes/i18n/km.po | 330 +++++++++++ barcodes/i18n/ko.po | 355 ++++++++++++ barcodes/i18n/lb.po | 326 +++++++++++ barcodes/i18n/lo.po | 326 +++++++++++ barcodes/i18n/lt.po | 363 ++++++++++++ barcodes/i18n/lv.po | 347 ++++++++++++ barcodes/i18n/mk.po | 329 +++++++++++ barcodes/i18n/mn.po | 337 +++++++++++ barcodes/i18n/nb.po | 347 ++++++++++++ barcodes/i18n/ne.po | 326 +++++++++++ barcodes/i18n/nl.po | 368 ++++++++++++ barcodes/i18n/pl.po | 360 ++++++++++++ barcodes/i18n/pt.po | 363 ++++++++++++ barcodes/i18n/pt_BR.po | 372 ++++++++++++ barcodes/i18n/ro.po | 369 ++++++++++++ barcodes/i18n/ru.po | 374 ++++++++++++ barcodes/i18n/sk.po | 358 ++++++++++++ barcodes/i18n/sl.po | 352 ++++++++++++ barcodes/i18n/sq.po | 329 +++++++++++ barcodes/i18n/sr.po | 372 ++++++++++++ barcodes/i18n/sr@latin.po | 332 +++++++++++ barcodes/i18n/sv.po | 377 ++++++++++++ barcodes/i18n/ta.po | 330 +++++++++++ barcodes/i18n/th.po | 362 ++++++++++++ barcodes/i18n/tr.po | 371 ++++++++++++ barcodes/i18n/uk.po | 367 ++++++++++++ barcodes/i18n/vi.po | 367 ++++++++++++ barcodes/i18n/zh_CN.po | 355 ++++++++++++ barcodes/i18n/zh_TW.po | 353 ++++++++++++ barcodes/models/__init__.py | 6 + barcodes/models/barcode_events_mixin.py | 25 + barcodes/models/barcode_nomenclature.py | 134 +++++ barcodes/models/barcode_rule.py | 43 ++ barcodes/models/ir_http.py | 15 + barcodes/models/res_company.py | 16 + barcodes/security/ir.model.access.csv | 5 + barcodes/static/img/barcode.png | Bin 0 -> 1292 bytes barcodes/static/src/barcode_handler_field.js | 26 + barcodes/static/src/barcode_handlers.js | 92 +++ barcodes/static/src/barcode_service.js | 136 +++++ .../static/src/components/barcode_scanner.js | 43 ++ .../src/components/barcode_scanner.scss | 66 +++ .../static/src/components/barcode_scanner.xml | 15 + barcodes/static/src/float_scannable_field.js | 18 + barcodes/static/src/float_scannable_field.xml | 12 + barcodes/static/src/js/barcode_parser.js | 236 ++++++++ .../static/tests/basic/barcode_scan_tests.js | 32 ++ barcodes/static/tests/basic/barcode_tests.js | 217 +++++++ .../tests/basic/float_scannable_field_test.js | 142 +++++ .../basic/legacy/barcode_parser_tests.js | 42 ++ barcodes/static/tests/helpers.js | 11 + .../tests/mobile/barcode_mobile_tests.js | 91 +++ barcodes/tests/__init__.py | 1 + barcodes/tests/test_barcode_nomenclature.py | 249 ++++++++ barcodes/views/barcodes_view.xml | 82 +++ barcodes_gs1_nomenclature/__init__.py | 1 + barcodes_gs1_nomenclature/__manifest__.py | 24 + .../data/barcodes_gs1_rules.xml | 338 +++++++++++ barcodes_gs1_nomenclature/i18n/ar.po | 259 +++++++++ .../i18n/barcodes_gs1_nomenclature.pot | 237 ++++++++ barcodes_gs1_nomenclature/i18n/bg.po | 247 ++++++++ barcodes_gs1_nomenclature/i18n/ca.po | 271 +++++++++ barcodes_gs1_nomenclature/i18n/cs.po | 246 ++++++++ barcodes_gs1_nomenclature/i18n/da.po | 244 ++++++++ barcodes_gs1_nomenclature/i18n/de.po | 260 +++++++++ barcodes_gs1_nomenclature/i18n/es.po | 266 +++++++++ barcodes_gs1_nomenclature/i18n/es_419.po | 263 +++++++++ barcodes_gs1_nomenclature/i18n/et.po | 259 +++++++++ barcodes_gs1_nomenclature/i18n/fa.po | 255 +++++++++ barcodes_gs1_nomenclature/i18n/fi.po | 268 +++++++++ barcodes_gs1_nomenclature/i18n/fr.po | 260 +++++++++ barcodes_gs1_nomenclature/i18n/he.po | 246 ++++++++ barcodes_gs1_nomenclature/i18n/hu.po | 246 ++++++++ barcodes_gs1_nomenclature/i18n/hy.po | 237 ++++++++ barcodes_gs1_nomenclature/i18n/id.po | 262 +++++++++ barcodes_gs1_nomenclature/i18n/is.po | 242 ++++++++ barcodes_gs1_nomenclature/i18n/it.po | 266 +++++++++ barcodes_gs1_nomenclature/i18n/ja.po | 250 ++++++++ barcodes_gs1_nomenclature/i18n/ko.po | 250 ++++++++ barcodes_gs1_nomenclature/i18n/lt.po | 249 ++++++++ barcodes_gs1_nomenclature/i18n/lv.po | 244 ++++++++ barcodes_gs1_nomenclature/i18n/nb.po | 242 ++++++++ barcodes_gs1_nomenclature/i18n/nl.po | 262 +++++++++ barcodes_gs1_nomenclature/i18n/pl.po | 263 +++++++++ barcodes_gs1_nomenclature/i18n/pt.po | 243 ++++++++ barcodes_gs1_nomenclature/i18n/pt_BR.po | 265 +++++++++ barcodes_gs1_nomenclature/i18n/ro.po | 267 +++++++++ barcodes_gs1_nomenclature/i18n/ru.po | 266 +++++++++ barcodes_gs1_nomenclature/i18n/sk.po | 243 ++++++++ barcodes_gs1_nomenclature/i18n/sl.po | 245 ++++++++ barcodes_gs1_nomenclature/i18n/sr.po | 264 +++++++++ barcodes_gs1_nomenclature/i18n/sv.po | 265 +++++++++ barcodes_gs1_nomenclature/i18n/th.po | 257 +++++++++ barcodes_gs1_nomenclature/i18n/tr.po | 269 +++++++++ barcodes_gs1_nomenclature/i18n/uk.po | 260 +++++++++ barcodes_gs1_nomenclature/i18n/vi.po | 262 +++++++++ barcodes_gs1_nomenclature/i18n/zh_CN.po | 251 ++++++++ barcodes_gs1_nomenclature/i18n/zh_TW.po | 250 ++++++++ barcodes_gs1_nomenclature/models/__init__.py | 3 + .../models/barcode_nomenclature.py | 175 ++++++ .../models/barcode_rule.py | 69 +++ barcodes_gs1_nomenclature/models/ir_http.py | 16 + .../static/src/js/barcode_parser.js | 167 ++++++ .../static/src/js/barcode_service.js | 18 + .../src/js/tests/barcode_parser_tests.js | 254 +++++++++ barcodes_gs1_nomenclature/tests/__init__.py | 1 + .../tests/test_barcodes_gs1_nomenclature.py | 130 +++++ .../views/barcodes_view.xml | 60 ++ uom/__init__.py | 4 + uom/__manifest__.py | 21 + uom/data/uom_data.xml | 205 +++++++ uom/i18n/ar.po | 520 +++++++++++++++++ uom/i18n/az.po | 467 +++++++++++++++ uom/i18n/bg.po | 510 +++++++++++++++++ uom/i18n/bs.po | 467 +++++++++++++++ uom/i18n/ca.po | 533 +++++++++++++++++ uom/i18n/cs.po | 513 +++++++++++++++++ uom/i18n/da.po | 508 +++++++++++++++++ uom/i18n/de.po | 524 +++++++++++++++++ uom/i18n/el.po | 467 +++++++++++++++ uom/i18n/es.po | 528 +++++++++++++++++ uom/i18n/es_419.po | 531 +++++++++++++++++ uom/i18n/et.po | 536 ++++++++++++++++++ uom/i18n/fa.po | 496 ++++++++++++++++ uom/i18n/fi.po | 532 +++++++++++++++++ uom/i18n/fr.po | 528 +++++++++++++++++ uom/i18n/gu.po | 466 +++++++++++++++ uom/i18n/he.po | 506 +++++++++++++++++ uom/i18n/hr.po | 475 ++++++++++++++++ uom/i18n/hu.po | 512 +++++++++++++++++ uom/i18n/hy.po | 483 ++++++++++++++++ uom/i18n/id.po | 526 +++++++++++++++++ uom/i18n/is.po | 490 ++++++++++++++++ uom/i18n/it.po | 530 +++++++++++++++++ uom/i18n/ja.po | 507 +++++++++++++++++ uom/i18n/km.po | 466 +++++++++++++++ uom/i18n/ko.po | 510 +++++++++++++++++ uom/i18n/lb.po | 462 +++++++++++++++ uom/i18n/lt.po | 512 +++++++++++++++++ uom/i18n/lv.po | 497 ++++++++++++++++ uom/i18n/mn.po | 480 ++++++++++++++++ uom/i18n/nb.po | 492 ++++++++++++++++ uom/i18n/nl.po | 524 +++++++++++++++++ uom/i18n/pl.po | 519 +++++++++++++++++ uom/i18n/pt.po | 508 +++++++++++++++++ uom/i18n/pt_BR.po | 528 +++++++++++++++++ uom/i18n/ro.po | 514 +++++++++++++++++ uom/i18n/ru.po | 532 +++++++++++++++++ uom/i18n/sk.po | 503 ++++++++++++++++ uom/i18n/sl.po | 502 ++++++++++++++++ uom/i18n/sr.po | 524 +++++++++++++++++ uom/i18n/sv.po | 532 +++++++++++++++++ uom/i18n/th.po | 521 +++++++++++++++++ uom/i18n/tr.po | 530 +++++++++++++++++ uom/i18n/uk.po | 528 +++++++++++++++++ uom/i18n/uom.pot | 483 ++++++++++++++++ uom/i18n/vi.po | 519 +++++++++++++++++ uom/i18n/zh_CN.po | 507 +++++++++++++++++ uom/i18n/zh_TW.po | 508 +++++++++++++++++ uom/models/__init__.py | 4 + uom/models/uom_uom.py | 265 +++++++++ uom/security/ir.model.access.csv | 5 + uom/security/uom_security.xml | 9 + uom/tests/__init__.py | 4 + uom/tests/common.py | 27 + uom/tests/test_uom.py | 108 ++++ uom/views/uom_uom_views.xml | 155 +++++ 205 files changed, 60854 insertions(+) create mode 100644 barcodes/__init__.py create mode 100644 barcodes/__manifest__.py create mode 100644 barcodes/data/barcodes_data.xml create mode 100644 barcodes/i18n/af.po create mode 100644 barcodes/i18n/am.po create mode 100644 barcodes/i18n/ar.po create mode 100644 barcodes/i18n/az.po create mode 100644 barcodes/i18n/barcodes.pot create mode 100644 barcodes/i18n/bg.po create mode 100644 barcodes/i18n/bs.po create mode 100644 barcodes/i18n/ca.po create mode 100644 barcodes/i18n/cs.po create mode 100644 barcodes/i18n/da.po create mode 100644 barcodes/i18n/de.po create mode 100644 barcodes/i18n/el.po create mode 100644 barcodes/i18n/es.po create mode 100644 barcodes/i18n/es_419.po create mode 100644 barcodes/i18n/es_CL.po create mode 100644 barcodes/i18n/et.po create mode 100644 barcodes/i18n/eu.po create mode 100644 barcodes/i18n/fa.po create mode 100644 barcodes/i18n/fi.po create mode 100644 barcodes/i18n/fo.po create mode 100644 barcodes/i18n/fr.po create mode 100644 barcodes/i18n/fr_BE.po create mode 100644 barcodes/i18n/fr_CA.po create mode 100644 barcodes/i18n/gl.po create mode 100644 barcodes/i18n/gu.po create mode 100644 barcodes/i18n/he.po create mode 100644 barcodes/i18n/hr.po create mode 100644 barcodes/i18n/hu.po create mode 100644 barcodes/i18n/hy.po create mode 100644 barcodes/i18n/id.po create mode 100644 barcodes/i18n/is.po create mode 100644 barcodes/i18n/it.po create mode 100644 barcodes/i18n/ja.po create mode 100644 barcodes/i18n/ka.po create mode 100644 barcodes/i18n/kab.po create mode 100644 barcodes/i18n/km.po create mode 100644 barcodes/i18n/ko.po create mode 100644 barcodes/i18n/lb.po create mode 100644 barcodes/i18n/lo.po create mode 100644 barcodes/i18n/lt.po create mode 100644 barcodes/i18n/lv.po create mode 100644 barcodes/i18n/mk.po create mode 100644 barcodes/i18n/mn.po create mode 100644 barcodes/i18n/nb.po create mode 100644 barcodes/i18n/ne.po create mode 100644 barcodes/i18n/nl.po create mode 100644 barcodes/i18n/pl.po create mode 100644 barcodes/i18n/pt.po create mode 100644 barcodes/i18n/pt_BR.po create mode 100644 barcodes/i18n/ro.po create mode 100644 barcodes/i18n/ru.po create mode 100644 barcodes/i18n/sk.po create mode 100644 barcodes/i18n/sl.po create mode 100644 barcodes/i18n/sq.po create mode 100644 barcodes/i18n/sr.po create mode 100644 barcodes/i18n/sr@latin.po create mode 100644 barcodes/i18n/sv.po create mode 100644 barcodes/i18n/ta.po create mode 100644 barcodes/i18n/th.po create mode 100644 barcodes/i18n/tr.po create mode 100644 barcodes/i18n/uk.po create mode 100644 barcodes/i18n/vi.po create mode 100644 barcodes/i18n/zh_CN.po create mode 100644 barcodes/i18n/zh_TW.po create mode 100644 barcodes/models/__init__.py create mode 100644 barcodes/models/barcode_events_mixin.py create mode 100644 barcodes/models/barcode_nomenclature.py create mode 100644 barcodes/models/barcode_rule.py create mode 100644 barcodes/models/ir_http.py create mode 100644 barcodes/models/res_company.py create mode 100644 barcodes/security/ir.model.access.csv create mode 100644 barcodes/static/img/barcode.png create mode 100644 barcodes/static/src/barcode_handler_field.js create mode 100644 barcodes/static/src/barcode_handlers.js create mode 100644 barcodes/static/src/barcode_service.js create mode 100644 barcodes/static/src/components/barcode_scanner.js create mode 100644 barcodes/static/src/components/barcode_scanner.scss create mode 100644 barcodes/static/src/components/barcode_scanner.xml create mode 100644 barcodes/static/src/float_scannable_field.js create mode 100644 barcodes/static/src/float_scannable_field.xml create mode 100644 barcodes/static/src/js/barcode_parser.js create mode 100644 barcodes/static/tests/basic/barcode_scan_tests.js create mode 100644 barcodes/static/tests/basic/barcode_tests.js create mode 100644 barcodes/static/tests/basic/float_scannable_field_test.js create mode 100644 barcodes/static/tests/basic/legacy/barcode_parser_tests.js create mode 100644 barcodes/static/tests/helpers.js create mode 100644 barcodes/static/tests/mobile/barcode_mobile_tests.js create mode 100644 barcodes/tests/__init__.py create mode 100644 barcodes/tests/test_barcode_nomenclature.py create mode 100644 barcodes/views/barcodes_view.xml create mode 100644 barcodes_gs1_nomenclature/__init__.py create mode 100644 barcodes_gs1_nomenclature/__manifest__.py create mode 100644 barcodes_gs1_nomenclature/data/barcodes_gs1_rules.xml create mode 100644 barcodes_gs1_nomenclature/i18n/ar.po create mode 100644 barcodes_gs1_nomenclature/i18n/barcodes_gs1_nomenclature.pot create mode 100644 barcodes_gs1_nomenclature/i18n/bg.po create mode 100644 barcodes_gs1_nomenclature/i18n/ca.po create mode 100644 barcodes_gs1_nomenclature/i18n/cs.po create mode 100644 barcodes_gs1_nomenclature/i18n/da.po create mode 100644 barcodes_gs1_nomenclature/i18n/de.po create mode 100644 barcodes_gs1_nomenclature/i18n/es.po create mode 100644 barcodes_gs1_nomenclature/i18n/es_419.po create mode 100644 barcodes_gs1_nomenclature/i18n/et.po create mode 100644 barcodes_gs1_nomenclature/i18n/fa.po create mode 100644 barcodes_gs1_nomenclature/i18n/fi.po create mode 100644 barcodes_gs1_nomenclature/i18n/fr.po create mode 100644 barcodes_gs1_nomenclature/i18n/he.po create mode 100644 barcodes_gs1_nomenclature/i18n/hu.po create mode 100644 barcodes_gs1_nomenclature/i18n/hy.po create mode 100644 barcodes_gs1_nomenclature/i18n/id.po create mode 100644 barcodes_gs1_nomenclature/i18n/is.po create mode 100644 barcodes_gs1_nomenclature/i18n/it.po create mode 100644 barcodes_gs1_nomenclature/i18n/ja.po create mode 100644 barcodes_gs1_nomenclature/i18n/ko.po create mode 100644 barcodes_gs1_nomenclature/i18n/lt.po create mode 100644 barcodes_gs1_nomenclature/i18n/lv.po create mode 100644 barcodes_gs1_nomenclature/i18n/nb.po create mode 100644 barcodes_gs1_nomenclature/i18n/nl.po create mode 100644 barcodes_gs1_nomenclature/i18n/pl.po create mode 100644 barcodes_gs1_nomenclature/i18n/pt.po create mode 100644 barcodes_gs1_nomenclature/i18n/pt_BR.po create mode 100644 barcodes_gs1_nomenclature/i18n/ro.po create mode 100644 barcodes_gs1_nomenclature/i18n/ru.po create mode 100644 barcodes_gs1_nomenclature/i18n/sk.po create mode 100644 barcodes_gs1_nomenclature/i18n/sl.po create mode 100644 barcodes_gs1_nomenclature/i18n/sr.po create mode 100644 barcodes_gs1_nomenclature/i18n/sv.po create mode 100644 barcodes_gs1_nomenclature/i18n/th.po create mode 100644 barcodes_gs1_nomenclature/i18n/tr.po create mode 100644 barcodes_gs1_nomenclature/i18n/uk.po create mode 100644 barcodes_gs1_nomenclature/i18n/vi.po create mode 100644 barcodes_gs1_nomenclature/i18n/zh_CN.po create mode 100644 barcodes_gs1_nomenclature/i18n/zh_TW.po create mode 100644 barcodes_gs1_nomenclature/models/__init__.py create mode 100644 barcodes_gs1_nomenclature/models/barcode_nomenclature.py create mode 100644 barcodes_gs1_nomenclature/models/barcode_rule.py create mode 100644 barcodes_gs1_nomenclature/models/ir_http.py create mode 100644 barcodes_gs1_nomenclature/static/src/js/barcode_parser.js create mode 100644 barcodes_gs1_nomenclature/static/src/js/barcode_service.js create mode 100644 barcodes_gs1_nomenclature/static/src/js/tests/barcode_parser_tests.js create mode 100644 barcodes_gs1_nomenclature/tests/__init__.py create mode 100644 barcodes_gs1_nomenclature/tests/test_barcodes_gs1_nomenclature.py create mode 100644 barcodes_gs1_nomenclature/views/barcodes_view.xml create mode 100644 uom/__init__.py create mode 100644 uom/__manifest__.py create mode 100644 uom/data/uom_data.xml create mode 100644 uom/i18n/ar.po create mode 100644 uom/i18n/az.po create mode 100644 uom/i18n/bg.po create mode 100644 uom/i18n/bs.po create mode 100644 uom/i18n/ca.po create mode 100644 uom/i18n/cs.po create mode 100644 uom/i18n/da.po create mode 100644 uom/i18n/de.po create mode 100644 uom/i18n/el.po create mode 100644 uom/i18n/es.po create mode 100644 uom/i18n/es_419.po create mode 100644 uom/i18n/et.po create mode 100644 uom/i18n/fa.po create mode 100644 uom/i18n/fi.po create mode 100644 uom/i18n/fr.po create mode 100644 uom/i18n/gu.po create mode 100644 uom/i18n/he.po create mode 100644 uom/i18n/hr.po create mode 100644 uom/i18n/hu.po create mode 100644 uom/i18n/hy.po create mode 100644 uom/i18n/id.po create mode 100644 uom/i18n/is.po create mode 100644 uom/i18n/it.po create mode 100644 uom/i18n/ja.po create mode 100644 uom/i18n/km.po create mode 100644 uom/i18n/ko.po create mode 100644 uom/i18n/lb.po create mode 100644 uom/i18n/lt.po create mode 100644 uom/i18n/lv.po create mode 100644 uom/i18n/mn.po create mode 100644 uom/i18n/nb.po create mode 100644 uom/i18n/nl.po create mode 100644 uom/i18n/pl.po create mode 100644 uom/i18n/pt.po create mode 100644 uom/i18n/pt_BR.po create mode 100644 uom/i18n/ro.po create mode 100644 uom/i18n/ru.po create mode 100644 uom/i18n/sk.po create mode 100644 uom/i18n/sl.po create mode 100644 uom/i18n/sr.po create mode 100644 uom/i18n/sv.po create mode 100644 uom/i18n/th.po create mode 100644 uom/i18n/tr.po create mode 100644 uom/i18n/uk.po create mode 100644 uom/i18n/uom.pot create mode 100644 uom/i18n/vi.po create mode 100644 uom/i18n/zh_CN.po create mode 100644 uom/i18n/zh_TW.po create mode 100644 uom/models/__init__.py create mode 100644 uom/models/uom_uom.py create mode 100644 uom/security/ir.model.access.csv create mode 100644 uom/security/uom_security.xml create mode 100644 uom/tests/__init__.py create mode 100644 uom/tests/common.py create mode 100644 uom/tests/test_uom.py create mode 100644 uom/views/uom_uom_views.xml diff --git a/barcodes/__init__.py b/barcodes/__init__.py new file mode 100644 index 0000000..d765e0a --- /dev/null +++ b/barcodes/__init__.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- + +from . import models + + +def _assign_default_nomeclature_id(env): + company_ids_without_default_nomenclature_id = env['res.company'].search([ + ('nomenclature_id', '=', False) + ]) + default_nomenclature_id = env.ref('barcodes.default_barcode_nomenclature', raise_if_not_found=False) + if default_nomenclature_id: + company_ids_without_default_nomenclature_id.write({ + 'nomenclature_id': default_nomenclature_id.id, + }) diff --git a/barcodes/__manifest__.py b/barcodes/__manifest__.py new file mode 100644 index 0000000..162fd97 --- /dev/null +++ b/barcodes/__manifest__.py @@ -0,0 +1,23 @@ +{ + 'name': 'Barcode', + 'version': '2.0', + 'category': 'Hidden', + 'summary': 'Scan and Parse Barcodes', + 'depends': ['web'], + 'data': [ + 'data/barcodes_data.xml', + 'views/barcodes_view.xml', + 'security/ir.model.access.csv', + ], + 'installable': True, + 'post_init_hook': '_assign_default_nomeclature_id', + 'assets': { + 'web.assets_backend': [ + 'barcodes/static/src/**/*', + ], + 'web.tests_assets': ['barcodes/static/tests/helpers.js'], + 'web.qunit_suite_tests': ['barcodes/static/tests/basic/**/*.js'], + 'web.qunit_mobile_suite_tests': ['barcodes/static/tests/mobile/*.js'], + }, + 'license': 'LGPL-3', +} diff --git a/barcodes/data/barcodes_data.xml b/barcodes/data/barcodes_data.xml new file mode 100644 index 0000000..7607a01 --- /dev/null +++ b/barcodes/data/barcodes_data.xml @@ -0,0 +1,15 @@ + + + + Default Nomenclature + + + + Product Barcodes + + 90 + product + any + .* + + diff --git a/barcodes/i18n/af.po b/barcodes/i18n/af.po new file mode 100644 index 0000000..24a225e --- /dev/null +++ b/barcodes/i18n/af.po @@ -0,0 +1,330 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:45+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Afrikaans (https://app.transifex.com/odoo/teams/41243/af/)\n" +"Language: af\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Maatskappye" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Geskep deur" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Geskep op" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Vertoningsnaam" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Laas Opgedateer deur" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Laas Opgedateer op" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Volgorde" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Soort" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/am.po b/barcodes/i18n/am.po new file mode 100644 index 0000000..a50ba7f --- /dev/null +++ b/barcodes/i18n/am.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:45+0000\n" +"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n" +"Language: am\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "ቅደም ተከተል" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/ar.po b/barcodes/i18n/ar.po new file mode 100644 index 0000000..f9aaf6e --- /dev/null +++ b/barcodes/i18n/ar.po @@ -0,0 +1,362 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "'*' ليس نمط باركود صحيح. هل تقصد '.*'؟" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"تحدِّد تسميات الباركود كيفية التعرف على الباركودات وتصنيفها.\n" +" عند مسح باركود ضوئيًا، يتم ربطه بالقاعدة الأولى مع نمط\n" +" مُطابق. تركيبة النمط هي تركيبة التعبير النمطي، وتتم مطابقة\n" +" الباركود إذا طابق التعبير النمطي بادئة الباركود. " + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "تحدد تسمية الباركود كيفية تعرف نقطة البيع على الباركود وكيفية تفسيره " + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "إضافة تسمية جديدة للباركود" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "لقب" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "دائمًا" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "تعرف داخلي على قاعدة تسمية هذا الباركود" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "تعرف داخلي على تسمية الباركود" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "أي" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "باركود" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "تعرف داخلي على تسمية هذا الباركود" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "تسمية الباركود" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "تسميات الباركود" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "نمط الباركود" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "قاعدة الباركود" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "الباركود الممسوح ضوئيًا" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "الباركود: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "الشركات" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "اسم العرض " + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 إلى UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "التشفير" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "مسار HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "المُعرف" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "مطلقًا" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "تسمية" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"يمكن أن تحدد الانماط أيضًا كيفية تشفير القيم الرقمية مثل الأوزان أو الأسعار\n" +" داخل الباركود. يُشار إليها بـ {NNN} حيث يمثل حرف N\n" +" مكان تشفير خانات الرقم. كما تدعم أنماط الباركود الأرقام الكسرية أيضًا\n" +" ويتم التعبير عن الرقم العشري هكذا {NNNDD}. في هذه الحالات،\n" +" يجب أن تظهر هذه الخانات في حقل الباركود كأصفار في السجلات\n" +" المرتبطة. " + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "يرجى المسح مجدداً! " + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "اسم القاعدة" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "القواعد" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "تسلسل " + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "الجداول " + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "انقر للمسح " + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "نمط مطابقة الباركود" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "قائمة قواعد الباركود" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "سوف يُستخدَم النمط المطابق كلقب لهذا الباركود " + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"يوجد خطأ في تركيبة نمط الباركود %(pattern)s: يمكن أن تحتوي القاعدة على زوج " +"أقواس واحد فقط. " + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"يوجد خطأ في تركيبة نمط الباركود %(pattern)s: يمكن أن تحتوي الأقواس فقط على N" +" متبوعة بـ D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "يوجد خطأ في تركيبة نمط الباركود %(pattern)s: أقواس فارغة. " + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"ستُطبق هذه القاعدة فقط إذا كان الباركود مُشفرًا بطريقة التشفير المحددة" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "النوع" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"يمكن تحويل أكواد UPC لأكواد EAN بوضع صفر كبادئة لهم. يحدد هذا الاختيار إن " +"كان ينبغي تحويل باركود UPC أو EAN تلقائيًا للنوع الآخر عند محاولة تطبيق " +"قاعدة بطريقة التشفير الأخرى." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A إلى EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "التحويل بين UPC وEAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "وحدة المنتج" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "أمر باركود غير معروف " + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"يستخدم لترتيب القواعد بحيث تتم مطابقة القواعد ذات التسلسل الأصغر أولًا" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "قيمة آخر باركود ممسوح ضوئيًا." diff --git a/barcodes/i18n/az.po b/barcodes/i18n/az.po new file mode 100644 index 0000000..909ab4a --- /dev/null +++ b/barcodes/i18n/az.po @@ -0,0 +1,331 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# erpgo translator , 2022 +# Jumshud Sultanov , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:45+0000\n" +"Last-Translator: Jumshud Sultanov , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Qoşma Ad" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Həmişə" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Barkod Nomenklaturası" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Barkod Qaydası" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Şirkətlər" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Tərəfindən yaradılıb" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Tarixdə yaradıldı" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Ekran Adı" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodlaşdırma" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Marşrutizasiyası" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Son Yeniləyən" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Son Yenilənmə tarixi" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Heç vaxt" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Qayda Adı" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Qaydalar" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Ardıcıllıq" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "Bu qayda yalnız bar- kod təyin edilmiş kodlaşdırma ilə kodlaşdırıldığı halda, tətbiq olunacaq" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tip" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/barcodes.pot b/barcodes/i18n/barcodes.pot new file mode 100644 index 0000000..20ce04e --- /dev/null +++ b/barcodes/i18n/barcodes.pot @@ -0,0 +1,339 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 21:55+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/bg.po b/barcodes/i18n/bg.po new file mode 100644 index 0000000..a98504f --- /dev/null +++ b/barcodes/i18n/bg.po @@ -0,0 +1,362 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Rosen Vladimirov , 2023 +# aleksandar ivanov, 2023 +# Igor Sheludko , 2023 +# Martin Trigaux, 2023 +# KeyVillage, 2023 +# Maria Boyadjieva , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Maria Boyadjieva , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Номенклатурите на баркодове определят как баркодовете се признават и категоризират.\n" +" Когато баркодът е сканиран, той вече е присъединен към първото правило с подходящ\n" +" шаблон. Синтаксисът на шаблона е от типа 'регулярен израз', a баркодът е съответстващ,\n" +" ако регулярният израз се съчетава с префикс на баркода." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Дадена номенклатура на баркод определя как центърът за продажби идентифицира" +" и интерпретира баркодове" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Псевдоним" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Винаги" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Вътрешна идентификация за това правило за номенклатура на баркодове" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Вътрешна идентификация за баркодова номенклатура " + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Всеки" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Баркод" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Баркодова номенклатура " + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Баркодови номенклатури " + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Шаблон на баркодове" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Правило за баркод" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Сканиран баркод " + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Фирми" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Създадено от" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Създадено на" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Име за Показване" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 to UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодиране" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Последно актуализирано от" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Последно актуализирано на" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Никога" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Име на правило" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Правила" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Последователност" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Маси" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Докоснете, за да сканирате" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Шаблонът за съчетаване на баркод" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Списъкът с правила за баркодове" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Съчетаният шаблон ще играе ролята на псевдоним за този баркод" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Това правило ще се приложи, само ако баркодът е кодиран със специфична " +"кодировка" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Вид" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Кодовете UPC могат да се конвертират в EAN, като им се поставят префикси с " +"нула. Тази настройка определя дали UPC/EAN баркодът трябва да се конвертира " +"автоматично по един или друг начин при опит да се съчетае дадено правило с " +"другата кодировка." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A to EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN конвертиране" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Единица продукт" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Използва се за подредба на правила, така че правилата с по-малка " +"последователност да се съчетават първи" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Стойност на последния сканиран баркод" diff --git a/barcodes/i18n/bs.po b/barcodes/i18n/bs.po new file mode 100644 index 0000000..825b63f --- /dev/null +++ b/barcodes/i18n/bs.po @@ -0,0 +1,331 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# 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:49+0000\n" +"PO-Revision-Date: 2018-09-21 13:17+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Uvijek" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Bilo koji" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura bakodova" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenklature barkodova" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Kompanije" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nikada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Naziv pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvenca" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Stolovi" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tip" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/ca.po b/barcodes/i18n/ca.po new file mode 100644 index 0000000..83bb356 --- /dev/null +++ b/barcodes/i18n/ca.po @@ -0,0 +1,375 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Óscar Fonseca , 2023 +# Quim - eccit , 2023 +# jabiri7, 2023 +# Arnau Ros, 2023 +# Manel Fernandez Ramirez , 2023 +# Ivan Espinola, 2023 +# Marc Tormo i Bochaca , 2023 +# Josep Anton Belchi, 2023 +# Martin Trigaux, 2023 +# RGB Consulting , 2023 +# AncesLatino2004, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: AncesLatino2004, 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Les nomenclatures de codis de barres defineixen com es reconeixen i " +"categoritzen els codis de barres. Quan s'escaneja un codi de barres " +"s'associa a la primeraregla amb un patró coincident. La sintaxi dels " +"patrons és la d'una expressió regular, i un codi de barres es reconeix si " +"l'expressió regular coincideix amb un prefix del codi de barres." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Una nomenclatura de codi de barres defineix com el punt de venda identifica " +"i interpreta els codis de barres" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Afegir una nova nomenclatura de codis de barres" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Pseudònim" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Sempre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Un identificador intern per aquesta regla de nomenclatura de codi de barres" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Identificació interna de la nomenclatura del codi de barres" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Alguna" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Codi de barres" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barreja d'esdeveniments de codi de barres" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura del codi de barres" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclatures de codi de barres " + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Patró de codi de barres" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regla del codi de barres" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Codi de barres escanejat" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Codi de barres:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Empreses" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nom mostrat" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 a UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificació" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutament HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Mai" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nom de regla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regles" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Seqüència" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Taules " + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toca per escanejar" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "El patró de coincidència de codis de barres" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "La llista de regles de codis de barres" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "El patró coincident serà un sobrenom per aquest codi de barres" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Hi ha un error de sintaxi al patró del codi de barres %(pattern)s:una regla " +"només pot contenir un parell de claus." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Hi ha un error de sintaxi al patró del codi de barres %(pattern)s:Les claus " +"només poden contenir N seguides de D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Hi ha un error de sintaxi al patró del codi de barres %(pattern)s: tirants " +"buits." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Aquesta regla només s'aplicarà si el codi de barres està codificat amb la " +"codificació especificada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipus" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Els codis UPC es poden convertir a EAN prefixant-los amb un zero. Aquest " +"ajustament determina si un codi de barres UPC/EAN ha de ser convertit " +"automàticament en un sentit o l'altre en buscar una coincidència amb l'altra" +" codificació." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A a EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversió UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Unitat de producte" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Ordre desconeguda de codi de barres" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Utilitzat per ordenar regles tals que les regles amb menor seqüència " +"coincideixin primer" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor de l'últim codi de barres escanejat." diff --git a/barcodes/i18n/cs.po b/barcodes/i18n/cs.po new file mode 100644 index 0000000..9a8fb19 --- /dev/null +++ b/barcodes/i18n/cs.po @@ -0,0 +1,368 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Jakub Smolka, 2023 +# Ivana Bartonkova, 2023 +# Wil Odoo, 2023 +# Tomáš Píšek, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tomáš Píšek, 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' není platné Regex schéma čárového kódu. Mysleli jste '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Názvy čárových kódů definují, jak jsou čárové kódy rozpoznávány a kategorizovány.\n" +"Když je čárový kód naskenován, je spojen s prvním pravidlem se shodným vzorem. Syntaxe vzoru je stejná jako u regulárního výrazu a čárový kód se shoduje, pokud se regulární výraz shoduje s předponou čárového kódu." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Nomenklatura čárových kódů definuje, jak prodejní místo čárové kódy " +"identifikuje a interpretuje" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Přidat nové názvosloví čárového kódu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Vždy" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Interní identifikace tohoto pravidla nomenklatury čárových kódů" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Interní identifikace nomenklatury čárových kódů" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Jakýkoliv" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Čárové kódy" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Událost čárového kódu mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura čárového kódu" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenklatury čárových kódů" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Vzor čárového kódu" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Pravidlo čárového kódu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Naskenovaný čárový kód" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Čárový kód: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Společnosti" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Vytvořeno uživatelem" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Vytvořeno dne" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Zobrazovací název" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 na UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kódování" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Naposledy upraveno uživatelem" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Naposledy upraveno dne" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nikdy" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Systém pojmenování" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Schémata mohou také definovat způsob, kterým mohou být číselné hodnoty, jako hmotnost nebo cena\n" +" zakódovány do čárového kódu. Jsou indikovány pomocí {NNN}, kde N-ka\n" +" určují, kde jsou číslice daného čísla zakódovány. Desetinné čísla jsou také podporována, \n" +" desetiny jsou indikovány pomocí D-ček, jako {NNNDD}. V těchto případech,\n" +" pole čárového kódu na odpovídajících záznamech musí zobrazovat tyto číslice jako\n" +" nuly." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Prosím, nasnímejte znovu!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Název pravidla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravidla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvence" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabulky" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Klepnutím skenovat" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Vzor shody čárového kódu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Seznam pravidel čárového kódu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Odpovídající vzor bude alias tohoto čárového kódu" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Schéma čárového kódu %(pattern)s obsahuje chybu: pravdilo může obsahovat " +"pouze jeden pár závorek." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Schéma čárového kódu %(pattern)s obsahuje chybu: závorky mohou obsahovat " +"pouze písmena N následované písmeny D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Ve vzoru čárového kódu je syntaktická chyba %(pattern)s: prázdné závorky." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Toto pravidlo platí pouze v případě, že je čárový kód kódován zadaným " +"kódováním" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Typ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC kódy mohou být převedeny na EAN přidáním předčísla nuly. Toto nastavení " +"určuje, zda má být čárový kód UPC / EAN automaticky převeden jedním nebo " +"druhým způsobem při pokusu o shodu pravidla s jiným kódováním." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A na EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN konverze" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Jednotkový produkt" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Neznámý příkaz čárového kódu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Slouží k uspořádání pravidel tak, aby se nejprve shodovala pravidla s menší " +"sekvencí" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Hodnota posledního naskenovaného čárového kódu." diff --git a/barcodes/i18n/da.po b/barcodes/i18n/da.po new file mode 100644 index 0000000..76ead5c --- /dev/null +++ b/barcodes/i18n/da.po @@ -0,0 +1,363 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Ejner Sønniksen , 2023 +# Martin Trigaux, 2023 +# Sanne Kristensen , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Sanne Kristensen , 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Stregkode nomenklatures definere hvordan stregkoder genkendes og kategoriseres.\n" +" Når en stregkode scannes, er den forbundet med den første regel med en matchende\n" +" mønster. Mønstersyntaxen er det almindelige udtryk, og en stregkode matches\n" +" hvis det regulære udtryk matcher et præfiks for stregkoden." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"En stregkodes nomenklatur definerer, hvordan butikken identificerer og " +"fortolker stregkoder" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Tilføj en ny stregkode nomenklatur" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Altid" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "En intern identifikation af denne stregkodes nomenklature regel" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "En intern identifikation af stregkodens nomenklatur" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Enhver" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Stregkode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Stregkode Event Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Stregkode plan" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Stregkode numenklaturer" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Stregkodemønster" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Stregkode regler" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Scannet stregkode" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Virksomheder" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Oprettet af" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Oprettet den" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 til UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodning" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Sidst opdateret af" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Sidst opdateret den" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Aldrig" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklature" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Venligst, scan igen!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Regel navn" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regler" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvens" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Borde" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Tryk for at scanne" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Stregkode matchende mønster" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Listen over stregkoderegler" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Det matchede mønster vil passe til denne stregkode" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Der er en syntaks fejl i stregkode mønstret %(pattern)s: En regel kan kun " +"indeholde et par klammer." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Der er en syntaks fejl i stregkode mønstret %(pattern)s: Klammer kan kun " +"indeholde N'er efterfulgt af D'er." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Der er en syntaks fejl i stregkode mønstret %(pattern)s: Tomme klammer." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Denne regel gælder kun hvis stregkoden er kodet med den angivne kodning" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Type" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC Koder kan omdannes til EAN ved at præfiksere dem med et nul. Denne " +"indstilling bestemmer om en UPC/EAN stregkode bør konverteres automatisk til" +" den ene eller anden side, når der forsøges at matche en regel med en anden " +"indkodning." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A til EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN Konvertering" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Stk. produkt" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Bruges til at bestille regler, sådan at regler med en mindre sekvens matcher" +" først" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Værdi af den sidst scannede stregkode." diff --git a/barcodes/i18n/de.po b/barcodes/i18n/de.po new file mode 100644 index 0000000..db9ece6 --- /dev/null +++ b/barcodes/i18n/de.po @@ -0,0 +1,369 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "„*“ ist kein gültiges Regex-Barcode-Muster. Meinten Sie „.*“?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Barcode-Nomenklaturen legen fest, wie Barcodes erkannt und eingestuft werden.\n" +" Wenn ein Barcode eingelesen wird, wird er der ersten passenden Regel mit\n" +" passendem Muster zugeordnet. Die Syntax der Muster entspricht der regulärer Ausdrücke.\n" +" Ein Barcode erfüllt dann die Regel, wenn der reguläre Ausdruck mit dem Präfix des \n" +" Barcode übereinstimmt." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Eine Barcode-Nomenklatur bestimmt, wie das Kassensystem Barcodes erkennt und" +" interpretiert" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Eine neue Barcode-Nomenklatur hinzufügen" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Immer" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Ein internes Kennzeichen für diese Barcode-Nomenklatur-Regel" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Ein internes Kennzeichen für diese Barcode-Nomenklatur" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Beliebige" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode-Veranstaltungs-Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Barcode-Nomenklatur" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Barcode-Nomenklaturen" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Barcodemuster" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Barcoderegel" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Gescannter Barcode" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Barcode: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Unternehmen" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 zu UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codierung" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-Routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Niemals" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatur" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Muster können auch festlegen, wie numerische Werte, wie Gewicht und Preis\n" +" als Barcode verschlüsselt werden. Diese werden eingeleitet durch {NNN} wobei die Ns\n" +" bestimmen, wo die Ziffern geschlüsselt stehen. Gleitkommazahlen werden auch unterstützt \n" +" mit Nachkommastellen, die als Ds dargestellt, wie in {NNNDD}. In diesen Fällen\n" +" muss das Barcode-Feld oder die entsprechenden Datensätze diese Stellen als \n" +" Nullen ausweisen." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Bitte erneut scannen!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Regelbezeichnung" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regeln" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sequenz" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabellen" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Zum Scannen tippen" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Das zum Barcode passende Muster" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Die Liste der Barcode-Regeln" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Das übereinstimmende Muster wird diesen Barcode bestimmen" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Es gibt einen Syntaxfehler in den Barcode-Mustern %(pattern)s: eine Regel " +"kann nur ein Paar geschweifte Klammern enthalten." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Es gibt einen Syntaxfehler im Barcode-Muster %(pattern)s: geschweifte " +"Klammern können nur Ns gefolgt von Ds enthalten." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Es gibt einen Syntaxfehler in den Barcodemustern %(pattern)s: leere " +"Klammern." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Diese Regel greift nur, wenn der Barcode in angegebener Codierung vorliegt." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Typ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC-Codes können in EAN durch voranstellen einer Null konvertiert werden. " +"Diese Einstellung legt fest, ob diese Umwandlung automatisch, in die eine " +"oder andere Richtung, erfolgen soll, wenn nach Regelübereinstimmung der " +"jeweils anderen Codierung gesucht wird." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A zu EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN-Umwandlung" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Einheitsprodukt" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Unbekannter Barcode-Befehl" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Verwendet, um Regeln zu sortieren, sodass solche mit kleinerer Nummer zuerst" +" geprüft werden." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Wert des zuletzt gescannten Barcodes." diff --git a/barcodes/i18n/el.po b/barcodes/i18n/el.po new file mode 100644 index 0000000..ab48c51 --- /dev/null +++ b/barcodes/i18n/el.po @@ -0,0 +1,337 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Martin Trigaux, 2018 +# Kostas Goutoudis , 2018 +# Stefanos Nikou , 2018 +# Giota Dandidou , 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:49+0000\n" +"PO-Revision-Date: 2018-09-21 13:17+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Ονοματολογία Barcodes καθορίζει πως τα barcodes αναγνωρίζονται και κατηγοριοποιούνται.\n" +" Όταν γίνεται η σάρωση το barcode συσχετίζεται με τον πρώτο κανόνα με ένα αντίστοιχο\n" +" πρότυπο. Η σύνταξη των προτύπων είναι αυτή μιας κανονικής έκφραση και το barcode είναι αντίστοιχο\n" +" εάν η κανονική έκφραση ταιριάζει με το πρόθεμα του barcode." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "Μια ονοματολογία barcode καθορίζει το πώς το σημείο πώλησης εντοπίζει και ερμηνεύει barcodes" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Ψευδώνυμο" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Πάντα" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Οποιοδήποτε" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Ονοματολογίες Barcode" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Ονοματολογίες Barcode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Μοτίβο Barcode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Κανόνας Barcode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode Σαρώθηκε" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Εταιρίες" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Δημιουργήθηκε από" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Εμφάνιση Ονόματος" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Κωδικοποίηση" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "Κωδικός" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Τελευταία Ενημέρωση από" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Τελευταία Ενημέρωση στις" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Ποτέ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Όνομα Κανόνα" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Κανόνες" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Ακολουθία" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Πίνακες" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Το μοτίβο αντιστοίχισης barcode" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Η λίστα των κανόνων barcode" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Το αντιστοίχισμένο μοτίβο θα έχει ψευδώνυμο σε αυτό το barcode" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Τύπος" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Μονάδα Είδους" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "Χρησιμοποιείται για να ταξινομεί κανόνες με μια μικρότερη ακολουθία αντιστοίχισης" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Τιμή του τελευταίου barcode που σαρώθηκε." diff --git a/barcodes/i18n/es.po b/barcodes/i18n/es.po new file mode 100644 index 0000000..d6703cc --- /dev/null +++ b/barcodes/i18n/es.po @@ -0,0 +1,375 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# Larissa Manderfeld, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2024\n" +"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +" '*' no es un patrón de código de barras válido para la expresión regular. " +"¿Se refiere a'.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Las nomenclaturas de códigos de barras definen cómo se reconocen y categorizan\n" +"los códigos de barras. Cuando se escanea un código de barras se asocia a la primera\n" +"regla con un patrón coincidente. La sintaxis de los patrones es la de una expresión\n" +"regular, y un código de barras se reconoce si la expresión regular coincide con un\n" +"prefijo del código de barras." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Una nomenclatura de código de barras define cómo un punto de venta " +"identifica e interpreta los códigos de barras" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Agregar una nueva nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Siempre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Un identificador interno para esta regla de nomenclatura del código de " +"barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Un identificador interno para la nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Cualquiera" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Mixin de eventos de código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclaturas de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Patrón de código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regla de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de barras escaneado" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Código de barras:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 a UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificación" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP " + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nunca" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Los patrones también pueden definir el modo en que los valores numéricos, como el peso o el precio, pueden\n" +" codificarse en el código de barras. Estos se indican con el parámetro {NNN} donde las N\n" +" definen dónde se codifican los dígitos del número. También se admiten valores flotantes con los\n" +" decimales indicados con D, como {NNNDD}. En estos casos,\n" +" el campo de código de barras de los registros asociados debe mostrar estos dígitos como\n" +" ceros." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "¡Escanee de nuevo!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nombre de regla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Reglas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tablas" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Presione para escanear" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Patrón de concordancia para el código de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "La lista de reglas de códigos de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "El patrón de concordancia será un alias para este código de barras" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Hay un error de sintaxis en el patrón del código de barras %(pattern)s: una " +"regla solo puede contener un par de llaves." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Hay un error de sintaxis en el patrón del código de barras %(pattern)s: las " +"llaves solo pueden contener N seguido de D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Hay un error de sintaxis en el patrón del código de barras %(pattern)s: " +"llaves vacías." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regla solo aplicará si el código de barras está codificado con la " +"codificación especificada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Los códigos UPC se pueden convertir en EAN prefijándolos con un cero. Este " +"ajuste determina si un código de barras UPC/EAN debe ser convertido " +"automáticamente en uno u otro sentido al buscar una coincidencia con la otra" +" codificación." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A a EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversión UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Producto unitario" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Comando de código de barras desconocido" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Usado para ordenar reglas. Primero se busca una concordancia para reglas con" +" menor secuencia." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor del último código de barras escaneado." diff --git a/barcodes/i18n/es_419.po b/barcodes/i18n/es_419.po new file mode 100644 index 0000000..bbd500e --- /dev/null +++ b/barcodes/i18n/es_419.po @@ -0,0 +1,375 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# Fernanda Alvarez, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Fernanda Alvarez, 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +" '*' no es un patrón de código de barras Regex válido. ¿No habrá querido " +"referirse a '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Las nomenclaturas de códigos de barras definen cómo se reconocen y categorizan dichos códigos.\n" +" Cuando se escanea un código de barras, se asocia a la primera regla con un patrón\n" +" coincidente. La sintaxis del patrón es la de una expresión regular, y un código de barras se empareja\n" +" si la expresión regular coincide con el prefijo de un código de barras." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Una nomenclatura de código de barras define cómo el punto de venta " +"identifica e interpreta los códigos de barras" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Agregar una nueva nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Seudónimo" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Siempre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Un identificador interno para esta regla de nomenclatura del código de " +"barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Un identificador interno para la nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Cualquiera" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Mixin de eventos de código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura del código de barras" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclaturas de códigos de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Patrón de código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regla del código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de barras escaneado" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Código de barras:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nombre en pantalla" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 a UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificación" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nunca" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Los patrones también pueden definir el modo en que los valores numéricos, como el peso o el precio, pueden\n" +" codificarse en el código de barras. Estos se indican con el parámetro {NNN} donde las N\n" +" definen dónde se codifican los dígitos del número. También se admiten valores flotantes con los\n" +" decimales indicados con D, como {NNNDD}. En estos casos,\n" +" el campo de código de barras de los registros asociados debe mostrar estos dígitos como\n" +" ceros." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Vuelva a escanear" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nombre de la regla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Reglas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tablas" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toque para escanear" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Patrón de concordancia para el código de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Lista de reglas de códigos de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" +"El patrón de concordancia será un seudónimo para este código de barras" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Hay un error de sintaxis en el patrón del código de barras %(pattern)s: una " +"regla solo puede contener un par de llaves." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Hay un error de sintaxis en el patrón del código de barras %(pattern)s: las " +"llaves solo pueden contener N seguido de D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Hay un error de sintaxis en el patrón del código de barras %(pattern)s: las " +"llaves están vacías." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regla solo aplicará si el código de barras tiene la codificación " +"especificada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Los códigos UPC se pueden convertir a EAN al utilizar cero como su prefijo. " +"Este ajuste determina si un código de barras UPC/EAN se debe convertir " +"automáticamente en uno u otro sentido al buscar una coincidencia de regla " +"con la otra codificación." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A a EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversión UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Producto unitario" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Comando de código de barras desconocido" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Se utiliza para ordenar reglas, de esta forma las reglas con una secuencia " +"menor se emparejan primero" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor del último código de barras escaneado." diff --git a/barcodes/i18n/es_CL.po b/barcodes/i18n/es_CL.po new file mode 100644 index 0000000..6e7ec13 --- /dev/null +++ b/barcodes/i18n/es_CL.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Spanish (Chile) (https://www.transifex.com/odoo/teams/41243/es_CL/)\n" +"Language: es_CL\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/et.po b/barcodes/i18n/et.po new file mode 100644 index 0000000..83bbf44 --- /dev/null +++ b/barcodes/i18n/et.po @@ -0,0 +1,377 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Patrick-Jordan Kiudorv, 2023 +# Algo Kärp , 2023 +# JanaAvalah, 2023 +# Arma Gedonsky , 2023 +# Eneli Õigus , 2023 +# Rivo Zängov , 2023 +# Leaanika Randmets, 2023 +# Piia Paurson , 2023 +# Triine Aavik , 2023 +# Egon Raamat , 2023 +# Katrin Kampura, 2023 +# Tairi Tiimann, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tairi Tiimann, 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +" '*' ei ole kehtiv Regex-koodimustriga triipkood. Kas mõtlesite '.*' ?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Triipkoodi nomenklatuur määra kuidas triipkoodid tuvastatakse ja kategoriseeritakse.\n" +" Kui triipkood skaneeritakse siis seostatakse see esimese reegliga, millega muster ühtib. Muster süntaks on regulaaravaldis ja triipkood võrreldakse\n" +" siis kui regulaaravaldise algus kattuvad." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Triipkoodi nimistu määrab kuidas kassa identifitseerib ja tõlgendab " +"triipkoode" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Lisa uus triipkoodi nimistu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Alati" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Sisemine identifikaator selle triipkoodi nimistiku reeglile" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Sisemine identifikaator selle triipkoodi nimistikule" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Vähemalt üks" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Triipkood" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Triipkoodi sündmus Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Triipkoodi nomenklatuur" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Triipkoodi nimekirjad" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Triipkoodi muster" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Triipkoodi reegel" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Triipkood loetud" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Triipkood: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Ettevõtted" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Loodud (kelle poolt?)" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Loodud" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Kuvatav nimi" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13'st UPC-A'ks" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodeerimine" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Viimati uuendatud" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Viimati uuendatud" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Mitte kunagi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nimestik" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Mustrid võivad samuti määrata, kuidas numbrilisi väärtusi, nagu kaal või hind,\n" +" triipkoodi kodeeritakse. Need on kujul {NNN}, kus N-id määratlevad\n" +" kuhu numbrikoode kirjutatakse. Liikuva komaga arvud on samutit toetatud\n" +" määratledes kohad koma jaoks D-dega, näiteks {NNNDD}. Sellistel juhtudel,\n" +" seotud kirjete triipkoodiväli peab näitama neid numbrimärke\n" +" nullidena." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Palun skaneerige uuesti!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Reegli nimi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Reeglid" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Jada" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabelid" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Puuduta skaneerimiseks" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Triipkood, mis vastab mustrile" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Triipkoodi reeglite nimekiri" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Leitud muster vastab sellele triipkoodile" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Triipkoodi mustris on süntaksi viga %(pattern)s: reegel võib sisaldada " +"ainult ühte paari." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Triipkoodi mustris on süntaksi viga %(pattern)s: väljad võivad sisaldada " +"ainult N-sid, millele järgnevad D-d." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "Triipkoodi mustris on süntaksi viga %(pattern)s: tühjad väljad." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"See reegel kehtib ainult siis kui triipkood on kodeeritud määratud " +"kodeeringuga" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tüüp" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC-koode saab muuta EAN-iks lisades neile nulli. See seade määrab, kas UPC " +"/ EAN-i vöötkoodi tuleks ühel või teisel viisil automaatselt teisendada, kui" +" püütakse reegli vastavusse viia teise kodeeringuga." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A'st EAN-13'ks" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN konverteerimine" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Ühiktoode" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Tundmatu triipkoodi käsk" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Kasutatakse reeglite järjestamiseks, nii et väikse järjestusega reeglid " +"vastavad kõigepealt" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Viimase skaneeritud triipkoodi väärtus." diff --git a/barcodes/i18n/eu.po b/barcodes/i18n/eu.po new file mode 100644 index 0000000..cd92576 --- /dev/null +++ b/barcodes/i18n/eu.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Basque (https://www.transifex.com/odoo/teams/41243/eu/)\n" +"Language: eu\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Nork sortua" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Created on" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Izena erakutsi" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekuentzia" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/fa.po b/barcodes/i18n/fa.po new file mode 100644 index 0000000..314be54 --- /dev/null +++ b/barcodes/i18n/fa.po @@ -0,0 +1,358 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Ali Reza Feizi Derakhshi, 2023 +# Hamid Darabi, 2023 +# Yousef Shadmanesh , 2023 +# Hamed Mohammadi , 2023 +# سید محمد آذربرا , 2023 +# Martin Trigaux, 2023 +# Mohsen Mohammadi , 2023 +# Hanna Kheradroosta, 2023 +# Mostafa Barmshory , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Mostafa Barmshory , 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "\"*\" یک الگوی بارکد Regex معتبر نیست. منظورت این بود '.*'؟" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "نام بارکد نحوه شناسایی و تفسیر بارکدها توسط نقطه فروش را مشخص می کند" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "یک نامگذاری بارکد جدید اضافه کنید" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "مستعار" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "همیشه" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "یک شناسه داخلی برای این قانون نامگذاری بارکد" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "شناسایی داخلی نامگذاری بارکد" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "هر" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "بارکد" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "میکس رویداد بارکد" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "نامگذاری بارکد" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "نامگذاری بارکد" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "الگوی بارکد" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "قانون بارکد" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "بارکد اسکن شده" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "بارکد:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "شرکت‌ها" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "ایجادشده در" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "نام نمایش داده شده" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 to UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "رمزگذاری" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "مسیریابی HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "شناسه" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "آخرین بروز رسانی توسط" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "آخرین بروز رسانی در" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "هرگز" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "نامگذاری" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "لطفا، دوباره اسکن کنید!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "نام قاعده" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "قواعد" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "دنباله" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "جداول" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "برای اسکن ضربه بزنید" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "الگوی تطبیق بارکد" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "لیست قوانین بارکد" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "الگوی مطابق با این بارکد نام مستعار خواهد داشت" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"این قانون فقط در صورتی اعمال می شود که بارکد با کدگذاری مشخص شده کدگذاری شده" +" باشد" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "نوع" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"کدهای UPC را می توان با قرار دادن یک پیشوند با صفر به EAN تبدیل کرد. این " +"تنظیم تعیین می‌کند که آیا یک بارکد UPC/EAN باید به‌طور خودکار در زمان تطبیق " +"یک قانون با رمزگذاری دیگر، به‌صورت خودکار تبدیل شود یا خیر." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A to EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "تبدیل UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "محصول واحد" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "فرمان بارکد ناشناخته" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"برای نظم دادن به قوانین به گونه ای استفاده می شود که ابتدا قوانین با دنباله " +"کوچکتر مطابقت داشته باشند" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "مقدار آخرین بارکد اسکن شده" diff --git a/barcodes/i18n/fi.po b/barcodes/i18n/fi.po new file mode 100644 index 0000000..bec35ca --- /dev/null +++ b/barcodes/i18n/fi.po @@ -0,0 +1,375 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Retropikzel, 2023 +# Jarmo Kortetjärvi , 2023 +# Eino Mäkitalo , 2023 +# Tuomo Aura , 2023 +# Martin Trigaux, 2023 +# Kari Lindgren , 2023 +# Tuomas Lyyra , 2023 +# Marko Happonen , 2023 +# Veikko Väätäjä , 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:55+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' ei ole kelvollinen Regex-viivakoodikuvio. Tarkoititko '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Viivakoodit nimikkeistöissä määritellään, miten viivakoodit tunnistetaan ja luokitellaan.\n" +" Kun viivakoodi skannataan, se liitetään ensimmäiseen sääntöön, jolla on vastaava viivakoodi.\n" +" Kuvion syntaksi on regexp-lauseke, ja viivakoodia vastataan seuraavasti\n" +" jos regexp vastaa viivakoodin etuliitettä." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Viivakoodinimikkeistö määrittelee, miten kassa tunnistaa ja tulkitsee " +"viivakoodit" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Lisää uusi viivakoodinimikkeistö" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Aina" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Tätä viivakoodinimikkeistön sääntöä koskeva sisäinen tunniste" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Viivakoodin nimikkeistön sisäinen tunniste" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Mikä tahansa" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Viivakoodi" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Viivakoodi tapahtuman Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Viivakoodi nimistö" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Viivakoodi nimistö" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Viivakoodi malli" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Viivakoodi sääntö" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Viivakoodi skannattu" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Viivakoodi: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Yritykset" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Luonut" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Luotu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Näyttönimi" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13-koodista UPC-A-koodiksi" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Koodaus" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-reititys" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Ei koskaan" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nimikkeistö" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Kuviot voivat myös määritellä, miten numeeriset arvot, kuten paino tai hinta, voidaan olla\n" +" koodata viivakoodiin. Ne osoitetaan {NNN} jossa N:t\n" +" määrittelevät, mihin numeron numerot koodataan. Liukulukuja on myös mahdollista käyttää kirjoittamalla\n" +" desimaaleja, jotka on merkitty D-kirjaimilla. Esimerkiksi {NNNDD}. Näissä tapauksissa,\n" +" tietueiden viivakoodikentän on näytettävä nämä numerot\n" +" nollina." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Skannaa uudelleen!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Säännön nimi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Säännöt" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Järjestys" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Pöydät" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Skannaa" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Viivakoodin vastaavuusmalli" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Luettelo viivakoodisäännöistä" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Sovitettu kuvio on alias tälle viivakoodille" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Viivakoodikuviossa %(pattern)s on syntaksivirhe: sääntö voi sisältää vain " +"yhden aaltosuljeparin." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Viivakoodikuviossa %(pattern)s on syntaksivirhe: suluissa voi olla vain " +"N-kirjaimia, joita seuraa D-kirjain." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "Viivakoodikuviossa %(pattern)s on syntaksivirhe: tyhjät sulkeet." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Tätä sääntöä sovelletaan vain, jos viivakoodi on koodattu määritetyllä " +"koodauksella" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tyyppi" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC-koodit voidaan muuntaa EAN-koodeiksi lisäämällä niiden eteen nolla. Tämä" +" asetus määrittää, muunnetaanko UPC/EAN-viivakoodi automaattisesti tavalla " +"tai toisella, kun yritetään sovittaa sääntöä toiseen koodaukseen." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "Käytä UPC:tä" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A:sta EAN-13:a" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN-muunnos" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Yksikkötuote" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Tuntematon viivakoodikomento" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Järjestetään säännöt siten, että pienemmän sekvenssin omaavat säännöt " +"täsmäävät ensin" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Viimeksi skannatun viivakoodin arvo." diff --git a/barcodes/i18n/fo.po b/barcodes/i18n/fo.po new file mode 100644 index 0000000..b0624b6 --- /dev/null +++ b/barcodes/i18n/fo.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Faroese (https://www.transifex.com/odoo/teams/41243/fo/)\n" +"Language: fo\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Byrjað av" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Byrjað tann" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Vís navn" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Seinast dagført av" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Seinast dagført tann" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/fr.po b/barcodes/i18n/fr.po new file mode 100644 index 0000000..7284e0e --- /dev/null +++ b/barcodes/i18n/fr.po @@ -0,0 +1,372 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +" '*' n'est pas un modèle de code-barres Regex valide. Vouliez-vous dire '.*'" +" ?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"La nomenclature des codes-barres définit comment les codes-barres sont reconnus et catégorisés.\n" +" Lorsqu'un code-barre est scanné, il est associé à la première règle avec un modèle \n" +"correspondant. La syntaxe du modèle est celui de l'expression régulière et un code-barre est associé\n" +" si l'expression régulière correspond à un préfixe du code-barre." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Une nomenclature des codes-barres définit la façon dont le point de vente " +"identifie et interprète le code barre." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Ajouter une nouvelle nomenclature des codes-barres" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Toujours" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Une identification interne pour cette règle de nomenclature des codes-barres" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Un identifiant interne de la nomenclature des codes-barres" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Au moins un" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Code-barres" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Code-barre Événement Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclature des codes-barres" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclatures des codes-barres" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Modèle de code-barres" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Règle de code-barres" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Code barre scanné" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Code-barres :" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 vers UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Encodage" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Routage HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Jamais" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclature" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Les modèles peuvent aussi définir comment les valeurs numériques telles que le poids ou le prix, peuvent être\n" +" encodées dans le code-barres. Ils sont indiqués par {NNN} où les N\n" +" définissent où les chiffres du nombre sont encodés. Les nombres flottants sont également pris en charge avec les\n" +" décimales indiquées avec les D, comme {NNNDD}. Dans ces cas,\n" +" le champ du code-barres sur les enregistrements associés doit afficher ces chiffres comme\n" +" des zéros." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Veuillez scanner à nouveau !" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nom de la règle" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Règles" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tables" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toucher pour scanner" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Le code-barres correspondant au modèle" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Liste des règles des codes-barres" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Le motif correspondant sera un alias pour ce code-barres" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Il y a une erreur de syntaxe dans le modèle de code-barres %(pattern)s: une " +"règle ne peut contenir qu'une paire d'accolades." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"%(pattern)sIl y a une erreur de syntaxe dans le modèle de code-barres : les " +"accolades ne peuvent contenir que des N suivis par des D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Il y a une erreur de syntaxe dans le modèle de code-barres %(pattern)s : " +"accolades vides" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Cette règle s'appliquera uniquement si le code-barres est encodé avec " +"l'encodage spécifié" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Type" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Les codes UPC peuvent être converti en EAN en mettant un zéro comme préfixe." +" Ce réglage détermine si un code-barres UPC/EAN devrait être automatiquement" +" converti dans un sens ou dans l'autre en faisant correspondre une règle " +"avec l'autre encodage." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A vers EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversion UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Unité de produit" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Commande de code-barres inconnue" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Utilisé pour commander des règles de manière à ce que les règles avec une " +"séquence similaire correspondent en premier" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valeur du dernier code-barres scanné." diff --git a/barcodes/i18n/fr_BE.po b/barcodes/i18n/fr_BE.po new file mode 100644 index 0000000..7237757 --- /dev/null +++ b/barcodes/i18n/fr_BE.po @@ -0,0 +1,328 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Odoo 9.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2016-03-18 08:46+0000\n" +"Last-Translator: Martin Trigaux\n" +"Language-Team: French (Belgium) (http://www.transifex.com/odoo/odoo-9/language/fr_BE/)\n" +"Language: fr_BE\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Derniere fois mis à jour par" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Dernière mis à jour le" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Type" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/fr_CA.po b/barcodes/i18n/fr_CA.po new file mode 100644 index 0000000..e8a5c80 --- /dev/null +++ b/barcodes/i18n/fr_CA.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: French (Canada) (https://www.transifex.com/odoo/teams/41243/fr_CA/)\n" +"Language: fr_CA\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "Identifiant" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Séquence" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/gl.po b/barcodes/i18n/gl.po new file mode 100644 index 0000000..b1483c5 --- /dev/null +++ b/barcodes/i18n/gl.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Galician (https://www.transifex.com/odoo/teams/41243/gl/)\n" +"Language: gl\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Creado o" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/gu.po b/barcodes/i18n/gu.po new file mode 100644 index 0000000..24401b0 --- /dev/null +++ b/barcodes/i18n/gu.po @@ -0,0 +1,330 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Qaidjohar Barbhaya, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:45+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Always" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Companies" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Created by" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Created on" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Never" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "નિયમો" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sequence" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Type" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/he.po b/barcodes/i18n/he.po new file mode 100644 index 0000000..e132638 --- /dev/null +++ b/barcodes/i18n/he.po @@ -0,0 +1,355 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Roy Sayag, 2023 +# Lilach Gilliam , 2023 +# Yihya Hugirat , 2023 +# Martin Trigaux, 2023 +# דודי מלכה , 2023 +# ZVI BLONDER , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: ZVI BLONDER , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"מונחי ברקוד מגדירים כיצד ברקודים מזוהים ומסווגים.\n" +" כאשר ברקוד נסרק הוא משויך ל כלל ראשון עם תבנית התאמה\n" +" . תחביר התבנית הוא של ביטוי רגיל ומתאים לברקוד\n" +" אם הביטוי הרגיל תואם לקידומת של הברקוד." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "מונחי ברקוד מגדירים כיצד נקודת המכירה מזהה ומפרשת ברקודים" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "הוסף קידומת ברקוד חדשה" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "כינוי" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "תמיד" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "מזהה פנימי עבור כלל מונח ברקוד זה " + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "מזהה פנימי של מונחי הברקוד" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "כל" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "ברקוד" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "ערבוב אירועי ברקוד" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "מונחי ברקוד" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "מונחי ברקוד" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "תבנית ברקוד" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "כלל ברקוד" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "ברקוד נסרק" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "חברות" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "נוצר על-ידי" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "שם לתצוגה" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 ל- UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "קידוד" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "ניתוב HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "מזהה" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על-ידי" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "עדכון אחרון ב" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "אף פעם" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "מונחים" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "שם כלל" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "כללים" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "רצף" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "שולחנות" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "לחץ כדי לסרוק" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "תבנית התאמת ברקוד" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "רשימת כללי ברקוד" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "התבנית המותאמת תהיה כינוי לברקוד זה" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "כלל זה יחול רק אם הברקוד מקודד בקידוד שצוין" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "סוג" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"קודי UPC ניתן להמיר ל EAN על ידי הצבת אפסים לפני הברקוד. הגדרה זו קובעת אם " +"יש להמיר באופן אוטומטי ברקוד UPC / EAN בדרך זו או אחרת בעת ניסיון להתאים כלל" +" לקידוד האחר." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A ל- EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "המרה UPC/EAN " + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "יחידת מוצר " + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "משמש לסידור חוקים כך שחוקים עם רצף קטן יותר יתאימו קודם" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "הערך של הברקוד האחרון שנסרק." diff --git a/barcodes/i18n/hr.po b/barcodes/i18n/hr.po new file mode 100644 index 0000000..2a5bbd8 --- /dev/null +++ b/barcodes/i18n/hr.po @@ -0,0 +1,334 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Ivica Dimjašević , 2022 +# Martin Trigaux, 2022 +# Vojislav Opačić , 2022 +# Karolina Tonković , 2022 +# Bole , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:45+0000\n" +"Last-Translator: Bole , 2022\n" +"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Dodavanje nove barkod nomenklature" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Uvijek" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Interni identifikator barkod nomenklature" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Bilokoji" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Barkod nomenklatura" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Barkod nomenklature" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Barkod uzorak" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Barkod pravilo" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barkod čitač" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Barkod: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Tvrtke" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 u UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodna stranica:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP usmjeravanje" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Promijenio" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Vrijeme promjene" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nikad" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatrua" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Naziv pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvenca" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tablice" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Uzorak barkoda za validaciju" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Popis pravila barkodova" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "Ovo pravilo će se primjeniti jedino ako je barcod u specifičnom formatu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Vrsta" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A u EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN Konverzija" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Jedinica proizvoda" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "Koristi se za redoslijed pravila tako da pravilo s manjom sekvencom primjeni prije" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Vrijednost posljednjeg skeniranog barkoda." diff --git a/barcodes/i18n/hu.po b/barcodes/i18n/hu.po new file mode 100644 index 0000000..894d6a4 --- /dev/null +++ b/barcodes/i18n/hu.po @@ -0,0 +1,361 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Tamás Dombos, 2023 +# Ákos Nagy , 2023 +# Tamás Németh , 2023 +# Martin Trigaux, 2023 +# gezza , 2023 +# Daniel Gerstenbrand , 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:55+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Vonalkód nómenklatúrák határozzák meg, hogy a vonalkódokat hogyan ismerje fel és kategorizálja.\n" +" Ha egy vonalkódot beszkennelt akkor azt összekapcsolja az első szabály egyező\n" +" mintájával. A minta felépítés egy általános kifejezés, és egy vonalkód egyezik, \n" +" ha az alap kifejezés egyezik a vonalkód előtaggal." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Egy vonalkód nomenklatúra határozza meg azt, hogy az értékesítési pont " +"kasszája hogyan azonosítja és fordítja le a vonalkódokat" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Új vonalkó nómenklatúra hozzáadása" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Álnév" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Mindig" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Ennek a vonalkód nomenklatúra szabálynak egy belső azonosítója" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Vonalkód nomenklatúra belső azonosítója" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Bármely" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Vonalkód" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Vonalkód nómenklatúra" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Vonalkód nómenklatúrák" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Vonalkód minta" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Vonalkód szabály" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Vonalkód leolvasva" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Vállalatok" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Létrehozta" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Létrehozva" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Megjelenített név" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 -> UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kódolás" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP irányítás" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "Azonosító" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Frissítette" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Frissítve" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Soha" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nómenklatúra" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Szabály neve" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Szabályok" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sorszám" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Asztalok" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Érintse meg a beolvasáshoz" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "A vonalkóddal egyező minta" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Vonalkód szabályok listája" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Ennek a vonalkódnak az egyező mintája lesz az álneve" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ezt a szabályt csak egyedi szabállyal létrehozott vonalkódra alkalmazza" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Típus" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC kódok átkonvertálhatóak EAN kóddá egy nullás előtaggal. Ez a beállítás " +"határozza meg a UPC/EAN vonalkód egyik vagy másik módszerrel történő " +"automatikus átalakításának lehetőségét amint a másik átalakítási szabállyal " +"megpróbálja összevetni a mintát." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A -> EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN átváltó" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Mértékegység termék" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Szabályok rendbetételéhez használja, mint a kisebb sorrendű az első találat" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Utoljára beszkennelt vonalkód értéke." diff --git a/barcodes/i18n/hy.po b/barcodes/i18n/hy.po new file mode 100644 index 0000000..154dc77 --- /dev/null +++ b/barcodes/i18n/hy.po @@ -0,0 +1,339 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/id.po b/barcodes/i18n/id.po new file mode 100644 index 0000000..a7eece2 --- /dev/null +++ b/barcodes/i18n/id.po @@ -0,0 +1,368 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +" '*' tidak merupakan Regex Barcode Pattern yang valid. Apakah maksud Anda " +"adalah '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Tata Nama Barcode menentukan bagaimana barcode dikenali dan dikategorikan.\n" +" Saat barcode di-scan barcode akan dihubungkan dengan peraturan pertama dalam pencocokkan\n" +" pola. Syntax pola adalah expression reguler, dan barcode akan cocok\n" +" bila expression reguler cocok dengan prefix barcode." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Tata nama barcode mendefinisikan bagaimana POS mengidentifikasi dan " +"menafsirkan barcode" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Tambahkan tata nama barcode baru" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Selalu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Identifikasi internal untuk peraturan tata nama barcode ini" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Identifikasi internal untuk tata nama barcode ini" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Banyak" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode Event Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Tatanama Barcode" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Tatanama Barcode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Pola Barcode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Peraturan Barcode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode telah dipindai" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Barcode:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Perusahaan" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Dibuat oleh" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Dibuat pada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 ke UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Enkode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Terakhir Diperbarui oleh" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Terakhir Diperbarui pada" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Tidak pernah" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Tata Nama" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Pola juga dapat mendefinisikan nilai numerik, seperti bobot atau harga, yang dapat\n" +" di-encode ke barcode. Mereka ditunjukkan melalui {NNN} dimana N\n" +" mendefinisikan di mana angka di-encode. Float juga didukung dengan\n" +" desimal melalui huruf D, seperti {NNNDD}. Pada kasus seperti ini,\n" +" field barcode pada record yang terkait harus menunjukkan digit-digit ini sebagai\n" +" nol." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Tolong Scan lagi!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Aturan nama" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Aturan" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Urutan" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabel" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Sentuh untuk memindai" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Pola barcode cocok" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Daftar peraturan barcode" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Pola yang cocok dengan alias ke barcode ini" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Terdapat syntax error di pola barcode %(pattern)s: peraturan hanya dapat " +"memiliki satu pair of braces." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Terdapat syntax error di pola barcode %(pattern)s: braces hanya dapat " +"memiliki N diikuti D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "Terdapat syntax error di pola barcode %(pattern)s: braces kosong." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Kaidah ini hanya akan diterapkan jika barcode dikodekan dengan pengkodean " +"tertentu." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Jenis" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Kode UPC dapat dikonversi menjadi EAN dengan mengawali mereka dengan nol. " +"Pengaturan ini menentukan apakah barcode UPC/EAN harus secara otomatis " +"dikonversi saat melakukan pencocokkan peraturan dengan encode lain." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A ke EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Konversi UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Produk Satuan" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Command Barcode Tidak Diketahui" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Digunakan untuk mengurutkan kaidah sehingga kaidah dengan urutan terkecil " +"dicocokkan pertama kali" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Nilai barcode yang terakhir dipindai." diff --git a/barcodes/i18n/is.po b/barcodes/i18n/is.po new file mode 100644 index 0000000..364e402 --- /dev/null +++ b/barcodes/i18n/is.po @@ -0,0 +1,343 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Kristófer Arnþórsson, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Kristófer Arnþórsson, 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Fyrirtæki" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Búið til af" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Búið til þann" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Birtingarnafn" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "Auðkenni (ID)" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Síðast uppfært af" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Síðast uppfært þann" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Röð" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/it.po b/barcodes/i18n/it.po new file mode 100644 index 0000000..daaac96 --- /dev/null +++ b/barcodes/i18n/it.po @@ -0,0 +1,371 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +"\"*\" non è uno modello di espressione regolare valido per un codice a " +"barre. Intendevi \".*\"?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Le nomenclature codici a barre definiscono il modo in cui i codici a barre vengono riconosciuti e catalogati.\n" +" Al momento della scansione il codice a barre viene associato alla prima regola che rispetta\n" +" la sintassi. La sintassi corrisponde a un'espressione regolare, e il codice a barre è collegato\n" +" se l'espressione regolare corrisponde al prefisso del codice a barre." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Una nomenclatura codice a barre definisce come il punto vendita identifica e" +" interpreta i codici a barre" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Aggiungere una nuova nomenclatura codice a barre" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Sempre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Un identificativo interno per questa regola di nomenclatura codice a barre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Un identificativo interno della nomenclatura codici a barre" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Qualsiasi" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Codice a barre" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode Event Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura codice a barre" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclature codici a barre" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Modello codice" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regola codice a barre" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Codice letto" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Codice a barre:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Data creazione" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 a UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codifica" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Instradamento HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Mai" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"I modelli possono anche definire il modo in cui i valori numerici come il peso e il prezzo possono essere\n" +" codificati nel codice a barre. I valori sono indicati da {NNN} dove i caratteri N\n" +" definiscono dove sono codificate le cifre del numero. Sono supportati anche i numeri a virgola mobile\n" +" con i decimali indicati dai caratteri D, come {NNNDD}. In questi casi,\n" +" il campo codice a barre nei record associati deve mostrare queste cifre come\n" +" zeri." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Per favore, scansiona di nuovo!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nome regola" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regole" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabelle" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Tocca per acquisire" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Il modello di corrispondenza del codice a barre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Elenco delle regole codici a barre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Il modello corrispondente sarà l'alias di questo codice a barre" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"C'è un errore di sintassi nello schema del codice a barre %(pattern)s: una " +"regola può contenere solo una coppia di parentesi." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"C'è un errore di sintassi nello schema del codice a barre %(pattern)s: le " +"parentesi possono contenere solo N seguite da D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"C'è un errore di sintassi nello schema del codice a barre%(pattern)s: " +"parentesi vuote." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Questa regola verrà applicata solo se il codice rispetta la codifica " +"specificata" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipologia" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"I codici UPC possono essere convertiti a EAN anteponendo uno zero. Questa " +"impostazione determina se un codice UPC/EAN debba essere convertito " +"automaticamente quando viene applicata una delle due codifiche." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A a EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversione UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Prodotto unitario" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Comando codice a barre sconosciuto" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Utilizzato per ordinare le regole, come trovare prima le regole con una " +"sequenza piccola" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valore dell'ultimo codice a barre scansionato." diff --git a/barcodes/i18n/ja.po b/barcodes/i18n/ja.po new file mode 100644 index 0000000..46f22e5 --- /dev/null +++ b/barcodes/i18n/ja.po @@ -0,0 +1,353 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' は有効な正規表現バーコードパターンではありません。意図されているのは、以下ですか:'.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"バーコード表現規則 はバーコードがどのように認識され、分類されるかを定義します。\n" +"バーコードスキャン時に、パターンが合致する規則のうち 一番始めのもの を採用します。\n" +"パターンシンタックスは正規表現です。正規表現がバーコードのプレフィクスに一致することをもち、バーコードが規則に合致すると判断します。" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "バーコード表現規則は、販売時点管理がどのようにバーコードを識別し解釈するかを定義します" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "新しいバーコード表現規則を追加" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "エイリアス" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "常に可能" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "このバーコード表現規則の内部識別" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "このバーコード表現規則の内部識別" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "どれでも" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "バーコード" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "バーコードイベントMixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "バーコード表現規則" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "バーコード表現規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "バーコードパターン" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "バーコード規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "スキャンされたバーコード" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "バーコード: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "会社" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "作成日" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "JAN/EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "JAN/EAN-13からUPC-Aに変換" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "JAN/EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "エンコード" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTPルーティング" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "しない" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "体系" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"パターンは重量や価格などの数値がバーコードにどのようにエンコードされるかも\n" +" 定義することができます。それらパターンは {NNN}のように表現され、\n" +"        N は数字の桁をエンコードする場所を定義します。小数点が D で示される\n" +" 例えば {NNNDD}浮動小数点もサポートされています。これらの場合、\n" +" 関連するレコードのバーコードフィールドはこれらの数値をゼロとして示す必要があります。" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "もう一度スキャンして下さい。" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "規則名" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "シーケンス" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "テーブル" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "タップしてスキャン" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "バーコードマッチングパターン" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "バーコード規則のリスト" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "一致したパターンはこのバーコードにエイリアスします" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "バーコードパターン%(pattern)sにシンタックスエラーがあります: 1 つの規則には中括弧を 1 組しか含めることができません。" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "バーコードパターン %(pattern)sにシンタックスエラーがあります: 中括弧には後にD'sが続くN'sのみ含むことができます。" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "バーコードパターン%(pattern)sにシンタックスエラーがあります: 中括弧が空です。" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "この規則は、バーコードが指定されたエンコーディングでエンコードされている場合にのみ適用されます" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "タイプ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPCコードは、プレフィックスとしてゼロを付けてJAN/EANに変換できます。 この設定では、ある規則と他のエンコーディングを一致させるときにUPC " +"/EANバーコードを自動的に変換するかどうかを決定します。" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-AからEAN-13に変換" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN変換" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "個数管理品" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "不明なバーコードコマンド" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "より小さな付番規則が最初に一致するように規則を順序付けするために使用されます" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "最後にスキャンされたバーコードの値。" diff --git a/barcodes/i18n/ka.po b/barcodes/i18n/ka.po new file mode 100644 index 0000000..5a40b80 --- /dev/null +++ b/barcodes/i18n/ka.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Georgian (https://www.transifex.com/odoo/teams/41243/ka/)\n" +"Language: ka\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "შემქმნელი" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "შექმნის თარიღი" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "სახელი" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "იდენტიფიკატორი" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "ბოლოს განაახლა" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "ბოლოს განახლებულია" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "მიმდევრობა" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/kab.po b/barcodes/i18n/kab.po new file mode 100644 index 0000000..e6144a7 --- /dev/null +++ b/barcodes/i18n/kab.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Kabyle (https://www.transifex.com/odoo/teams/41243/kab/)\n" +"Language: kab\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Yerna-t" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Yerna di" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "Asulay" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Aleqqem aneggaru sɣuṛ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Aleqqem aneggaru di" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Agzum" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/km.po b/barcodes/i18n/km.po new file mode 100644 index 0000000..3b1980d --- /dev/null +++ b/barcodes/i18n/km.po @@ -0,0 +1,330 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Sengtha Chay , 2018 +# Chan Nath , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2018-09-21 13:17+0000\n" +"Last-Translator: Chan Nath , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "ក្រុមហ៊ុន" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "បង្កើតដោយ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "បង្កើតនៅ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "លំដាប់" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "ប្រភេទ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/ko.po b/barcodes/i18n/ko.po new file mode 100644 index 0000000..dc2158e --- /dev/null +++ b/barcodes/i18n/ko.po @@ -0,0 +1,355 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "'*' 항목은 유효한 정규식 바코드 패턴이 아닙니다. '.*' 항목을 찾으시나요?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"바코드 명칭은 바코드가 인식되고 분류되는 방법을 정의합니다.\n" +" 바코드를 스캔할 경우 패턴과 일치하는 첫 번째 규칙으로 연결됩니다.\n" +" 패턴 구문은 정규 표현식의 구문이며\n" +" 정규 표현식이 바코드의 접두사와 일치하면 바코드가 일치합니다." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "바코드 명칭을 통해 POS에서 바코드를 식별하고 해석하는 방법을 정의합니다." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "새로운 바코드 명칭 추가" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "별칭" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "항상" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "바코드 명명 규칙에 대한 내부 ID" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "바코드 명명법에 대한 내부 ID" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "또는" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "바코드" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "바코드 이벤트 혼합" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "바코드 명칭" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "바코드 명명법" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "바코드 패턴" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "바코드 규칙" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "바코드 스캔됨" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "바코드:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "회사" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "작성자" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "작성일자" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "표시명" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13에서 UPC-A로" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "인코딩" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 라우팅" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "최근 갱신한 사람" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "최근 갱신 일자" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "하지 않음" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "명명법" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"패턴을 이용하여 또한 중량이나 가격과 같은 숫자 값을 바코드에 인코딩하는 방법도\n" +" 지정할 수 있습니다. 표시 방식은 {NNN}와 같으며 여기에서 N은\n" +" 숫자의 자릿수가 인코딩되는 위치를 나타냅니다. 변동값도 마찬가지로 지원되며\n" +" D로 나타내는 십진수에서도, {NNNDD}와 같이 표시됩니다. 이러한 경우,\n" +" 연결된 레코드의 바코드 필드에 반드시 해당 숫자가 0으로 표시되어야\n" +" 합니다." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "다시 스캔하세요!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "규칙 이름" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "규칙" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "순서" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "표" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "탭하여 스캔" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "바코드 일치 패턴" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "바코드 규칙 목록" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "일치하는 패턴이 이 바코드의 별칭이 됩니다." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "바코드 규칙 %(pattern)s에 구문 오류가 있습니다: 괄호는 한 쌍만 포함할 수 있습니다. " + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "바코드 규칙 %(pattern)s에 구문 오류가 있습니다: 괄호 내 N 다음에는 D 가 반드시 포함되어야 합니다." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "바코드 규칙 %(pattern)s에 구문 오류가 있습니다: 괄호 내용이 없습니다." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "이 규칙은 바코드가 지정된 인코딩으로 인코딩된 경우에만 적용됩니다." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "유형" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC 코드 앞에 0을 붙여 EAN로 변환 할 수 있습니다. 이 설정은 규칙을 다른 인코딩과 일치 시키려고 할 때 UPC/EAN 바코드가" +" 한 방향으로 또는 다른 방식으로 자동 변환되어야 하는지 여부를 결정합니다." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A에서 EAN-13 " + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN 변환" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "품목 단위" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "알 수 없는 바코드 명령" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "작은 순서로 일치하는 것이 우선하도록 규칙을 정렬하는 데 사용됩니다." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "가장 최근에 스캔한 바코드 값입니다." diff --git a/barcodes/i18n/lb.po b/barcodes/i18n/lb.po new file mode 100644 index 0000000..01c3a21 --- /dev/null +++ b/barcodes/i18n/lb.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2019-08-26 09:09+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/lo.po b/barcodes/i18n/lo.po new file mode 100644 index 0000000..c1af34c --- /dev/null +++ b/barcodes/i18n/lo.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Language-Team: Lao (https://www.transifex.com/odoo/teams/41243/lo/)\n" +"Language: lo\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/lt.po b/barcodes/i18n/lt.po new file mode 100644 index 0000000..37d82eb --- /dev/null +++ b/barcodes/i18n/lt.po @@ -0,0 +1,363 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Arunas V. , 2023 +# UAB "Draugiški sprendimai" , 2023 +# Audrius Palenskis , 2023 +# digitouch UAB , 2023 +# Martin Trigaux, 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:55+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Brūkšninio kodo terminologija nustato, kaip yra atskiriami ir kategorizuojami brūkšniniai kodai.\n" +"Kai brūkšninis kodas nuskaitomas, jis yra susiejamas su pirmąja \n" +"sutampančia struktūros taisykle. Struktūros sintaksė yra standartinės išraiškos, o brūkšninis\n" +"kodas yra susiejamas, jei standartinė išraiška sutampa su brūkšninio kodo\n" +"priešdėliu." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Brūkšninio kodo terminologija nustato, kaip pardavimo taškas identifikuoja " +"ir interpretuoja brūkšninius kodus" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Pridėjo naują brūkšninio kodo terminologiją" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Pseudonimas" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Visada" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Vidinė identifikacija šiai brūkšninio kodo terminologijos taisyklei" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Vidinė identifikacija šiai brūkšninio kodo terminologijai" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Bet koks" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Brūkšninis kodas" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Brūkšninio kodo renginio Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Brūkšninio kodo terminologija" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Brūkšninio kodo terminologijos" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Brūkšninio kodo struktūra" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Brūkšninio kodo taisyklė" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Nuskenuotas brūkšninis kodas" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Įmonės" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Rodomas pavadinimas" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 į UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodavimas" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP nukreipimas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Niekada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Terminologija" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Taisyklės pavadinimas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Taisyklės" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Seka" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Stalai" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Palieskite, jei norite nuskaityti" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Brūkšninis kodas, atitinkantis struktūrą" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Brūkšninio kodo taisyklių sąrašas" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Susijusi struktūra susisies su šiuo brūkšniniu kodu" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ši taisyklė bus pritaikyta tik jei brūkšninis kodas bus užkoduotas nurodytu " +"kodavimu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipas" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC kodai gali būti paverčiami į EAN, priekyje pridedant nulį. Ši nuostata " +"nusako, ar UPC/EAN brūkšninis kodas turėtų būti automatiškai paverčiamas " +"vienu ar kitu būdu, kai bandoma susieti taisyklę su kitu kodavimu." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A į EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN keitimas" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Produkto vienetas" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Naudojama taisyklių išrikiavimui taip, kad taisyklės su žemesne seka būtų " +"taikomos pirmiau" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Paskutinio nuskenuoto brūkšninio kodo reikšmė." diff --git a/barcodes/i18n/lv.po b/barcodes/i18n/lv.po new file mode 100644 index 0000000..9863467 --- /dev/null +++ b/barcodes/i18n/lv.po @@ -0,0 +1,347 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Anzelika Adejanova, 2023 +# Martin Trigaux, 2023 +# Arnis Putniņš , 2023 +# ievaputnina , 2023 +# Armīns Jeltajevs , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Armīns Jeltajevs , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Vienmēr" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Jebkurš" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Svītrkods" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Uzņēmumi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Izveidoja" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Izveidots" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Attēlotais nosaukums" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP maršrutēšana" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Pēdējoreiz atjaunināja" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Pēdējoreiz atjaunināts" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nekad" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Noteikuma nosaukums" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Noteikumi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvence" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Galdi" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Veids" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/mk.po b/barcodes/i18n/mk.po new file mode 100644 index 0000000..323c2ed --- /dev/null +++ b/barcodes/i18n/mk.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Macedonian (https://www.transifex.com/odoo/teams/41243/mk/)\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Креирано од" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Креирано на" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Прикажи име" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Последно ажурирање од" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Последно ажурирање на" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Секвенца" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/mn.po b/barcodes/i18n/mn.po new file mode 100644 index 0000000..0379a33 --- /dev/null +++ b/barcodes/i18n/mn.po @@ -0,0 +1,337 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Nurbahyt Kh , 2022 +# Батмөнх Ганбат , 2022 +# Martin Trigaux, 2022 +# Baskhuu Lodoikhuu , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.5alpha1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:45+0000\n" +"Last-Translator: Baskhuu Lodoikhuu , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Зураасан кодын нэр төрөл нь зураасан кодууд нь яаж танигдаж ангилагдах талаар тодорхойлдог.\n" +" Зураасан кодыг сканнердахад таарахэхний дүрэмд\n" +" холбогдоно. Зураасан кодын хэвийг regulare expression-р тодоройлдог.\n" +" Зураасан кодын эхлэл угтвар хэсгийг нь regulare expression-р илэрхийлдэг." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "Зураасан кодын задлах дүрэм нь борлуулалтын цэг дээр зураасан кодыг хэрхэн задлан унших арга, дүрмийг тодорхойлдог." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Шинэ зураасан кодны задлах дүрэм бүртгэх" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Ерөнхий нэр" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Үргэлж" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Зураасан кодын энэ дүрэмийн хувьд дотоод танилт" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Зураасан кодын энэ дүрэмийн хувьд дотоод танилт" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Дурын" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Зураасан кодны үзэгдэл танигч" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Зураасан кодын дүрэм" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Зураасан код задлах дүрэм" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Зураасан кодын хэв загвар" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Зураасан кодын дүрэм" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Зураасан код уншигдсан" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Компаниуд" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Үүсгэсэн этгээд" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Үүсгэсэн огноо" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Дэлгэрэнгүй нэр" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13-с UPC-A-руу" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодчлол" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Сүүлд зассан этгээд" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Сүүлд зассан огноо" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Хэзээ ч үгүй" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Задлах дүрэм" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Дүрмийн нэр" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Дүрэм" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Дугаарлалт" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Хүснэгт" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Зураасан кодыг таних хэв" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Зураасан кодын дүрмийн жагсаалт" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Таарсан хэв нь энэ зураасан код руу давхар холбогдоно." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "Энэ дүрэм нь зураасан код нь зөвхөн заасан кодчилолоор кодлогдсон байвал хэрэглэгдэнэ." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Төрөл" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "UPC кодууд нь EAN код руу урд нь тэг нэмэх замаар хөрвүлэгдэнэ. Энэ тохиргоо нь UPC/EAN зураасан кодууд автоматаар хөрвүүлэгдэхийг тодорхойлдог." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A -с EAN-13-руу" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN хөрвүүлэлт" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Барааны нэр төрөл" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "Дүрмүүдэд эрэмбэ дараалал тогтооно. Ингэснээр бага эрэмбэтэй дүрэм түрүүлж шалгагдана" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Сүүлд уншуулсан зураасан кодын утга." diff --git a/barcodes/i18n/nb.po b/barcodes/i18n/nb.po new file mode 100644 index 0000000..2ab8f4c --- /dev/null +++ b/barcodes/i18n/nb.po @@ -0,0 +1,347 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Thor Arne Hvidsten , 2024 +# Marius Stedjan , 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Alltid" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Noen" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Strekkode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Strekkode-nomenklatur" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenklatur for strekkoder" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Barcode Pattern" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Strekkoderegel" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode Skannet" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Firmaer" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Opprettet av" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Opprettet den" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Visningsnavn" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 til UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Koding" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-ruting" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Sist oppdatert" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Aldri" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Regelnavn" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regler" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvens" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabeller" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Trykk for å skanne" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Listen med strekkoderegler" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Type" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A til EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN konvertering" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Stykk-produkt" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Brukt til å organisere regler slik at regler med kortere sekvens matches " +"først" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Verdien fra siste avleste strekkode." diff --git a/barcodes/i18n/ne.po b/barcodes/i18n/ne.po new file mode 100644 index 0000000..37de810 --- /dev/null +++ b/barcodes/i18n/ne.po @@ -0,0 +1,326 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Language-Team: Nepali (https://www.transifex.com/odoo/teams/41243/ne/)\n" +"Language: ne\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/nl.po b/barcodes/i18n/nl.po new file mode 100644 index 0000000..000db00 --- /dev/null +++ b/barcodes/i18n/nl.po @@ -0,0 +1,368 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' is geen geldig regex barcode patroon. Bedoelde je soms '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"De nomenclatuur van een barcode bepaalt hoe barcodes worden herkend en gecategoriseerd.\n" +" Wanneer een barcode wordt gescand, wordt ze geassocieerd met de eerste regel van een\n" +" passend patroon. De syntax van een patroon is zoals een reguliere expressie, en een barcode wordt\n" +" gematcht indien de reguliere expressie overeenkomt met een prefix van de barcode." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"De nomenclatuur van een barcode bepaalt hoe de kassa een barcode " +"identificeert en interpreteert" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Voeg een nieuwe barcode nomenclatuur toe" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Altijd" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Een interne identificatie voor de regel van deze barcode nomenclatuur" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Een interne identificatie van de barcode nomenclatuur" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Één" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode gebeurtenis mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Barcode nomenclatuur" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Barcode nomenclaturen" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Barcode patroon" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Barcode regel" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode gescand" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Barcode: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Bedrijven" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 naar UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codering" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nooit" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclature" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Patronen kunnen ook bepalen hoe numerieke waarden zoals gewicht of prijs, in de\n" +" barcode worden gecodeerd. Ze worden aangeduid met {NNN} waarbij N\n" +" aangeeft waar de cijfers van het getal worden gecodeerd. Kommagetallen worden ook ondersteund, waarbij de\n" +" decimalen aangeduid worden met D, zoals {NNNDD}. In deze gevallen,\n" +" moet het barcodeveld op de bijbehorende records deze cijfers weergeven als\n" +" nullen." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Scan alsjeblieft opnieuw!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Regelnaam" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regels" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Reeks" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tafels" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Tik aan om te scannen" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Het overeenkomstige barcode patroon" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "De lijst met barcode regels" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Het overeenkomstige patroon zal naar deze barcode verwijzen" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Er is een syntaxisfout in het barcodepatroon %(pattern)s: een regel kan maar" +" één paar accolades bevatten." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Er is een syntaxisfout in het barcodepatroon %(pattern)s: accolades kunnen " +"alleen N's bevatten gevolgd door D's." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Er is een syntaxisfout in het barcodepatroon %(pattern)s: lege accolades." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Deze regel zal enkel toegepast worden indien de barcode van de juiste " +"codering voorzien is" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Soort" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC codes kunnen naar EAN omgezet worden door ze met het prefix nul te " +"voorzien. Deze instelling bepaalt of de UPC/EAN-omzetting automatisch moet " +"uitgevoerd wanneer er een overeenkomst wordt gezocht in een regel met de een" +" of andere codering. " + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A naar EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN omzetting" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Producteenheid" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Onbekend barcodecommando" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Wordt gebruikt om regels te ordenen zodat regels met een lagere volgorde " +"eerst worden vergeleken." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Waarde van de laatst gescande barcode." diff --git a/barcodes/i18n/pl.po b/barcodes/i18n/pl.po new file mode 100644 index 0000000..76da21d --- /dev/null +++ b/barcodes/i18n/pl.po @@ -0,0 +1,360 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Nomenklatura kodów kreskowych określa jak kody s rozpoznawane i kategoryzowane.\n" +"Po skanowaniu kod jest przypisywany do pierwszej zasady z pasującym wzorcem. \n" +"Składnia wzorca jest w formie wyrażenia regularnego i kod kreskowy zostaje dopasowany,\n" +"gdy prefiks kodu kreskowego pasuje do wyrażenia regularnego." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Nomenklatura kodu kreskowego definiuje jak punkt sprzedaży identyfikuje i " +"interpretuje kod kreskowy." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Dodaj nową nomenklaturę kodów kreskowych" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Zawsze" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Wewnętrzna identyfikacja tej reguły nomelnklatury kodu kreskowego " + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Wewnętrzna identyfikacja nomenklatury kodu kreskowego" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Dowolny" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Kod kreskowy" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode Event Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura kodu kreskowego" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenklatury kodów kreskowych" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Wzorzec kodu kreskowego" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Reguła kodu kreskowego" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Zeskanowany kod kreskowy" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Kod kreskowy:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Firmy" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Utworzył(a)" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Data utworzenia" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nazwa wyświetlana" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 do UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodowanie" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Routing HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Ostatnio aktualizowane przez" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Data ostatniej aktualizacji" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nigdy" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Proszę, zeskanuj ponownie!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nazwa reguły" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Reguły" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekwencja" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Stoliki" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Dotknij, aby zeskanować" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Wzorzec dopasowania kodu kreskowego" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Lista reguł kodów kreskowych" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Dopasowany wzorzec z odwołaniem do tego kodu kreskowego" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Błąd składni we wzorze kodu %(pattern)s: reguła może zawierać tylko jedną " +"parę nawiasów" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Błąd składni we wzorze kodu %(pattern)s: nawiasy mogą zawierać jedynie N i " +"następujące po nich D" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "Błąd składni we wzorze kodu %(pattern)s: puste nawiasy" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ta zasada zostanie zastosowana tylko dla kodów kreskowych ze zdefiniowanym " +"kodowaniem" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Typ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Kody UPC mogą być konwertowane do EAN poprzez dodanie początkowych zer. To " +"ustawienie definiuje czy kody UPC/EAN powinny być automatycznie konwertowane" +" podczas próby dopasowania reguły dla odmiennego kodowania." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A do EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Konwersja UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Produkt jednostkowy" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Nieznana komenda" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Używane przy ustawieniu kolejności zasad, przez co zasady z niższą wartością" +" dopasowywane są w pierwszej kolejności" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Wartość ostaniego zeskanowanego kodu kreskowego" diff --git a/barcodes/i18n/pt.po b/barcodes/i18n/pt.po new file mode 100644 index 0000000..0f95885 --- /dev/null +++ b/barcodes/i18n/pt.po @@ -0,0 +1,363 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Nomenclaturas de Códigos de Barras definem como os códigos de barras são reconhecidos e categorizados.\n" +"Quando um código de barras é digitalizado, é associado à primeira regra com um padrão de\n" +"combinação.O padrão de sintaxe é o da expressão regular, e um código de barras é combinado\n" +"se a expressão regular corresponde a um prefixo do código de barras." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Uma nomenclatura do código de barras define como um ponto de venda " +"identifica e interpreta os códigos de barras" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Adicionar nova Nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Sempre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Uma identificação interna para a regra de nomenclatura deste código de " +"barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Uma identificação interna da nomenclatura do código de barras" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Qualquer" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Código de Barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de Código de Barras" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclaturas de códigos de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Padrão de Código de Barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regra de Código de Barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de Barras lido" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Código de Barras:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nome" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 para UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificação" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Rotas HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nunca" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nome da Regra" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sequência" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabelas" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toque para digitalizar" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "O padrão correspondente do código de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "A lista de regras de códigos de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "O padrão combinado vai apelidar este código de barras" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Há um erro de sintaxe no padrão de código de barras %(pattern)s: conjunto " +"apenas pode conter N's seguidos de D's." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Há um erro de sintaxe no padrão de código de barras %(pattern)s: conjunto " +"vazio" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regra só será aplicada se o código de barras estiver codificado com a " +"codificação indicada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Os 'Códigos UPC' podem ser convertidos para EAN prefixando-os com um zero. " +"Esta definição determina se um código de barras UPC/EAN deverá ser " +"convertido automaticamente num sentido ou noutro quando tentar corresponder " +"uma regra com a outra codificação." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A para EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversão de UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Artigo Unitário" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Comando de Código de Barras Desconhecido" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Utilizado para ordenar as regras de forma que essas regras com uma sequência" +" menor correspondam primeiro" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor do último código de barras lido." diff --git a/barcodes/i18n/pt_BR.po b/barcodes/i18n/pt_BR.po new file mode 100644 index 0000000..5d483c6 --- /dev/null +++ b/barcodes/i18n/pt_BR.po @@ -0,0 +1,372 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Portuguese (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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +"'*' não é um padrão de código de barras Regex válido. Você quis dizer '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Nomenclaturas de códigos de barras definem como os códigos de barras são reconhecidos e categorizados.\n" +"Quando um código de barras é lido, ele é associado à primeira regra com um padrão de\n" +"correspondência. O padrão de sintaxe de expressão regular, e um código de barras é correspondido\n" +"se a expressão regular corresponde a um prefixo do código de barras." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Uma nomenclatura de código de barras define como o ponto de venda identifica" +" e interpreta os códigos de barras" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Adicionar nova nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Sempre" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"Uma identificação interna para esta regra de nomenclatura de código de " +"barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Uma identificação interna da nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Qualquer um" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Mixin de evento de código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de código de barras" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclaturas de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Padrão de código de barras" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regra de código de barras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de barras escaneado" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Código de barras:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nome exibido" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 para UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificação" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Roteamento HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nunca" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Os padrões também podem definir como os valores numéricos, como peso ou preço, podem ser\n" +" codificados no código de barras. Eles são indicados por{NNN} no qual os Ns\n" +" definem onde os dígitos do número são codificados. Os valores flutuantes também são compatíveis com\n" +" decimais indicados com Ds, por exemplo {NNNDD}. Nesses casos,\n" +" o campo de código de barras nos registros associados deve mostrar esses dígitos como\n" +" zeros." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Escaneie novamente." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Nome da regra" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regras" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sequência" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabelas" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toque para escanear" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "O padrão de correspondência de código de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "A lista de regras de código de barras" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "O padrão correspondido vai criar um alias para este código de barras" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Há um erro de sintaxe no padrão de código de barras %(pattern)s: uma regra " +"só pode conter um par de chaves." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Há um erro de sintaxe no padrão de código de barras %(pattern)s: as chaves " +"só podem conter Ns seguidos de Ds." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Há um erro de sintaxe no padrão de código de barras %(pattern)s: chaves " +"vazias." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regra será aplicada somente se o código de barras for codificado com a " +"codificação especificada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Códigos UPC podem ser convertidos para EAN pela junção deles com um zero. " +"Essa configuração determina se um código de barras UPC/EAN deve ser " +"automaticamente convertido em uma forma ou outra ao tentar corresponder a " +"uma regra com a outra codificação." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A para EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Conversão UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Produto unitário" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Comando de código de barras desconhecido" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Usado para ordenar regras de tal modo que as regras com um número de " +"sequência menor correspondam primeiro" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor do último código de barras escaneado." diff --git a/barcodes/i18n/ro.po b/barcodes/i18n/ro.po new file mode 100644 index 0000000..33a89f2 --- /dev/null +++ b/barcodes/i18n/ro.po @@ -0,0 +1,369 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Hongu Cosmin , 2024 +# sharkutz , 2024 +# Vacaru Adrian , 2024 +# Dorin Hongu , 2024 +# Cozmin Candea , 2024 +# Foldi Robert , 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Nomenclatoarele de coduri de bare definesc modul în care codurile de bare sunt recunoscute și categorizate. \n" +"Când un cod de bare este scanat este asociat cu prima regulă de potrivire cu un șablon. Sintaxa șablonului este acela de expresie regulată, și un cod de bare este potrivit în cazul în care expresia regulată se potrivește cu un prefixul codului de bare." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"O nomenclatură a codurilor de bare definește modul în care punctul de " +"vânzare identifică și interpretează codurile de bare" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Adăugați o nouă nomenclatură a codului de bare" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Întotdeauna" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" +"O identificare internă pentru această regulă de nomenclatură a codului de " +"bare" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "O identificare internă a nomenclaturii codului de bare" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Oricare" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Cod de bare" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Mix de evenimente cu coduri de bare" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenclator cod de bare" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenclatoare coduri de bare" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Șablon cod bare" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Regulă cod de bare" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Cod de bare scanat" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Cod de bare: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Companii" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Creat de" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Creat în" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Nume afișat" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 la UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificare:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Rutare HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Ultima actualizare făcută de" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Ultima actualizare pe" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Niciodată" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclator" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Numele regulii" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Reguli" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Secvență" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabele" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Atinge pentru a scana" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Modelul de potrivire a codului de bare" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Lista regulilor codurilor de bare" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Modelul potrivit va fi alias la acest cod de bare" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Există o eroare de sintaxă în modelul codului de bare%(pattern)s: o regulă " +"poate conține doar o pereche de aparate dentare." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Există o eroare de sintaxă în modelul codului de bare %(pattern)s: aparatele" +" dentare pot conține doar N-uri urmate de D-uri." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Există o eroare de sintaxă în modelul codului de bare %(pattern)s: bretele " +"goale." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Această regulă se va aplica numai dacă codul de bare este codificat cu " +"codificarea specificată" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tip" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Codurile UPC pot fi convertite în EAN prin prefixarea lor cu un zero. " +"Această setare determină dacă un cod UPC/EAN trebuie să fie convertit " +"automat într-o direcție sau alta când se încearcă să se potrivească o regulă" +" cu alta codificare." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A la EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN Conversion" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Unitate produs" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Comandă necunoscută de cod de bare" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Folosit pentru a ordona reguli astfel încât regulile cu o secvență mai mică " +"se potrivesc mai întâi" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valoarea ultimului cod de bare scanat." diff --git a/barcodes/i18n/ru.po b/barcodes/i18n/ru.po new file mode 100644 index 0000000..c71242a --- /dev/null +++ b/barcodes/i18n/ru.po @@ -0,0 +1,374 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Vasiliy Korobatov , 2023 +# Сергей Шебанин , 2023 +# Alena Vlasova, 2023 +# Martin Trigaux, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" +" '*' не является действительным шаблоном штрих-кода Regex. Вы имели в виду " +"'.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Номенклатура штрих-кодов> определяет, как штрих-коды распознаются и классифицируются.\n" +"                                 Когда штрих-код сканируется, он ассоциируется с правилом первый с соответствием\n" +"                                 шаблона. Синтаксис шаблона - это регулярное выражение, и штрих-код сопоставляется\n" +"                                 если регулярное выражение совпадает с префиксом штрих-кода." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Номенклатура штрих-кодов определяет, как точка продажи идентифицирует и " +"интерпретирует штрих-коды" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Добавьте новую номенклатуру штрихкодов" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Алиас" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Всегда" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Внутренняя идентификация для данного правила номенклатуры штрихкодов" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Внутренняя идентификация номенклатуры штрихкодов" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Любой" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Штрихкод" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Миксин событий штрихкода" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Номенклатура штрих-кодов" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Номенклатуры штрихкодов" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Узор штрих-кода" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Правило штрихкода" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Сканирование штрих-кода" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Штрих-код:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Компании" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Создано" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 - UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодирование" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Маршрутизация HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Последнее обновление" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Последнее обновление" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Никогда" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Номенклатура" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Шаблоны также могут определять, как числовые значения, такие как вес или цена, могут быть\n" +" закодированы в штрихкоде. Они обозначаются {NNN} где N\n" +" определяют, где кодируются цифры числа. Также поддерживаются плавающие числа, где\n" +" десятичные числа обозначаются буквами D, например {NNNDD}. В этих случаях\n" +" поле штрих-кода в соответствующих записях должно отображать эти цифры как\n" +" нули." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Пожалуйста, просканируйте еще раз!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Имя правила" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Правила" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Последовательность" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Таблицы" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Нажмите для сканирования" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Шаблон совпадения штрих-кодов" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Список правил штрихового кодирования" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Совпавший шаблон будет иметь псевдоним этого штрих-кода" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"В шаблоне штрих-кода %(pattern)s допущена синтаксическая ошибка: правило " +"может содержать только одну пару скобок." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"В шаблоне штрих-кода %(pattern)s допущена синтаксическая ошибка: скобки " +"могут содержать только N, за которыми следуют D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"В шаблоне штрих-кода %(pattern)s допущена синтаксическая ошибка: пустые " +"скобки." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Это правило применяется только в том случае, если штрих-код закодирован с " +"указанной кодировкой" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Тип" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Коды UPC можно преобразовать в EAN, поставив перед ними нуль. Этот параметр " +"определяет, должен ли штрих-код UPC/EAN автоматически преобразовываться так " +"или иначе при попытке сопоставить правило с другой кодировкой." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A к EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Конвертация UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Единица продукции" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Неизвестная команда штрихкода" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Используется для упорядочивания правил таким образом, чтобы правила с " +"меньшей последовательностью соответствовали первым" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Значение последнего отсканированного штрихкода." diff --git a/barcodes/i18n/sk.po b/barcodes/i18n/sk.po new file mode 100644 index 0000000..4cc3701 --- /dev/null +++ b/barcodes/i18n/sk.po @@ -0,0 +1,358 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Názvoslovie čiarových kódov definuje ako sú čiarové kódy rozpoznávané a kategorizované.\n" +"Keď je čiarový kód naskenovaný, je asociovaný k prvému pravidlu so spárovaným\n" +"vzorom. Syntax vzor je regulárny výraz, a čiarový kód je spárovaný\n" +"ak regulárny výraz zodpovedá predpone čiarového kódu." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Názvoslovie čiarového kódu definuje ako miesto predaja identifikuje a " +"interpretuje čiarové kódy" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Pridaj nové názvoslovie čiarového kódu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Vždy" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Interná identifikácia pre toto pravidlo názvoslovia čiarového kódu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Interná identifikácia názvoslovia čiarového kódu" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Ktorýkoľvek" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Čiarový kód" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Udalosť čiarového kódu mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Názvoslovie čiarového kódu" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Názvoslovia čiarového kódu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Vzor čiarového kódu" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Pravidlo čiarového kódu" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Čiarový kód naskenovaný" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Spoločnosti" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Vytvoril" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Vytvorené" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Zobrazovaný názov" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 na UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Zakódovanie" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP smerovanie" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Naposledy upravoval" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Naposledy upravované" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nikdy" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" +"Nomenklatúra\n" +" " + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Meno pravidla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravidlá" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Postupnosť" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabuľky" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Kliknutím skenujte" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Vzor zodpovedajúci čiarovému kódu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Zoznam pravidiel čiarového kódu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Zodpovedajúci vzor bude alias tohto čiarového kódu" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Toto pravidlo bude platiť iba ak je čiarový kód zakódovaný so špecifickým " +"zakódovaním" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Typ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC kódy môžu byť konvertované na EAN oridaním predpony nula. Toto " +"nastavenie určuje či UPC/EAN čiarový kód má byť automaticky konvertovaný " +"jedným či druhým spôsobom pri snahe o zhodu pravidla s iným kódovaním" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A na EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN konverzia" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Jednotka produktu" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Používané pre poradie pravidiel, ako pravidlá s menšiou sekvenciou sú " +"zhodované skôr" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Hodnota posledného naskenovaného čiarového kódu." diff --git a/barcodes/i18n/sl.po b/barcodes/i18n/sl.po new file mode 100644 index 0000000..2a886f0 --- /dev/null +++ b/barcodes/i18n/sl.po @@ -0,0 +1,352 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Matjaz Mozetic , 2023 +# Jasmina Macur , 2023 +# Boris Kodelja , 2023 +# Martin Trigaux, 2023 +# matjaz k , 2023 +# laznikd , 2023 +# Tadej Lupšina , 2023 +# 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:55+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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Dodajte novo nomenklaturo črtne kode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Vzdevek" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Vedno" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Notranja identifikacija tega pravila nomenklature črtne kode" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Notranja identifikacija nomenklature črtne kode" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Črtna koda" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura črtne kode" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Nomenklatura črtne kode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Vzorec črtne kode" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Pravilo črtne kode" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Skenirana črtna koda" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Podjetja" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Ustvaril" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 do UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodiranje" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP usmerjanje" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nikoli" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Ime pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Zaporedje" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Mize" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Kliknite za optično branje" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Vzorec ujemanja črtne kode" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Seznam pravil črtne kode" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Ujemajoči se vzorec bo vzporeden s to črtno kodo" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "To pravilo velja samo, če je črtna koda kodirana s podano kodiranjem" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tip" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A do EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN pretvorba" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Enota izdelka" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Uporablja se za naročanje takšnih pravil, da se pravila z manjšim zaporedjem" +" najprej ujemajo" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Vrednost zadnje skenirane črtne kode." diff --git a/barcodes/i18n/sq.po b/barcodes/i18n/sq.po new file mode 100644 index 0000000..2aff2dc --- /dev/null +++ b/barcodes/i18n/sq.po @@ -0,0 +1,329 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# 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:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Albanian (https://www.transifex.com/odoo/teams/41243/sq/)\n" +"Language: sq\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Krijuar nga" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Krijuar me" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Emri i paraqitur" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Modifikuar per here te fundit nga" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Modifikuar per here te fundit me" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekuencë" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/sr.po b/barcodes/i18n/sr.po new file mode 100644 index 0000000..f1bc5de --- /dev/null +++ b/barcodes/i18n/sr.po @@ -0,0 +1,372 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Martin Trigaux, 2023 +# Dragan Vukosavljevic , 2023 +# Milan Bojovic , 2023 +# コフスタジオ, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: コフスタジオ, 2024\n" +"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "'*' nije validan Regex Barcode Pattern. Da li ste mislili na '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Barcodes Nomenclatures definišu kako se prepoznaju i\n" +" kategorizuju bar-kodovi. \n" +" Kada se skenira bar-kod, on se povezuje sa prvom pravilom koja ima odgovarajući \n" +" obrazac. Sintaksa obrasca je regularni izraz, i bar-kod \n" +"se poklapa \n" +" ako regularni izraz odgovara prefiksu bar-koda." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Jedna nomenklatura barkoda definiše kako prodajno mesto identifikuje i " +"tumači barkodove." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Dodajte novu nomenklaturu za barkod." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Uvek" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Interna identifikacija za ovu pravilo nomenklature barkoda" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Interna identifikacija bar-kod nomenklature" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Bilo koji" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Bar-kod" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode Event Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Bar-kod nomenklatura" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Barkod Nomenklature" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Barkod šema" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Barkod pravilo" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barkod skeniran" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Bar-kod:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Preduzeća" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 to UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodiranje" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP rutiranje" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Poslednji put ažurirao" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Poslednji put ažurirano" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Nikada" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatura" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Oblici takođe mogu definisati kako se numeričke vrednosti, kao što su težina ili cena, mogu\n" +" enkodirati u barkod. Oni su označeni sa {NNN} gde N-ovi definišu gde su cifre \n" +"broja enkodirane. \n" +"Decimalni brojevi su takođe podržani sa decimalnim mestima označenim sa D-ovima, kao što je {NNNDD}. U ovim slučajevima, \n" +"polje barkoda na povezanim zapisima moraju prikazivati ove cifre\n" +" kao nule." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Molim, skenirajte ponovo!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Naziv pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Niz" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabele" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Dodirnite za skeniranje" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Barkod odgovarajući obrazac" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Spisak pravila za barkodove" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Podudarni obrazac će se povezivati sa ovim barkodom." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Postoji sintaksna greška u šablonu barkoda %(pattern)s: pravilo može " +"sadržati samo jedan par zagrada." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Postoji sintaksna greška u šablonu barkoda %(pattern)s: zagrade mogu " +"sadržavati samo N-ove praćene D-ovima." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Postoji sintaksna greška u šablonu barkoda %(pattern)s: prazne zagrade." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ovo pravilo će se primenjivati samo ako je barkod kodiran sa određenim " +"kodiranjem." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Vrsta" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC kodovi mogu biti konvertovani u EAN dodavanjem nule na početak. Ova " +"postavka određuje da li se UPC/EAN barkod automatski konvertuje na jedan ili" +" drugi način prilikom pokušaja uparivanja pravila sa drugim kodiranjem." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A u EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN Konverzija" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Jedinica proizvoda" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Nepoznata barkodna komanda" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Korišćeno za naručivanje pravila tako da pravila sa manjim redosledom prvo " +"odgovaraju." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Vrednost poslednjeg skeniranog barkoda." diff --git a/barcodes/i18n/sr@latin.po b/barcodes/i18n/sr@latin.po new file mode 100644 index 0000000..ca0495c --- /dev/null +++ b/barcodes/i18n/sr@latin.po @@ -0,0 +1,332 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Martin Trigaux , 2017 +# Ljubisa Jovev , 2017 +# Djordje Marjanovic , 2017 +# Nemanja Dragovic , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2017-09-20 09:53+0000\n" +"Last-Translator: Nemanja Dragovic , 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Datum kreiranja" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Promenio" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Vreme promene" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Naziv pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Pravila" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Prioritet" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tip" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/sv.po b/barcodes/i18n/sv.po new file mode 100644 index 0000000..ed88d79 --- /dev/null +++ b/barcodes/i18n/sv.po @@ -0,0 +1,377 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Anders Wallenquist , 2023 +# Simon S, 2023 +# Robin Calvin, 2023 +# Chrille Hedberg , 2023 +# Kristoffer Grundström , 2023 +# Martin Trigaux, 2023 +# Mikael Åkerberg , 2023 +# Kim Asplund , 2023 +# Lasse L, 2023 +# Jakob Krabbe , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jakob Krabbe , 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' är inte ett giltigt regex streckkodsmönster. Menade du '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Streckkodsnomenklaturer definierar hur streckkoder identifieras och kategoriseras.\n" +" När en streckkod skannas associeras den till den första regeln med ett matchande\n" +" mönster. Mönstret har samma syntax som ett reguljärt uttryck, och en streckkod matchas\n" +" om det reguljära uttrycket matchar ett prefix i streckkoden." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"En streckkodsnomenklatur definierar hur kassan identifierar och tolkar " +"streckkoder" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Lägg till en ny streckkodsnomenklatur" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Alias" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Alltid" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "En intern identifiering för denna streckkodsnomenklaturregel" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "En intern identifiering av streckkodsnomenklaturen" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Någon" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Streckkod" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Streckkodshändelse Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Streckkodsnomenklatur" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Streckkodsnomenklaturer" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Streckkodsmönster" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Streckkodsregel" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Streckkoden skannad" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Streckkod: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Bolag" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 till UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodning" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-rutt" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Aldrig" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatur" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Mönster kan också definiera hur numeriska värden, som vikt eller pris, kan vara\n" +" kodad i streckkoden. De indikeras av {NNN} när versala N\n" +" definiera var numrets siffror är kodade. Decimalnummer stöds också med\n" +" decimaler angivna med D, som t.ex {NNNDD}. I dessa fall,\n" +" streckkodsfältet på tillhörande poster visa dessa siffror som\n" +" nollor." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Vänligen skanna igen!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Regelnamn" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Regler" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sekvens" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tabeller" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Klicka för att scanna" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Streckkodsmatchningsmönstret" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Listan med streckkodsregler" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Matchade mönstret länkas med alias till den här streckkoden" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Det finns ett syntaxfel i streckkodsmönstret %(pattern)s: en regel kan bara " +"innehålla ett par hakparenteser." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Det finns ett syntaxfel i streckkodsmönstret %(pattern)s: hakparenteser får " +"endast innehålla N följt av D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Det finns ett syntaxfel i streckkodsmönstret %(pattern)s: tomma " +"klammerparenteser." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Denna regel gäller endast om streckkoden är kodad med den angivna kodningen" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Typ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC-koder kan konverteras till EAN genom att använda en nolla som prefix. " +"Den här inställningen avgör om en UPC/EAN-streckkod ska konverteras " +"automatiskt på ett eller annat sätt när man försöker matcha en regel med den" +" andra kodningen." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A till EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN Konvertering" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Enhet Produkt" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Okänt streckkodskommando" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Används för att sortera regler så att regler med en mindre sekvens matchar " +"först" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Värde på senast skannade streckkod." diff --git a/barcodes/i18n/ta.po b/barcodes/i18n/ta.po new file mode 100644 index 0000000..4928522 --- /dev/null +++ b/barcodes/i18n/ta.po @@ -0,0 +1,330 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Odoo 9.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2016-03-18 08:46+0000\n" +"Last-Translator: Martin Trigaux\n" +"Language-Team: Tamil (http://www.transifex.com/odoo/odoo-9/language/ta/)\n" +"Language: ta\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "A barcode nomenclature defines how the point of sale identify and interprets barcodes" +msgstr "" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "உருவாக்கியவர்" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "" +"உருவாக்கப்பட்ட \n" +"தேதி" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "காட்சி பெயர்" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "வரிசை" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's." +msgstr "" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "This rule will apply only if the barcode is encoded with the specified encoding" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "வகை" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding." +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "Used to order rules such that rules with a smaller sequence match first" +msgstr "" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" diff --git a/barcodes/i18n/th.po b/barcodes/i18n/th.po new file mode 100644 index 0000000..427bae3 --- /dev/null +++ b/barcodes/i18n/th.po @@ -0,0 +1,362 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# Rasareeyar Lappiam, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Rasareeyar Lappiam, 2023\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "'*' ไม่ใช่รูปแบบบาร์โค้ด Regex ที่ถูกต้อง คุณหมายถึง '.*' ใช่หรือไม่?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"การตีความบาร์โค้ด กำหนดวิธีการจดจำและจัดหมวดหมู่บาร์โค้ด\n" +" เมื่อสแกนบาร์โค้ดมันจะเชื่อมโยงกับกฎ แรก ด้วยการจับคู่\n" +" รูปแบบ รูปแบบไวยากรณ์ที่ซึ่งเป็นตัวสั่งงานทั่วไป และบาร์โค้ดตรงกัน\n" +" หากตัวสั่งงานทั่วไปตรงกับคำนำหน้าของบาร์โค้ด" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "ระบบการตีความบาร์โค้ดกำหนดวิธีที่จุดขายระบุและตีความบาร์โค้ด" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "เพิ่มการตีความบาร์โค้ด" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "นามแฝง" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "เสมอ" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "การระบุภายในสำหรับกฎการตีความบาร์โค้ดนี้" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "การระบุภายในของระบบการตีความบาร์โค้ด" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "ใดๆ" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "บาร์โค้ด" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "บาร์โค้ดอีเวนต์ Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "การตีความบาร์โค้ด" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "การตีความบาร์โค้ด" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "รูปแบบบาร์โค้ด" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "กฎของบาร์โค้ด" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "สแกนบาร์โค้ดแล้ว" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "บาร์โค้ด: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "บริษัท" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "สร้างโดย" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "สร้างเมื่อ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "แสดงชื่อ" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 ถึง UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "การเข้ารหัส" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "การกำหนด HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ไอดี" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "อัปเดตครั้งล่าสุดโดย" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "อัปเดตครั้งล่าสุดเมื่อ" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "ไม่เคย" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "การตีความ" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"รูปแบบยังสามารถกำหนดวิธีการเข้ารหัสค่าตัวเลข เช่น น้ำหนักหรือราคา\n" +" ลงในบาร์โค้ดได้ ระบุด้วย {NNN} โดยที่ N's\n" +" กำหนดตำแหน่งที่เข้ารหัสตัวเลข นอกจากนี้ยังรองรับทศนิยม\n" +" ด้วยทศนิยมที่ระบุด้วย D เช่น {NNNDD} ในกรณีเหล่านี้\n" +" ข้อมูลของบาร์โค้ดในบันทึกที่เกี่ยวข้อง จำเป็นต้อง แสดงตัวเลขเหล่านี้เป็น\n" +" ศูนย์" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "กรุณาสแกนอีกครั้ง!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "ชื่อกฎ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "กฏ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "ลำดับ" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "โต๊ะ" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "แตะเพื่อสแกน" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "รูปแบบการจับคู่บาร์โค้ด" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "รายการกฏของบาร์โค้ด" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "รูปแบบที่ตรงกันจะใช้นามแฝงของบาร์โค้ดนี้" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"มีข้อผิดพลาดทางไวยากรณ์ในรูปแบบบาร์โค้ด %(pattern)s: " +"กฎสามารถมีวงเล็บได้เพียงคู่เดียวเท่านั้น" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"มีข้อผิดพลาดทางไวยากรณ์ในรูปแบบบาร์โค้ด%(pattern)s: วงเล็บมีได้เฉพาะ N " +"ตามด้วย D" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"มีข้อผิดพลาดทางไวยากรณ์ในรูปแบบบาร์โค้ด %(pattern)s: วงเล็บที่ว่างเปล่า" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "กฎนี้จะใช้ได้เฉพาะเมื่อบาร์โค้ดถูกเข้ารหัสด้วยการเข้ารหัสที่ระบุ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "ประเภท" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"โค้ด UPC สามารถแปลงเป็น EAN ได้โดยนำหน้ามันด้วยศูนย์ " +"การตั้งค่านี้กำหนดว่าควรแปลงบาร์โค้ด UPC/EAN " +"โดยอัตโนมัติไม่ทางใดก็ทางหนึ่งเมื่อพยายามจับคู่กฎกับการเข้ารหัสอื่นหรือไม่" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A เป็น EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "การแปลง UPC/EAN " + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "หน่วยสินค้า" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "คำสั่งบาร์โค้ดที่ไม่รู้จัก" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "ใช้เพื่อสั่งกฎเพื่อให้กฎที่มีลำดับที่เล็กกว่าตรงกันก่อน" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "ค่าของบาร์โค้ดล่าสุดที่ถูกสแกน" diff --git a/barcodes/i18n/tr.po b/barcodes/i18n/tr.po new file mode 100644 index 0000000..a52be43 --- /dev/null +++ b/barcodes/i18n/tr.po @@ -0,0 +1,371 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Martin Trigaux, 2023 +# Levent Karakaş , 2023 +# Ediz Duman , 2023 +# Güven YILMAZ , 2023 +# Yedigen, 2023 +# Ertuğrul Güreş , 2023 +# Ahmet Altinisik , 2023 +# Murat Kaplan , 2023 +# Umur Akın , 2023 +# Tugay Hatıl , 2023 +# sinem cil, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: sinem cil, 2024\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Barkod Kural Setleri Barkodların nasıl tanınacağını ve kategorize edileceğini belirlemeye yarar.\n" +" Bir barkod okutulduğunda önce kural setinde bir kalıpla eşleştirilir. Barkod kalıbının eşleştirmesinde düzenli ifadeler kullanılır.\n" +" " + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Bir barkod kural seti, barkodları nasıl belirlediğini ve yorumladığını " +"tanımlar." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Yeni bir barkod kural seti ekle" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Rumuz" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Daima" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Bu barkod kural seti için dahili bir tanımlama" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Bu barkod kural seti için bir iç kimlik." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Hiç" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Barkod" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Barcode Event Mixin" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Barkod Kural Seti" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Barkod Kural Seti" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Barkod Kalıbı" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Barkod kuralı" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barkod Tarandı" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Barkod:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Şirketler" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Oluşturulma" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 to UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodlama" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Yönlendirme" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Son Güncelleyen" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Son Güncelleme" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Asla" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Sınıflandırma" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Lütfen Tekrar Tarayın!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Kural Adı" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Kurallar" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Sıralama" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Tablolar" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Taramak için Dokunun" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Barkod eşleşme kalıbı" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Barkod kuralları listesi" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Eşleşen kalıplar bu barkodun rumuzu olacak." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"%(pattern)sbarkod modelinde söz dizimi hatası mevcut: bir kural yalnızca bir" +" çift parantez içerebilir." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"%(pattern)sbarkod modelinde söz dizimi hatası mevcut : parantezler yalnızca " +"N'leri ve ardından D'leri içerebilir." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"%(pattern)sbarkod modelinde söz dizimi hatası mevcut : boş parantezler " +"mevcut." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Bu kural okunan barkod yalnızca belirtilen kodlama ile barkod kodlanmış ise " +"uygulanacaktır." + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Tür" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC kodları, sıfır ön eki ile EAN 'a dönüştürülebilir. Bu ayar, diğer " +"kodlamayla bir kuralı eşleştirmeye çalışırken bir UPC / EAN barkodunun " +"otomatik bir şekilde dönüştürülüp dönüştürülmeyeceğini belirler." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A dan EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN dönüştürme" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Birim Ürün" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Bilinmeyen barkod komutu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Barkod kurallarını önceliklendirmek için kullanılır. Küçük değerli kurallar " +"öncelikle değerlendirilir." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Son taranan barkodun değeri" diff --git a/barcodes/i18n/uk.po b/barcodes/i18n/uk.po new file mode 100644 index 0000000..18a7ea5 --- /dev/null +++ b/barcodes/i18n/uk.po @@ -0,0 +1,367 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# 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:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' недійсний паттерн штрих-коду Regex. Ви мали на увазі '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Номенклатури штрих-кодів визначте, як штрих-коди будуть зчитуватися та сортуватися.\n" +"Просканований штрих-код пов'язується з першим правилом відповідним шаблоном.\n" +"Синтаксис шаблона належить до регулярних виразів, а штрих-коди співпадають, \n" +"якщо регулярний вираз співпадає з префіксом штрих-кода." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Номенклатура штрих-кодів визначає, як точка продажу буде їх ідентифікувати " +"та зчитувати " + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Додати нову номенклатуру штрих-коду" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Псевдонім" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Завжди" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Внутрішня ідентифікація для правил номенклатури цих штрих-кодів " + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Внутрішня ідентифікація номенклатури штрих-кодів " + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Будь-який" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Штрих-код" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Мікс подій штрих-коду" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Номенклатура штрих-кодів" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Номенклатура штрих-кодів" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Шаблон штрих-коду" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Правило штрих-коду" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Штрих-код проскановано" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Штрих-код: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Компанії" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Створив" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Створено" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 в UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодування" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Маршрутизація HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Востаннє оновив" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Останнє оновлення" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Ніколи" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Номенклатура" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Шаблони також можуть визначати, як числові значення, такі як вага або ціна, можуть бути закодовані\n" +" в штрих-коді. Вони ідентифікуцються за {NNN} де N\n" +" визначає де кодуються цифри. Числа з плаваючою точкою також підтримуються \n" +"десятковими дробами, позначеними D, наприклад {NNNDD}. У такому випадку\n" +" поле штрих-коду на пов'язаних записах має показувати ці цифри як\n" +" нулі." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Відскануйте знову!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Назва правила" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Правила" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Послідовність" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Столи" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Натисніть, щоб сканувати" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Відповідний шаблон штрих-коду" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Список правил штрих-коду" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Відповідний шаблон буде призначено як псевдонім для цього штрих-коду." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"У шаблоні штрих-коду синтаксична помилка%(pattern)s: правило може містити " +"лише одну пару дужок." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"У шаблоні штрих-коду синтаксична помилка %(pattern)s: дужки можуть містити " +"лише N після яких стоять D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "У шаблоні штрих-коду є помилка %(pattern)s: порожні дужки." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Дане правило діятиме, тільки якщо штрих-код закодовано точно зазначеним " +"кодуванням" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Тип" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC коди можна конвертувати у EAN, дописуючи нулі спочатку. Це налаштування " +"вказує, чи конвертувати автоматично UPC/EAN штрих-коди в тому чи іншому " +"напрямку під час пошуку правила для відповідного кодування." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "з UPC-A в EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN конвертація" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Одиничний товар" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Невідома команда штрих-коду" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Використовується для впорядкування правил. Правила з меншим значенням будуть" +" відображатися першими." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Значення останнього відсканованого штрих-коду." diff --git a/barcodes/i18n/vi.po b/barcodes/i18n/vi.po new file mode 100644 index 0000000..73d04ab --- /dev/null +++ b/barcodes/i18n/vi.po @@ -0,0 +1,367 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*' không phải là Mẫu mã vạch Regex hợp lệ. Có phải ý bạn là '.*'?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"Phép đặt tên mã vạch xác định cách thức mã vạch được nhận diện và phân loại.\n" +" Khi một mã vạch được quét, nó được liên kết với quy tắc đầu tiên bằng một mẫu\n" +" phù hợp. Cú pháp mẫu là một biểu thức chính quy, và một mã vạch được coi là khớp\n" +" nếu biểu thức chính quy đó khớp với tiền tố của mã vạch." + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "" +"Một phép đặt tên mã vạch xác định cách thức mà POS xác định và biên dịch mã " +"vạch" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "Thêm một phép đặt tên mã vạch mới" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "Bí danh" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "Luôn luôn" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "Một định danh nội bộ về quy tắc đặt tên mã vạch này" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "Một định danh nội bộ về phép đặt tên mã vạch" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "Bất kỳ" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "Mã vạch" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "Mixin sự kiện mã vạch" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "Phép đặt tên mã vạch" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "Quy tắc đặt tên mã vạch" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "Mẫu mã vạch" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "Quy tắc mã vạch" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "Mã vạch được quét" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "Mã vạch:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "Công ty" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "Được tạo bởi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "Được tạo vào" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 sang UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Mã hoá" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "Định tuyến HTTP" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "Cập nhật lần cuối bởi" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "Không bao giờ" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "Phép đặt tên" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"Các mẫu cũng có thể xác định cách thức các giá trị số, chẳng hạn như cân nặng hay giá cả, có thể được\n" +" mã hoá thành mã vạch. Chúng được biểu thị bằng {NNN} trong đó\n" +" các chữ N xác định nơi mà các chữ số của số được mã hoá. Các số thập phân cũng\n" +" được hỗ trợ với phần thập phân được biểu thị bằng các chữ D, ví dụ như {NNNDD}. Trong những trường hợp này,\n" +" trường mã vạch trên các tập dữ liệu liên kết phải hiển thị những chữ số này\n" +" là các số 0." + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Vui lòng quét lại!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "Tên quy tắc" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "Quy tắc" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "Trình tự" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "Bàn" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Bấm để quét" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "Mã vạch khớp với mẫu" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "Danh sách quy tắc mã vạch" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "Mẫu phù hợp sẽ là bí danh cho mã vạch này" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "" +"Có lỗi cú pháp trong mẫu mã vạch %(pattern)s: một quy tắc chỉ có thể chứa " +"một cặp dấu ngoặc nhọn." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "" +"Có lỗi cú pháp trong mẫu mã vạch %(pattern)s: trong dấu ngoặc nhọn chỉ có " +"thể chứa các chữ N theo sau là các chữ D." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "" +"Có lỗi cú pháp trong mẫu mã vạch %(pattern)s: trong dấu ngoặc nhọn trống." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Quy tắc này sẽ chỉ áp dụng nếu mã vạch được mã hóa bằng cách mã hóa được chỉ" +" định" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "Loại" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"Mã UPC có thể được chuyển đổi thành EAN bằng cách thêm tiền tố là một số 0. " +"Thiết lập này xác định xem một mã vạch UPC/EAN nên được tự động chuyển đổi " +"bằng cách này hay cách khác khi khớp một quy tắc với cách mã hoá khác." + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A sang EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "Chuyển đổi UPC/EAN" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "Đơn vị sản phẩm" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "Lệnh mã vạch không xác định" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "" +"Được sử dụng để sắp xếp thứ tự các quy tắc sao cho các quy tắc có trình tự " +"nhỏ hơn sẽ khớp trước" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Giá trị mã vạch quét cuối cùng. " diff --git a/barcodes/i18n/zh_CN.po b/barcodes/i18n/zh_CN.po new file mode 100644 index 0000000..f49d16c --- /dev/null +++ b/barcodes/i18n/zh_CN.po @@ -0,0 +1,355 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Chloe Wang, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: 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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr " '*'不是有效的 Regex 正则表达式条形码样式。您想用的是'.*'吗?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"条码命名规则 定义如何识别和归类条码。\n" +" 扫描条形码时,它会关联具有匹配模式的 第一条 规则。\n" +" 模式的语法是正则表达式,如果正则表达式与条形码的前缀相匹配,\n" +" 则匹配条形码。" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "条形码命名规则定义了 POS 如何识别和解释条形码" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "增加新条形码命名规则" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "别名" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "总是" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "此条形码命名规则的内部识别" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "条码命名规则的内部识别" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "任意" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "条形码" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "条形码事件混合" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "条形码命名规则" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "条形码命名规则" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "条形码模式" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "条形码规则" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "条形码扫描" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "条形码:" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "公司" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "创建日期" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 转 UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "编码" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 路由" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "ID" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "最后更新人" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "上次更新日期" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "从不" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "命名规则" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"模式还可以定义如何将重量或价格等数值\n" +" 编码到条形码中。它们用{NNN} 表示,其中 N\n" +" 代表数字的编码位置。也支持浮点数,\n" +" 用 D 表示小数,如{NNNDD}。 在这种情况下,\n" +" 相关记录上的条形码字段必须 将这些数字显示为\n" +" 零。" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "请再次扫描!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "规则名称" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "规则" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "序列" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "桌台" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "点击即可扫描" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "条码匹配模式" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "条码规则列表" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "匹配模式将别名到该条码" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "条形码模式中存在语法错误 %(pattern)s:一条规则只能包含一对大括号。" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "‎条形码模式存在语法错误%(pattern)s: 大括号只能包含 N,后面跟 D。" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "条形码模式中存在语法错误 %(pattern)s:空括号。" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "这条规则只应用于特殊编码的条形码" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "类型" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "" +"UPC 代码可以通过前缀加零的方式转换为 EAN。此设置可确定在尝试将规则与其他编码匹配时,是否应以某种方式自动转换 UPC/EAN 条形码。" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A 转 EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN 转换" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "单位产品" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "未知条码命令" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "用于规则排序,这样较小序列的规则最先匹配" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "最后扫描的条形码值。" diff --git a/barcodes/i18n/zh_TW.po b/barcodes/i18n/zh_TW.po new file mode 100644 index 0000000..12107c9 --- /dev/null +++ b/barcodes/i18n/zh_TW.po @@ -0,0 +1,353 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes +# +# Translators: +# Wil Odoo, 2023 +# Tony Ng, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tony Ng, 2023\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: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid " '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?" +msgstr "「*」不是有效的 regex 正規表達式條碼模式。你是想用「.*」嗎?" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Barcodes Nomenclatures define how barcodes are recognized and categorized.\n" +" When a barcode is scanned it is associated to the first rule with a matching\n" +" pattern. The pattern syntax is that of regular expression, and a barcode is matched\n" +" if the regular expression matches a prefix of the barcode." +msgstr "" +"條碼命名規則定義如何識別和歸類條碼。\n" +"當條碼被掃碼後,它就會關聯到匹配到的第一條規則,並且有匹配的模式。\n" +"模式的語法是一般的表達形式,如果一般的表達式匹配條碼的前綴,則條碼被匹配。" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "" +"A barcode nomenclature defines how the point of sale identify and interprets" +" barcodes" +msgstr "一個條碼命名規則定義了POS如何識別和詮釋條碼" + +#. module: barcodes +#: model_terms:ir.actions.act_window,help:barcodes.action_barcode_nomenclature_form +msgid "Add a new barcode nomenclature" +msgstr "增加新條碼命名規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__alias +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__alias +msgid "Alias" +msgstr "別名" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__always +msgid "Always" +msgstr "總是" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__name +msgid "An internal identification for this barcode nomenclature rule" +msgstr "此條碼命名規則的內部標識" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__name +msgid "An internal identification of the barcode nomenclature" +msgstr "條碼命名規則的內部識別" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__any +msgid "Any" +msgstr "任何" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Barcode" +msgstr "條碼" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcodes_barcode_events_mixin +msgid "Barcode Event Mixin" +msgstr "條碼事件混入" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_nomenclature +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__barcode_nomenclature_id +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Barcode Nomenclature" +msgstr "條碼命名規則" + +#. module: barcodes +#: model:ir.actions.act_window,name:barcodes.action_barcode_nomenclature_form +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_tree +msgid "Barcode Nomenclatures" +msgstr "條碼命名規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__pattern +msgid "Barcode Pattern" +msgstr "條碼模式" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_barcode_rule +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_rule_form +msgid "Barcode Rule" +msgstr "條碼規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Barcode Scanned" +msgstr "掃瞄到條碼" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Barcode: " +msgstr "條碼: " + +#. module: barcodes +#: model:ir.model,name:barcodes.model_res_company +msgid "Companies" +msgstr "公司" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_uid +msgid "Created by" +msgstr "建立人員" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__create_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__create_date +msgid "Created on" +msgstr "建立於" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__display_name +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean13 +msgid "EAN-13" +msgstr "EAN-13" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__ean2upc +msgid "EAN-13 to UPC-A" +msgstr "EAN-13 轉為 UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__ean8 +msgid "EAN-8" +msgstr "EAN-8" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__encoding +msgid "Encoding" +msgstr "編碼" + +#. module: barcodes +#: model:ir.model,name:barcodes.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 路由" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__id +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__id +msgid "ID" +msgstr "識別號" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_uid +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_uid +msgid "Last Updated by" +msgstr "最後更新者" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__write_date +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__write_date +msgid "Last Updated on" +msgstr "最後更新於" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__none +msgid "Never" +msgstr "從不" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_res_company__nomenclature_id +msgid "Nomenclature" +msgstr "命名規則" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "" +"Patterns can also define how numerical values, such as weight or price, can be\n" +" encoded into the barcode. They are indicated by {NNN} where the N's\n" +" define where the number's digits are encoded. Floats are also supported with the\n" +" decimals indicated with D's, such as {NNNDD}. In these cases,\n" +" the barcode field on the associated records must show these digits as\n" +" zeroes." +msgstr "" +"模式還可以定義如何將重量或價格等數值\n" +" 編碼到條形碼中。它們用{NNN} 表示,其中 N\n" +" 代表數字的編碼位置。也支持浮點數,\n" +" 用 D 表示小數,如{NNNDD}。 在這種情況下,\n" +" 相關記錄上的條形碼字段必須 將這些數字顯示為\n" +" 零。" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "請再次掃描!" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__name +msgid "Rule Name" +msgstr "規則名稱" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__rule_ids +msgid "Rules" +msgstr "規則" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__sequence +msgid "Sequence" +msgstr "序列號" + +#. module: barcodes +#: model_terms:ir.ui.view,arch_db:barcodes.view_barcode_nomenclature_form +msgid "Tables" +msgstr "表格" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/components/barcode_scanner.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "點擊即可掃描" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__pattern +msgid "The barcode matching pattern" +msgstr "條碼匹配模式" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__rule_ids +msgid "The list of barcode rules" +msgstr "條碼規則列表" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__alias +msgid "The matched pattern will alias to this barcode" +msgstr "匹配模式將別名加到該條碼" + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: a rule can only " +"contain one pair of braces." +msgstr "條碼模式 %(pattern)s 中存在語法錯誤:a rule can only contain one pair of braces." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: braces can only " +"contain N's followed by D's." +msgstr "條碼模式 %(pattern)s 中存在語法錯誤:braces can only contain N's followed by D's." + +#. module: barcodes +#. odoo-python +#: code:addons/barcodes/models/barcode_rule.py:0 +#, python-format +msgid "" +"There is a syntax error in the barcode pattern %(pattern)s: empty braces." +msgstr "條碼模式 %(pattern)s 中存在語法錯誤:empty braces." + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "這條規則將只適用於特定編碼的條碼" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_rule__type +msgid "Type" +msgstr "類型" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "" +"UPC Codes can be converted to EAN by prefixing them with a zero. This " +"setting determines if a UPC/EAN barcode should be automatically converted in" +" one way or another when trying to match a rule with the other encoding." +msgstr "UPC碼可以轉換為EAN,前綴加個零。此設定確定UPC / EAN條碼應以一種或另一種方式自動轉換當在與其他編碼規則匹配時。" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__encoding__upca +msgid "UPC-A" +msgstr "UPC-A" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_nomenclature__upc_ean_conv__upc2ean +msgid "UPC-A to EAN-13" +msgstr "UPC-A 轉 EAN-13" + +#. module: barcodes +#: model:ir.model.fields,field_description:barcodes.field_barcode_nomenclature__upc_ean_conv +msgid "UPC/EAN Conversion" +msgstr "UPC/EAN 轉換" + +#. module: barcodes +#: model:ir.model.fields.selection,name:barcodes.selection__barcode_rule__type__product +msgid "Unit Product" +msgstr "單位產品" + +#. module: barcodes +#. odoo-javascript +#: code:addons/barcodes/static/src/barcode_handlers.js:0 +#, python-format +msgid "Unknown barcode command" +msgstr "未知條碼指令" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcode_rule__sequence +msgid "" +"Used to order rules such that rules with a smaller sequence match first" +msgstr "用於規則排序,這樣較小序列的規則最先匹配" + +#. module: barcodes +#: model:ir.model.fields,help:barcodes.field_barcodes_barcode_events_mixin___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "上次掃瞄到的條碼的值." diff --git a/barcodes/models/__init__.py b/barcodes/models/__init__.py new file mode 100644 index 0000000..7e42a60 --- /dev/null +++ b/barcodes/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +from . import barcode_events_mixin +from . import barcode_nomenclature +from . import barcode_rule +from . import ir_http +from . import res_company diff --git a/barcodes/models/barcode_events_mixin.py b/barcodes/models/barcode_events_mixin.py new file mode 100644 index 0000000..e0e37f6 --- /dev/null +++ b/barcodes/models/barcode_events_mixin.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api + +class BarcodeEventsMixin(models.AbstractModel): + """ Mixin class for objects reacting when a barcode is scanned in their form views + which contains ``. + Models using this mixin must implement the method on_barcode_scanned. It works + like an onchange and receives the scanned barcode in parameter. + """ + + _name = 'barcodes.barcode_events_mixin' + _description = 'Barcode Event Mixin' + + _barcode_scanned = fields.Char("Barcode Scanned", help="Value of the last barcode scanned.", store=False) + + @api.onchange('_barcode_scanned') + def _on_barcode_scanned(self): + barcode = self._barcode_scanned + if barcode: + self._barcode_scanned = "" + return self.on_barcode_scanned(barcode) + + def on_barcode_scanned(self, barcode): + raise NotImplementedError("In order to use barcodes.barcode_events_mixin, method on_barcode_scanned must be implemented") diff --git a/barcodes/models/barcode_nomenclature.py b/barcodes/models/barcode_nomenclature.py new file mode 100644 index 0000000..b5272e2 --- /dev/null +++ b/barcodes/models/barcode_nomenclature.py @@ -0,0 +1,134 @@ +import re + +from odoo import models, fields, api +from odoo.tools import check_barcode_encoding, get_barcode_check_digit + + +UPC_EAN_CONVERSIONS = [ + ('none', 'Never'), + ('ean2upc', 'EAN-13 to UPC-A'), + ('upc2ean', 'UPC-A to EAN-13'), + ('always', 'Always'), +] + + +class BarcodeNomenclature(models.Model): + _name = 'barcode.nomenclature' + _description = 'Barcode Nomenclature' + + name = fields.Char(string='Barcode Nomenclature', required=True, help='An internal identification of the barcode nomenclature') + rule_ids = fields.One2many('barcode.rule', 'barcode_nomenclature_id', string='Rules', help='The list of barcode rules') + upc_ean_conv = fields.Selection( + UPC_EAN_CONVERSIONS, string='UPC/EAN Conversion', required=True, default='always', + help="UPC Codes can be converted to EAN by prefixing them with a zero. This setting determines if a UPC/EAN barcode should be automatically converted in one way or another when trying to match a rule with the other encoding.") + + @api.model + def sanitize_ean(self, ean): + """ Returns a valid zero padded EAN-13 from an EAN prefix. + + :type ean: str + """ + ean = ean[0:13].zfill(13) + return ean[0:-1] + str(get_barcode_check_digit(ean)) + + @api.model + def sanitize_upc(self, upc): + """ Returns a valid zero padded UPC-A from a UPC-A prefix. + + :type upc: str + """ + return self.sanitize_ean('0' + upc)[1:] + + def match_pattern(self, barcode, pattern): + """Checks barcode matches the pattern and retrieves the optional numeric value in barcode. + + :param barcode: + :type barcode: str + :param pattern: + :type pattern: str + :return: an object containing: + - value: the numerical value encoded in the barcode (0 if no value encoded) + - base_code: the barcode in which numerical content is replaced by 0's + - match: boolean + :rtype: dict + """ + match = { + 'value': 0, + 'base_code': barcode, + 'match': False, + } + + barcode = barcode.replace('\\', '\\\\').replace('{', '\\{').replace('}', '\\}').replace('.', '\\.') + numerical_content = re.search("[{][N]*[D]*[}]", pattern) # look for numerical content in pattern + + if numerical_content: # the pattern encodes a numerical content + num_start = numerical_content.start() # start index of numerical content + num_end = numerical_content.end() # end index of numerical content + value_string = barcode[num_start:num_end - 2] # numerical content in barcode + + whole_part_match = re.search("[{][N]*[D}]", numerical_content.group()) # looks for whole part of numerical content + decimal_part_match = re.search("[{N][D]*[}]", numerical_content.group()) # looks for decimal part + whole_part = value_string[:whole_part_match.end() - 2] # retrieve whole part of numerical content in barcode + decimal_part = "0." + value_string[decimal_part_match.start():decimal_part_match.end() - 1] # retrieve decimal part + if whole_part == '': + whole_part = '0' + if whole_part.isdigit(): + match['value'] = int(whole_part) + float(decimal_part) + + match['base_code'] = barcode[:num_start] + (num_end - num_start - 2) * "0" + barcode[num_end - 2:] # replace numerical content by 0's in barcode + match['base_code'] = match['base_code'].replace("\\\\", "\\").replace("\\{", "{").replace("\\}", "}").replace("\\.", ".") + pattern = pattern[:num_start] + (num_end - num_start - 2) * "0" + pattern[num_end:] # replace numerical content by 0's in pattern to match + match['match'] = re.match(pattern, match['base_code'][:len(pattern)]) + + return match + + def parse_barcode(self, barcode): + """ Attempts to interpret and parse a barcode. + + :param barcode: + :type barcode: str + :return: A object containing various information about the barcode, like as: + - code: the barcode + - type: the barcode's type + - value: if the id encodes a numerical value, it will be put there + - base_code: the barcode code with all the encoding parts set to + zero; the one put on the product in the backend + :rtype: dict + """ + parsed_result = { + 'encoding': '', + 'type': 'error', + 'code': barcode, + 'base_code': barcode, + 'value': 0, + } + + for rule in self.rule_ids: + cur_barcode = barcode + if rule.encoding == 'ean13' and check_barcode_encoding(barcode, 'upca') and self.upc_ean_conv in ['upc2ean', 'always']: + cur_barcode = '0' + cur_barcode + elif rule.encoding == 'upca' and check_barcode_encoding(barcode, 'ean13') and barcode[0] == '0' and self.upc_ean_conv in ['ean2upc', 'always']: + cur_barcode = cur_barcode[1:] + + if not check_barcode_encoding(barcode, rule.encoding): + continue + + match = self.match_pattern(cur_barcode, rule.pattern) + if match['match']: + if rule.type == 'alias': + barcode = rule.alias + parsed_result['code'] = barcode + else: + parsed_result['encoding'] = rule.encoding + parsed_result['type'] = rule.type + parsed_result['value'] = match['value'] + parsed_result['code'] = cur_barcode + if rule.encoding == "ean13": + parsed_result['base_code'] = self.sanitize_ean(match['base_code']) + elif rule.encoding == "upca": + parsed_result['base_code'] = self.sanitize_upc(match['base_code']) + else: + parsed_result['base_code'] = match['base_code'] + return parsed_result + + return parsed_result diff --git a/barcodes/models/barcode_rule.py b/barcodes/models/barcode_rule.py new file mode 100644 index 0000000..9023c45 --- /dev/null +++ b/barcodes/models/barcode_rule.py @@ -0,0 +1,43 @@ +import re + +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError + + +class BarcodeRule(models.Model): + _name = 'barcode.rule' + _description = 'Barcode Rule' + _order = 'sequence asc, id' + + name = fields.Char(string='Rule Name', required=True, help='An internal identification for this barcode nomenclature rule') + barcode_nomenclature_id = fields.Many2one('barcode.nomenclature', string='Barcode Nomenclature') + sequence = fields.Integer(string='Sequence', help='Used to order rules such that rules with a smaller sequence match first') + encoding = fields.Selection( + string='Encoding', required=True, default='any', selection=[ + ('any', 'Any'), + ('ean13', 'EAN-13'), + ('ean8', 'EAN-8'), + ('upca', 'UPC-A'), + ], help='This rule will apply only if the barcode is encoded with the specified encoding') + type = fields.Selection( + string='Type', required=True, selection=[ + ('alias', 'Alias'), + ('product', 'Unit Product'), + ], default='product') + pattern = fields.Char(string='Barcode Pattern', help="The barcode matching pattern", required=True, default='.*') + alias = fields.Char(string='Alias', default='0', help='The matched pattern will alias to this barcode', required=True) + + @api.constrains('pattern') + def _check_pattern(self): + for rule in self: + p = rule.pattern.replace('\\\\', 'X').replace('\\{', 'X').replace('\\}', 'X') + findall = re.findall("[{]|[}]", p) # p does not contain escaped { or } + if len(findall) == 2: + if not re.search("[{][N]*[D]*[}]", p): + raise ValidationError(_("There is a syntax error in the barcode pattern %(pattern)s: braces can only contain N's followed by D's.", pattern=rule.pattern)) + elif re.search("[{][}]", p): + raise ValidationError(_("There is a syntax error in the barcode pattern %(pattern)s: empty braces.", pattern=rule.pattern)) + elif len(findall) != 0: + raise ValidationError(_("There is a syntax error in the barcode pattern %(pattern)s: a rule can only contain one pair of braces.", pattern=rule.pattern)) + elif p == '*': + raise ValidationError(_(" '*' is not a valid Regex Barcode Pattern. Did you mean '.*'?")) diff --git a/barcodes/models/ir_http.py b/barcodes/models/ir_http.py new file mode 100644 index 0000000..537fc75 --- /dev/null +++ b/barcodes/models/ir_http.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + res = super(IrHttp, self).session_info() + if self.env.user._is_internal(): + res['max_time_between_keys_in_ms'] = int( + self.env['ir.config_parameter'].sudo().get_param('barcode.max_time_between_keys_in_ms', default='100')) + return res diff --git a/barcodes/models/res_company.py b/barcodes/models/res_company.py new file mode 100644 index 0000000..b510c6e --- /dev/null +++ b/barcodes/models/res_company.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields + + +class ResCompany(models.Model): + _inherit = 'res.company' + + def _get_default_nomenclature(self): + return self.env.ref('barcodes.default_barcode_nomenclature', raise_if_not_found=False) + + nomenclature_id = fields.Many2one( + 'barcode.nomenclature', + string="Nomenclature", + default=_get_default_nomenclature, + ) diff --git a/barcodes/security/ir.model.access.csv b/barcodes/security/ir.model.access.csv new file mode 100644 index 0000000..da03414 --- /dev/null +++ b/barcodes/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_barcode_nomenclature_user,barcode.nomenclature.user,model_barcode_nomenclature,base.group_user,1,0,0,0 +access_barcode_nomenclature_manager,barcode.nomenclature.manager,model_barcode_nomenclature,base.group_erp_manager,1,1,1,1 +access_barcode_rule_user,barcode.rule.user,model_barcode_rule,base.group_user,1,0,0,0 +access_barcode_rule_manager,barcode.rule.manager,model_barcode_rule,base.group_erp_manager,1,1,1,1 diff --git a/barcodes/static/img/barcode.png b/barcodes/static/img/barcode.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9d2f4bc0487f42fd9848498f821f3422c36266 GIT binary patch literal 1292 zcmeAS@N?(olHy`uVBq!ia0y~yV7vjub{s4~k(RS3dw~>FlDE4H!~gdFGy8!&&H|6f zVg?3oVGw3ym^DWND9B#o>FdgVpOb}`U()UAH3bF+mbsoTjv*Dd-d?x&xKb!{{GtED z2Le|fT(}|9cwtiTEKPHd)EF35K@1qf&bEaz4cUwG`;v;_wh9akM(xNzY#122s& z0$c5aCI+~b^)?;8`}|#9d5Z1%{5|jYK0STcyTo0lTRCv`!5`DCt_vT}z9-lDlxzJr zxA-lWf_lU@T^1GR+W9|h`s0Ly=5qZzk37FW^VY2HkJIX+mfnc|ULF3}>*)2{kHd;y z=Gm?I^pI%NWW809+A;!WD!2&uQVgfn}5g_ca0fZY89D$he zU=t8CHL-#)3pWT4w1z?IESw<)3b8>Pyf?~j&D!-(Vc(TM^QLyK_Y1Aun=zmJR;Ac; zZeVIOPu}!E`n>8npCfy(Tr29{e^z(Y0@JSyV)#~xnUd349D7?~dDmBpV8C&la$o4c}D|8Z4Op~<)9=WP3> z>+?53@=hNAQt{i9yAPk-8{c}rUU#p>#F!XQ{d<0TdP~ILtB9vx?w)+|=<=6G-A^8! z`Q_2$Cyz>mt6#5Ly#4I*C;mwv>8&88J0;<7%eI)J%?x@z6WBT>N>m|EoK<)x^Fp1_o{I59Zs| W?K=ehnXQ0j7lWs(pUXO@geCy7 clickOnButton(".o_form_button_edit"), + "O-CMD.DISCARD": () => clickOnButton(".o_form_button_cancel"), + "O-CMD.SAVE": () => clickOnButton(".o_form_button_save"), + "O-CMD.PREV": () => clickOnButton(".o_pager_previous"), + "O-CMD.NEXT": () => clickOnButton(".o_pager_next"), + "O-CMD.PAGER-FIRST": () => updatePager("first"), + "O-CMD.PAGER-LAST": () => updatePager("last"), +}; + +export const barcodeGenericHandlers = { + dependencies: ["ui", "barcode", "notification"], + start(env, { ui, barcode, notification }) { + + barcode.bus.addEventListener("barcode_scanned", (ev) => { + const barcode = ev.detail.barcode; + if (barcode.startsWith("O-BTN.")) { + let targets = []; + try { + // the scanned barcode could be anything, and could crash the queryselectorall + // function + targets = getVisibleElements(ui.activeElement, `[barcode_trigger=${barcode.slice(6)}]`); + } catch { + console.warn(`Barcode '${barcode}' is not valid`); + } + for (let elem of targets) { + elem.click(); + } + } + if (barcode.startsWith("O-CMD.")) { + const fn = COMMANDS[barcode]; + if (fn) { + fn(); + } else { + notification.add(_t("Barcode: ") + `'${barcode}'`, { + title: _t("Unknown barcode command"), + type: "danger" + }); + } + } + }); + } +}; + +registry.category("services").add("barcode_handlers", barcodeGenericHandlers); diff --git a/barcodes/static/src/barcode_service.js b/barcodes/static/src/barcode_service.js new file mode 100644 index 0000000..0b2060d --- /dev/null +++ b/barcodes/static/src/barcode_service.js @@ -0,0 +1,136 @@ +/** @odoo-module **/ + +import { isBrowserChrome, isMobileOS } from "@web/core/browser/feature_detection"; +import { registry } from "@web/core/registry"; +import { session } from "@web/session"; +import { EventBus, whenReady } from "@odoo/owl"; + +function isEditable(element) { + return element.matches('input,textarea,[contenteditable="true"]'); +} + +function makeBarcodeInput() { + const inputEl = document.createElement('input'); + inputEl.setAttribute("style", "position:fixed;top:50%;transform:translateY(-50%);z-index:-1;opacity:0"); + inputEl.setAttribute("autocomplete", "off"); + inputEl.setAttribute("inputmode", "none"); // magic! prevent native keyboard from popping + inputEl.classList.add("o-barcode-input"); + inputEl.setAttribute('name', 'barcode'); + return inputEl; +} + +export const barcodeService = { + // Keys from a barcode scanner are usually processed as quick as possible, + // but some scanners can use an intercharacter delay (we support <= 50 ms) + maxTimeBetweenKeysInMs: session.max_time_between_keys_in_ms || 100, + + // this is done here to make it easily mockable in mobile tests + isMobileChrome: isMobileOS() && isBrowserChrome(), + + cleanBarcode: function(barcode) { + return barcode.replace(/Alt|Shift|Control/g, ''); + }, + + start() { + const bus = new EventBus(); + let timeout = null; + + let bufferedBarcode = ""; + let currentTarget = null; + let barcodeInput = null; + + function handleBarcode(barcode, target) { + bus.trigger('barcode_scanned', {barcode,target}); + if (target.getAttribute('barcode_events') === "true") { + const barcodeScannedEvent = new CustomEvent("barcode_scanned", { detail: { barcode, target } }); + target.dispatchEvent(barcodeScannedEvent); + } + } + + /** + * check if we have a barcode, and trigger appropriate events + */ + function checkBarcode(ev) { + let str = barcodeInput ? barcodeInput.value : bufferedBarcode; + str = barcodeService.cleanBarcode(str); + if (str.length >= 3) { + if (ev) { + ev.preventDefault(); + } + handleBarcode(str, currentTarget); + } + if (barcodeInput) { + barcodeInput.value = ""; + } + bufferedBarcode = ""; + currentTarget = null; + } + + function keydownHandler(ev) { + if (!ev.key) { + // Chrome may trigger incomplete keydown events under certain circumstances. + // E.g. when using browser built-in autocomplete on an input. + // See https://stackoverflow.com/questions/59534586/google-chrome-fires-keydown-event-when-form-autocomplete + return; + } + // Ignore 'Shift', 'Escape', 'Backspace', 'Insert', 'Delete', 'Home', 'End', Arrow*, F*, Page*, ... + // meta is often used for UX purpose (like shortcuts) + // Notes: + // - shiftKey is not ignored because it can be used by some barcode scanner for digits. + // - altKey/ctrlKey are not ignored because it can be used in some barcodes (e.g. GS1 separator) + const isSpecialKey = !['Control', 'Alt'].includes(ev.key) && (ev.key.length > 1 || ev.metaKey); + const isEndCharacter = ev.key.match(/(Enter|Tab)/); + + // Don't catch non-printable keys except 'enter' and 'tab' + if (isSpecialKey && !isEndCharacter) { + return; + } + + currentTarget = ev.target; + // Don't catch events targeting elements that are editable because we + // have no way of redispatching 'genuine' key events. Resent events + // don't trigger native event handlers of elements. So this means that + // our fake events will not appear in eg. an element. + if (currentTarget !== barcodeInput && isEditable(currentTarget) && + !currentTarget.dataset.enableBarcode && + currentTarget.getAttribute("barcode_events") !== "true") { + return; + } + + clearTimeout(timeout); + if (isEndCharacter) { + checkBarcode(ev); + } else { + bufferedBarcode += ev.key; + timeout = setTimeout(checkBarcode, barcodeService.maxTimeBetweenKeysInMs); + } + } + + function mobileChromeHandler(ev) { + if (ev.key === "Unidentified") { + return; + } + if ($(document.activeElement).not('input:text, textarea, [contenteditable], ' + + '[type="email"], [type="number"], [type="password"], [type="tel"], [type="search"]').length) { + barcodeInput.focus(); + } + keydownHandler(ev); + } + + whenReady(() => { + const isMobileChrome = barcodeService.isMobileChrome; + if (isMobileChrome) { + barcodeInput = makeBarcodeInput(); + document.body.appendChild(barcodeInput); + } + const handler = isMobileChrome ? mobileChromeHandler : keydownHandler; + document.body.addEventListener('keydown', handler); + }); + + return { + bus, + }; + }, +}; + +registry.category("services").add("barcode", barcodeService); diff --git a/barcodes/static/src/components/barcode_scanner.js b/barcodes/static/src/components/barcode_scanner.js new file mode 100644 index 0000000..916ae62 --- /dev/null +++ b/barcodes/static/src/components/barcode_scanner.js @@ -0,0 +1,43 @@ +/** @odoo-module **/ + +import { _t } from "@web/core/l10n/translation"; +import { isBarcodeScannerSupported, scanBarcode } from "@web/webclient/barcode/barcode_scanner"; +import { Component } from "@odoo/owl"; +import { useService } from "@web/core/utils/hooks"; + +export class BarcodeScanner extends Component { + setup() { + this.notification = useService("notification"); + this.isBarcodeScannerSupported = isBarcodeScannerSupported(); + } + + get facingMode() { + return "environment"; + } + + async openMobileScanner() { + let error = null; + let barcode = null; + try { + barcode = await scanBarcode(this.env, this.facingMode); + } catch (err) { + error = err.message; + } + + if (barcode) { + this.props.onBarcodeScanned(barcode); + if ("vibrate" in window.navigator) { + window.navigator.vibrate(100); + } + } else { + this.notification.add(error || _t("Please, Scan again!"), { + type: "warning", + }); + } + } +} + +BarcodeScanner.template = "barcodes.BarcodeScanner"; +BarcodeScanner.props = { + onBarcodeScanned: { type: Function }, +}; diff --git a/barcodes/static/src/components/barcode_scanner.scss b/barcodes/static/src/components/barcode_scanner.scss new file mode 100644 index 0000000..20fda86 --- /dev/null +++ b/barcodes/static/src/components/barcode_scanner.scss @@ -0,0 +1,66 @@ +.o_barcode_mobile_container { + position: relative; + display: inline-block; + font-family: 'Lato', sans-serif; + font-size: 1.08333333rem; + font-weight: 400; + line-height: 1.5; + color: #fff; + + img, .o_mobile_barcode { + width: 115px; + height: 60px; + } + + .o_mobile_barcode { + width: 100%; + bottom: 0; + position: absolute; + opacity: 0.75; + padding-top: 5px; + + .o_barcode_mobile_camera { + margin: 5px; + font-size: 1em; + } + + div { + font-size: 12px; + } + } + + .o_barcode_laser { + // avoid dependencies to web file in pos + position: absolute; + top: 50%; + left: -15px; + bottom: auto; + right: -15px; + + height: 5px; + background: rgba(red, 0.6); + box-shadow: 0 1px 10px 1px rgba(red, 0.8); + animation: o_barcode_scanner_intro 1s cubic-bezier(0.6, -0.28, 0.735, 0.045) 0.4s; + } + + @keyframes o_barcode_scanner_intro { + 25% { + top: 75%; + } + 50% { + top: 0; + } + 75% { + top: 100%; + } + 100% { + top: 50%; + } + } +} +@media screen and (max-width: 576px) { + .o_event_barcode_bg.o_home_menu_background { + background: white; + height: 100%; + } +} diff --git a/barcodes/static/src/components/barcode_scanner.xml b/barcodes/static/src/components/barcode_scanner.xml new file mode 100644 index 0000000..210a0e9 --- /dev/null +++ b/barcodes/static/src/components/barcode_scanner.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/barcodes/static/src/float_scannable_field.js b/barcodes/static/src/float_scannable_field.js new file mode 100644 index 0000000..db46e9c --- /dev/null +++ b/barcodes/static/src/float_scannable_field.js @@ -0,0 +1,18 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { FloatField, floatField } from "@web/views/fields/float/float_field"; + +export class FloatScannableField extends FloatField { + onBarcodeScanned() { + this.inputRef.el.dispatchEvent(new InputEvent("input")); + } +} +FloatScannableField.template = "barcodes.FloatScannableField"; + +export const floatScannableField = { + ...floatField, + component: FloatScannableField, +}; + +registry.category("fields").add("field_float_scannable", floatScannableField); diff --git a/barcodes/static/src/float_scannable_field.xml b/barcodes/static/src/float_scannable_field.xml new file mode 100644 index 0000000..5a2a07c --- /dev/null +++ b/barcodes/static/src/float_scannable_field.xml @@ -0,0 +1,12 @@ + + + + + + onBarcodeScanned + true + true + + + + diff --git a/barcodes/static/src/js/barcode_parser.js b/barcodes/static/src/js/barcode_parser.js new file mode 100644 index 0000000..e31a512 --- /dev/null +++ b/barcodes/static/src/js/barcode_parser.js @@ -0,0 +1,236 @@ +/** @odoo-module **/ + +export class BarcodeParser { + static barcodeNomenclatureFields = ["name", "rule_ids", "upc_ean_conv"]; + static barcodeRuleFields = ["name", "sequence", "type", "encoding", "pattern", "alias"]; + static async fetchNomenclature(orm, id) { + const [nomenclature] = await orm.read( + "barcode.nomenclature", + [id], + this.barcodeNomenclatureFields + ); + let rules = await orm.searchRead( + "barcode.rule", + [["barcode_nomenclature_id", "=", id]], + this.barcodeRuleFields + ); + rules = rules.sort((a, b) => { + return a.sequence - b.sequence; + }); + nomenclature.rules = rules; + return nomenclature; + } + + constructor() { + this.setup(...arguments); + } + + setup({ nomenclature }) { + this.nomenclature = nomenclature; + } + + /** + * This algorithm is identical for all fixed length numeric GS1 data structures. + * + * It is also valid for EAN-8, EAN-12 (UPC-A), EAN-13 check digit after sanitizing. + * https://www.gs1.org/sites/default/files/docs/barcodes/GS1_General_Specifications.pdf + * + * @param {String} numericBarcode Need to have a length of 18 + * @returns {number} Check Digit + */ + get_barcode_check_digit(numericBarcode) { + let oddsum = 0, evensum = 0, total = 0; + // Reverses the barcode to be sure each digit will be in the right place + // regardless the barcode length. + const code = numericBarcode.split('').reverse(); + // Removes the last barcode digit (should not be took in account for its own computing). + code.shift(); + + // Multiply value of each position by + // N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 N16 N17 N18 + // x3 X1 x3 x1 x3 x1 x3 x1 x3 x1 x3 x1 x3 x1 x3 x1 x3 CHECK_DIGIT + for (let i = 0; i < code.length; i++) { + if (i % 2 === 0) { + evensum += parseInt(code[i]); + } else { + oddsum += parseInt(code[i]); + } + } + total = evensum * 3 + oddsum; + return (10 - total % 10) % 10; + } + + /** + * Checks if the barcode string is encoded with the provided encoding. + * + * @param {String} barcode + * @param {String} encoding could be 'any' (no encoding rules), 'ean8', 'upca' or 'ean13' + * @returns {boolean} + */ + check_encoding(barcode, encoding) { + if (encoding === 'any') { + return true; + } + const barcodeSizes = { + ean8: 8, + ean13: 13, + upca: 12, + }; + return barcode.length === barcodeSizes[encoding] && /^\d+$/.test(barcode) && + this.get_barcode_check_digit(barcode) === parseInt(barcode[barcode.length - 1]); + } + + /** + * Sanitizes a EAN-13 prefix by padding it with chars zero. + * + * @param {String} ean + * @returns {String} + */ + sanitize_ean(ean) { + ean = ean.substr(0, 13); + ean = "0".repeat(13 - ean.length) + ean; + return ean.substr(0, 12) + this.get_barcode_check_digit(ean); + } + + /** + * Sanitizes a UPC-A prefix by padding it with chars zero. + * + * @param {String} upc + * @returns {String} + */ + sanitize_upc(upc) { + return this.sanitize_ean(upc).substr(1, 12); + } + + // Checks if barcode matches the pattern + // Additionnaly retrieves the optional numerical content in barcode + // Returns an object containing: + // - value: the numerical value encoded in the barcode (0 if no value encoded) + // - base_code: the barcode in which numerical content is replaced by 0's + // - match: boolean + match_pattern(barcode, pattern, encoding) { + var match = { + value: 0, + base_code: barcode, + match: false, + }; + barcode = barcode.replace("\\", "\\\\").replace("{", '\{').replace("}", "\}").replace(".", "\."); + + var numerical_content = pattern.match(/[{][N]*[D]*[}]/); // look for numerical content in pattern + var base_pattern = pattern; + if(numerical_content){ // the pattern encodes a numerical content + var num_start = numerical_content.index; // start index of numerical content + var num_length = numerical_content[0].length; // length of numerical content + var value_string = barcode.substr(num_start, num_length-2); // numerical content in barcode + var whole_part_match = numerical_content[0].match("[{][N]*[D}]"); // looks for whole part of numerical content + var decimal_part_match = numerical_content[0].match("[{N][D]*[}]"); // looks for decimal part + var whole_part = value_string.substr(0, whole_part_match.index+whole_part_match[0].length-2); // retrieve whole part of numerical content in barcode + var decimal_part = "0." + value_string.substr(decimal_part_match.index, decimal_part_match[0].length-1); // retrieve decimal part + if (whole_part === ''){ + whole_part = '0'; + } + match.value = parseInt(whole_part) + parseFloat(decimal_part); + + // replace numerical content by 0's in barcode and pattern + match.base_code = barcode.substr(0, num_start); + base_pattern = pattern.substr(0, num_start); + for(var i=0;i<(num_length-2);i++) { + match.base_code += "0"; + base_pattern += "0"; + } + match.base_code += barcode.substr(num_start + num_length - 2, barcode.length - 1); + base_pattern += pattern.substr(num_start + num_length, pattern.length - 1); + + match.base_code = match.base_code + .replace("\\\\", "\\") + .replace("\{", "{") + .replace("\}","}") + .replace("\.","."); + + var base_code = match.base_code.split(''); + if (encoding === 'ean13') { + base_code[12] = '' + this.get_barcode_check_digit(match.base_code); + } else if (encoding === 'ean8') { + base_code[7] = '' + this.get_barcode_check_digit(match.base_code); + } else if (encoding === 'upca') { + base_code[11] = '' + this.get_barcode_check_digit(match.base_code); + } + match.base_code = base_code.join(''); + } + + base_pattern = base_pattern.split('|') + .map(part => part.startsWith('^') ? part : '^' + part) + .join('|'); + match.match = match.base_code.match(base_pattern); + + return match; + } + + /** + * Attempts to interpret a barcode (string encoding a barcode Code-128) + * + * @param {string} barcode + * @returns {Object} the returned object containing informations about the barcode: + * - code: the barcode + * - type: the type of the barcode (e.g. alias, unit product, weighted product...) + * - value: if the barcode encodes a numerical value, it will be put there + * - base_code: the barcode with all the encoding parts set to zero; the one put on the product in the backend + */ + parse_barcode(barcode) { + var parsed_result = { + encoding: '', + type:'error', + code:barcode, + base_code: barcode, + value: 0, + }; + + if (!this.nomenclature) { + return parsed_result; + } + + var rules = this.nomenclature.rules; + for (var i = 0; i < rules.length; i++) { + var rule = rules[i]; + var cur_barcode = barcode; + + if ( rule.encoding === 'ean13' && + this.check_encoding(barcode,'upca') && + this.nomenclature.upc_ean_conv in {'upc2ean':'','always':''} ){ + cur_barcode = '0' + cur_barcode; + } else if (rule.encoding === 'upca' && + this.check_encoding(barcode,'ean13') && + barcode[0] === '0' && + this.nomenclature.upc_ean_conv in {'ean2upc':'','always':''} ){ + cur_barcode = cur_barcode.substr(1,12); + } + + if (!this.check_encoding(cur_barcode,rule.encoding)) { + continue; + } + + var match = this.match_pattern(cur_barcode, rules[i].pattern, rule.encoding); + if (match.match) { + if(rules[i].type === 'alias') { + barcode = rules[i].alias; + parsed_result.code = barcode; + parsed_result.type = 'alias'; + } + else { + parsed_result.encoding = rules[i].encoding; + parsed_result.type = rules[i].type; + parsed_result.value = match.value; + parsed_result.code = cur_barcode; + if (rules[i].encoding === "ean13"){ + parsed_result.base_code = this.sanitize_ean(match.base_code); + } + else{ + parsed_result.base_code = match.base_code; + } + return parsed_result; + } + } + } + return parsed_result; + } +} diff --git a/barcodes/static/tests/basic/barcode_scan_tests.js b/barcodes/static/tests/basic/barcode_scan_tests.js new file mode 100644 index 0000000..ace6213 --- /dev/null +++ b/barcodes/static/tests/basic/barcode_scan_tests.js @@ -0,0 +1,32 @@ +/** @odoo-module **/ + +import { BarcodeScanner } from "@barcodes/components/barcode_scanner"; +import { getFixture, mount } from "@web/../tests/helpers/utils"; +import { contains } from "@web/../tests/utils"; +import { createWebClient } from "@web/../tests/webclient/helpers"; + +import { xml, Component } from "@odoo/owl"; + +QUnit.module("Barcode scan", {}); + +QUnit.test("Display notification for media device permission on barcode scanning", async () => { + navigator.mediaDevices.getUserMedia = function() { + return Promise.reject(new DOMException("", "NotAllowedError")); + }; + + class BarcodeScan extends Component {} + BarcodeScan.components = { BarcodeScanner }; + BarcodeScan.template = xml` +
+ +
+ `; + + const target = getFixture(); + const { env } = await createWebClient({}); + await mount(BarcodeScan, target, { env }); + + await document.querySelector('.o_mobile_barcode').click(); + await contains(".o_notification", { text: "Could not start scanning. Odoo needs your authorization first." }); + +}) diff --git a/barcodes/static/tests/basic/barcode_tests.js b/barcodes/static/tests/basic/barcode_tests.js new file mode 100644 index 0000000..7ad8301 --- /dev/null +++ b/barcodes/static/tests/basic/barcode_tests.js @@ -0,0 +1,217 @@ +/** @odoo-module **/ + +import { barcodeGenericHandlers } from "@barcodes/barcode_handlers"; +import { barcodeService } from "@barcodes/barcode_service"; +import { + editInput, + getFixture, + mockTimeout, + nextTick, + patchWithCleanup, +} from "@web/../tests/helpers/utils"; +import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; +import { registry } from "@web/core/registry"; +import { simulateBarCode } from "../helpers"; + +const serviceRegistry = registry.category("services"); + +let serverData; +let target; + +QUnit.module("Barcodes", (hooks) => { + hooks.beforeEach(() => { + target = getFixture(); + serverData = { + models: { + order: { + fields: { + _barcode_scanned: { string: "Barcode scanned", type: "char" }, + line_ids: { + string: "Order lines", + type: "one2many", + relation: "order_line", + }, + }, + records: [{ id: 1, line_ids: [1, 2] }], + }, + order_line: { + fields: { + product_id: { string: "Product", type: "many2one", relation: "product" }, + product_barcode: { string: "Product Barcode", type: "char" }, + quantity: { string: "Quantity", type: "integer" }, + }, + records: [ + { id: 1, product_id: 1, quantity: 0, product_barcode: "1234567890" }, + { id: 2, product_id: 2, quantity: 0, product_barcode: "0987654321" }, + ], + }, + product: { + fields: { + name: { string: "Product name", type: "char" }, + int_field: { string: "Integer", type: "integer" }, + int_field_2: { string: "Integer", type: "integer" }, + barcode: { string: "Barcode", type: "char" }, + }, + records: [ + { id: 1, name: "Large Cabinet", barcode: "1234567890" }, + { id: 2, name: "Cabinet with Doors", barcode: "0987654321" }, + ], + }, + }, + }; + + setupViewRegistries(); + serviceRegistry.add("barcode", barcodeService, { force: true }); + serviceRegistry.add("barcode_autoclick", barcodeGenericHandlers, { force: true }); + }); + + QUnit.test("Button with barcode_trigger", async (assert) => { + const form = await makeView({ + type: "form", + resModel: "product", + serverData, + arch: `
+
+
+
`, + resId: 2, + }); + + patchWithCleanup(form.env.services.action, { + doActionButton: (data) => { + assert.step(data.name); + }, + }); + patchWithCleanup(form.env.services.notification, { + add: (params) => { + assert.step(params.type); + }, + }); + + // O-BTN.doit + simulateBarCode(["O", "-", "B", "T", "N", ".", "d", "o", "i", "t", "Enter"]); + await nextTick(); + // O-BTN.dothat (should not call execute_action as the button isn't visible) + simulateBarCode(["O", "-", "B", "T", "N", ".", "d", "o", "t", "h", "a", "t", "Enter"]); + await nextTick(); + assert.verifySteps(["do_something"]); + + assert.containsOnce(target, ".o_form_statusbar > .o_statusbar_buttons"); + }); + + QUnit.test( + "Two buttons with same barcode_trigger and the same string and action", + async function (assert) { + const form = await makeView({ + type: "form", + resModel: "product", + serverData, + arch: `
+
+
+
`, + resId: 2, + }); + + patchWithCleanup(form.env.services.action, { + doActionButton: (data) => { + assert.step(data.name); + }, + }); + patchWithCleanup(form.env.services.notification, { + add: (params) => { + assert.step(params.type); + }, + }); + // O-BTN.doit should call execute_action as the first button is visible + simulateBarCode(["O", "-", "B", "T", "N", ".", "d", "o", "i", "t", "Enter"]); + await nextTick(); + assert.verifySteps(["do_something"]); + } + ); + + QUnit.test("edit, save and cancel buttons", async function (assert) { + await makeView({ + type: "form", + resModel: "product", + serverData, + arch: '
', + mockRPC: function (route, args) { + if (args.method === "web_save") { + assert.step("save"); + } + }, + resId: 1, + }); + + // O-CMD.EDIT + simulateBarCode(["O", "-", "C", "M", "D", ".", "E", "D", "I", "T", "Enter"]); + await nextTick(); + assert.containsOnce(target, ".o_form_editable", "should have switched to 'edit' mode"); + // dummy change to check that it actually saves + await editInput(target.querySelector(".o_field_widget input"), null, "test"); + // O-CMD.SAVE + simulateBarCode(["O", "-", "C", "M", "D", ".", "S", "A", "V", "E", "Enter"]); + await nextTick(); + assert.verifySteps(["save"], "should have saved"); + + // O-CMD.EDIT + simulateBarCode(["O", "-", "C", "M", "D", ".", "E", "D", "I", "T", "Enter"]); + await nextTick(); + // dummy change to check that it correctly discards + await editInput(target.querySelector(".o_field_widget input"), null, "test"); + // O-CMD.CANCEL + simulateBarCode(["O", "-", "C", "M", "D", ".", "D", "I", "S", "C", "A", "R", "D", "Enter"]); + await nextTick(); + assert.verifySteps([], "should not have saved"); + }); + + QUnit.test("pager buttons", async function (assert) { + const mock = mockTimeout(); + + await makeView({ + type: "form", + resModel: "product", + serverData, + arch: '
', + resId: 1, + resIds: [1, 2], + }); + + assert.strictEqual(target.querySelector(".o_field_widget input").value, "Large Cabinet"); + + // O-CMD.PAGER-NEXT + simulateBarCode(["O", "-", "C", "M", "D", ".", "N", "E", "X", "T", "Enter"]); + await nextTick(); + assert.strictEqual( + target.querySelector(".o_field_widget input").value, + "Cabinet with Doors" + ); + + // O-CMD.PAGER-PREV + simulateBarCode(["O", "-", "C", "M", "D", ".", "P", "R", "E", "V", "Enter"]); + await nextTick(); + assert.strictEqual(target.querySelector(".o_field_widget input").value, "Large Cabinet"); + + // O-CMD.PAGER-LAST + simulateBarCode(["O","-","C","M","D",".","P","A","G","E","R","-","L","A","S","T","Enter"]); + // need to await 2 macro steps + await mock.advanceTime(20); + await mock.advanceTime(20); + assert.strictEqual( + target.querySelector(".o_field_widget input").value, + "Cabinet with Doors" + ); + + // O-CMD.PAGER-FIRST + simulateBarCode(["O","-","C","M","D",".","P","A","G","E","R","-","F","I","R","S","T","Enter"]); + // need to await 2 macro steps + await mock.advanceTime(20); + await mock.advanceTime(20); + assert.strictEqual(target.querySelector(".o_field_widget input").value, "Large Cabinet"); + }); +}); diff --git a/barcodes/static/tests/basic/float_scannable_field_test.js b/barcodes/static/tests/basic/float_scannable_field_test.js new file mode 100644 index 0000000..6edcd7d --- /dev/null +++ b/barcodes/static/tests/basic/float_scannable_field_test.js @@ -0,0 +1,142 @@ +/** @odoo-module **/ + +import { nextTick, patchWithCleanup, getFixture } from "@web/../tests/helpers/utils"; +import { makeView, setupViewRegistries } from "@web/../tests/views/helpers"; +import { barcodeGenericHandlers } from "@barcodes/barcode_handlers"; +import { barcodeService } from "@barcodes/barcode_service"; +import { simulateBarCode } from "../helpers"; +import { FormController } from "@web/views/form/form_controller"; +import { registry } from "@web/core/registry"; + +const maxTimeBetweenKeysInMs = barcodeService.maxTimeBetweenKeysInMs; + +let target; +let serverData; + +QUnit.module("Fields", (hooks) => { + hooks.beforeEach(() => { + target = getFixture(); + barcodeService.maxTimeBetweenKeysInMs = 0; + registry.category("services").add("barcode", barcodeService, { force: true }); + registry + .category("services") + .add("barcode_autoclick", barcodeGenericHandlers, { force: true }); + + serverData = { + models: { + product: { + fields: { + name: { string: "Product name", type: "char" }, + float_field: { string: "Float", type: "float" }, + float_field_2: { string: "Float", type: "float" }, + barcode: { string: "Barcode", type: "char" }, + }, + records: [ + { id: 1, name: "Large Cabinet", barcode: "1234567890" }, + { id: 2, name: "Cabinet with Doors", barcode: "0987654321" }, + ], + }, + }, + }; + setupViewRegistries(); + }); + hooks.afterEach(() => { + barcodeService.maxTimeBetweenKeysInMs = maxTimeBetweenKeysInMs; + }); + + QUnit.module("FloatScannableField"); + + QUnit.test("widget field_float_scannable", async function (assert) { + serverData.models.product.records[0].float_field = 4; + + const onBarcodeScanned = (event) => { + assert.step(`barcode scanned ${event.detail.barcode}`); + }; + + const view = await makeView({ + type: "form", + resModel: "product", + serverData, + resId: 1, + arch: /*xml*/ ` +
+ + + + + `, + }); + view.env.services.barcode.bus.addEventListener("barcode_scanned", onBarcodeScanned); + + const inputDiv1 = target.querySelector(".o_field_widget[name=float_field]"); + assert.strictEqual( + inputDiv1.querySelector("input").value, + "4.00", + "should display the correct value" + ); + + // we check here that a scan on the field_float_scannable widget triggers a + // barcode event + inputDiv1.querySelector("input").focus(); + simulateBarCode(["6", "0", "1", "6", "4", "7", "8", "5"], inputDiv1, "input"); + await nextTick(); + assert.verifySteps(["barcode scanned 60164785"]); + assert.strictEqual( + inputDiv1.querySelector("input"), + document.activeElement, + "float field should stay focused" + ); + + // we check here that a scan on the field without widget does not trigger a + // barcode event + const inputDiv2 = target.querySelector(".o_field_widget[name=float_field_2]"); + inputDiv2.querySelector("input").focus(); + simulateBarCode(["6", "0", "1", "6", "4", "7", "8", "5"], inputDiv2, "input"); + await nextTick(); + assert.verifySteps([]); + + view.env.services.barcode.bus.removeEventListener("barcode_scanned", onBarcodeScanned); + }); + + QUnit.test("do no update form twice after a command barcode scanned", async function (assert) { + assert.expect(5); + + patchWithCleanup(FormController.prototype, { + onPagerUpdate() { + assert.step("update"); + return super.onPagerUpdate(...arguments); + }, + }); + + await makeView({ + type: "form", + resModel: "product", + serverData, + arch: /*xml*/ ` +
+ + + + `, + mockRPC(_route, args) { + if (args.method === "web_read") { + assert.step("web_read"); + } + }, + resId: 1, + resIds: [1, 2], + }); + + assert.verifySteps(["web_read"], "update should not have been called yet"); + + // switch to next record + simulateBarCode( + ["O", "-", "C", "M", "D", ".", "N", "E", "X", "T", "Enter"], + document.activeElement + ); + await nextTick(); + // a first update is done to reload the data (thus followed by a read), but + // update shouldn't be called afterwards + assert.verifySteps(["update", "web_read"]); + }); +}); diff --git a/barcodes/static/tests/basic/legacy/barcode_parser_tests.js b/barcodes/static/tests/basic/legacy/barcode_parser_tests.js new file mode 100644 index 0000000..cfcbad9 --- /dev/null +++ b/barcodes/static/tests/basic/legacy/barcode_parser_tests.js @@ -0,0 +1,42 @@ +/** @odoo-module **/ + +import { BarcodeParser } from "@barcodes/js/barcode_parser"; + + +QUnit.module('Barcodes', {}, function () { +QUnit.module('Barcode Parser', function () { + QUnit.test('Test check digit', function (assert) { + assert.expect(6); + const nomenclature = { + id: 1, + name: "normal", + upc_ean_conv: "always", + rules: [ + { + id: 1, + name: "Product Barcodes", + barcode_nomenclature_id: 1, + sequence: 90, + type: "product", + encoding: "any", + pattern: ".*", + }, + ], + }; + const barcodeNomenclature = new BarcodeParser({ nomenclature }); + + let ean8 = "87111125"; + assert.equal(barcodeNomenclature.get_barcode_check_digit(ean8), ean8[ean8.length - 1]); + ean8 = "4725992"; + assert.equal(barcodeNomenclature.get_barcode_check_digit(ean8 + "0"), 8); + let ean13 = "1234567891231"; + assert.equal(barcodeNomenclature.get_barcode_check_digit(ean13), ean13[ean13.length - 1]); + ean13 = "962434754318"; + assert.equal(barcodeNomenclature.get_barcode_check_digit(ean13 + "0"), 4); + let utca = "692771981161"; + assert.equal(barcodeNomenclature.get_barcode_check_digit(utca), utca[utca.length - 1]); + utca = "71679131569"; + assert.equal(barcodeNomenclature.get_barcode_check_digit(utca + "0"), 7); + }); +}); +}); diff --git a/barcodes/static/tests/helpers.js b/barcodes/static/tests/helpers.js new file mode 100644 index 0000000..b6a24ff --- /dev/null +++ b/barcodes/static/tests/helpers.js @@ -0,0 +1,11 @@ +/* @odoo-module */ + +import { triggerEvent } from "@web/../tests/helpers/utils"; + +export function simulateBarCode(chars, target = document.body, selector = undefined) { + for (let char of chars) { + triggerEvent(target, selector, "keydown", { + key: char, + }); + } +} diff --git a/barcodes/static/tests/mobile/barcode_mobile_tests.js b/barcodes/static/tests/mobile/barcode_mobile_tests.js new file mode 100644 index 0000000..7186598 --- /dev/null +++ b/barcodes/static/tests/mobile/barcode_mobile_tests.js @@ -0,0 +1,91 @@ +/** @odoo-module **/ + + import {barcodeService} from "@barcodes/barcode_service"; + import { makeTestEnv } from "@web/../tests/helpers/mock_env"; + import { registry } from "@web/core/registry"; + import testUtils from "@web/../tests/legacy/helpers/test_utils"; + + const maxTimeBetweenKeysInMs = barcodeService.maxTimeBetweenKeysInMs; + const isMobileChrome = barcodeService.isMobileChrome; + var triggerEvent = testUtils.dom.triggerEvent; + + function triggerKeyDown(char, target = document.body) { + triggerEvent(target, 'keydown', { + key: char, + }); + } + + QUnit.module('Barcodes', { + before() { + barcodeService.maxTimeBetweenKeysInMs = 0; + barcodeService.isMobileChrome = true; + registry.category("services").add("barcode", barcodeService, { force: true}); + this.env = makeTestEnv(); + }, + after() { + barcodeService.maxTimeBetweenKeysInMs = maxTimeBetweenKeysInMs; + barcodeService.isMobileChrome = isMobileChrome; + }, + }, function () { + + QUnit.module('Barcodes Mobile'); + + QUnit.test('barcode field automatically focus behavior', function (assert) { + assert.expect(10); + + var $form = $( + '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
' + + '' + + '
'); + $('#qunit-fixture').append($form); + + // Some elements doesn't need to keep the focus + triggerKeyDown('a', document.body) + assert.strictEqual(document.activeElement.name, 'barcode', + "hidden barcode input should have the focus"); + + var $element = $form.find('select'); + $element.focus(); + triggerKeyDown('b', $element[0]); + assert.strictEqual(document.activeElement.name, 'barcode', + "hidden barcode input should have the focus"); + + // Those elements absolutely need to keep the focus: + // inputs elements: + var keepFocusedElements = ['email', 'number', 'password', 'tel', + 'text', 'explicit_text']; + for (var i = 0; i < keepFocusedElements.length; ++i) { + $element = $form.find('input[name=' + keepFocusedElements[i] + ']'); + $element.focus(); + triggerKeyDown('c', $element[0]); + + assert.strictEqual(document.activeElement, $element[0], + "input " + keepFocusedElements[i] + " should keep focus"); + } + // textarea element + $element = $form.find('textarea'); + $element.focus().keydown(); + assert.strictEqual(document.activeElement, $element[0], + "textarea should keep focus"); + // contenteditable elements + $element = $form.find('[contenteditable=true]'); + $element.focus(); + triggerKeyDown('d', $element[0]); + assert.strictEqual(document.activeElement, $element[0], + "contenteditable should keep focus"); + + $('#qunit-fixture').empty(); + document.querySelector('input[name=barcode]').remove(); + }); + }); diff --git a/barcodes/tests/__init__.py b/barcodes/tests/__init__.py new file mode 100644 index 0000000..6188e48 --- /dev/null +++ b/barcodes/tests/__init__.py @@ -0,0 +1 @@ +from . import test_barcode_nomenclature diff --git a/barcodes/tests/test_barcode_nomenclature.py b/barcodes/tests/test_barcode_nomenclature.py new file mode 100644 index 0000000..b131697 --- /dev/null +++ b/barcodes/tests/test_barcode_nomenclature.py @@ -0,0 +1,249 @@ +# -*- coding: utf-8 -*- +from odoo.exceptions import ValidationError +from odoo.tests import common + + +class TestBarcodeNomenclature(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + # Creates an empty nomenclature (rules will be added in the tests). + cls.nomenclature = cls.env['barcode.nomenclature'].create({ + 'name': 'Barcode Nomenclature Test', + }) + + def test_barcode_nomenclature_parse_barcode_ean8_01(self): + """ Parses some barcodes with a simple EAN-8 barcode rule and checks the result. + """ + self.env['barcode.rule'].create({ + 'name': 'Rule Test #1', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean8', + 'pattern': '........', + }) + + # Must fail because too short. + res = self.nomenclature.parse_barcode('0002') + self.assertEqual(res['code'], '0002') + self.assertEqual(res['type'], 'error', "Must fail because the barcode is too short") + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '0002') + self.assertEqual(res['value'], 0) + + # Must fail because wrong checksum (last digit). + res = self.nomenclature.parse_barcode('12345678') + self.assertEqual(res['code'], '12345678') + self.assertEqual(res['type'], 'error', "Must fail because the checksum digit is wrong") + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '12345678') + self.assertEqual(res['value'], 0) + + # Must pass (right number of digits, right checksum). + res = self.nomenclature.parse_barcode('12345670') + self.assertEqual(res['code'], '12345670') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean8') + self.assertEqual(res['base_code'], '12345670') + self.assertEqual(res['value'], 0, "No value must be located into the barcode") + + # Must pass (right number of digits, right checksum). + res = self.nomenclature.parse_barcode('02003405') + self.assertEqual(res['code'], '02003405') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean8') + self.assertEqual(res['base_code'], '02003405') + self.assertEqual(res['value'], 0, "No value must be located into the barcode") + + def test_barcode_nomenclature_parse_barcode_ean8_02_validation_error(self): + """ Try to parse a barcode with a wrong barcode rule. + """ + barcode_rule = self.env['barcode.rule'].create({ + 'name': 'Rule Test #1', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean8', + }) + + with self.assertRaises(ValidationError), self.cr.savepoint(): + # Must fail because empty braces. + barcode_rule.pattern = '......{}..' + + with self.assertRaises(ValidationError), self.cr.savepoint(): + # Must fail because decimal can't be before integer. + barcode_rule.pattern = '......{DN}' + + with self.assertRaises(ValidationError), self.cr.savepoint(): + # Must fail because a pattern can't have multiple braces group. + barcode_rule.pattern = '....{NN}{DD}' + + with self.assertRaises(ValidationError), self.cr.savepoint(): + # Must fail because '*' isn't accepted (should be '.*' instead). + barcode_rule.pattern = '*' + + def test_barcode_nomenclature_parse_barcode_ean8_03_value(self): + """ Parses some barcodes with a EAN-8 barcode rule who convert the + barcode into value and checks the result. + """ + self.env['barcode.rule'].create({ + 'name': 'Rule Test #2', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean8', + 'pattern': '{NNNNNNNN}', + }) + + res = self.nomenclature.parse_barcode('0002') + self.assertEqual(res['code'], '0002') + self.assertEqual(res['type'], 'error', "Must fail because the barcode is too short") + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '0002') + self.assertEqual(res['value'], 0) + + res = self.nomenclature.parse_barcode('12345678') + self.assertEqual(res['code'], '12345678') + self.assertEqual(res['type'], 'error', "Must fail because the checksum digit is wrong") + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '12345678') + self.assertEqual(res['value'], 0) + + # Must pass (right number of digits, right checksum). + res = self.nomenclature.parse_barcode('12345670') + self.assertEqual(res['code'], '12345670') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean8') + self.assertEqual(res['base_code'], '00000000', + "All the barcode should be consumed into the value") + self.assertEqual(res['value'], 12345670.0, "The barcode must be converted into value") + + # Must pass (right number of digits, right checksum). + res = self.nomenclature.parse_barcode('02003405') + self.assertEqual(res['code'], '02003405') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean8') + self.assertEqual(res['base_code'], '00000000', + "All the barcode should be consumed into the value") + self.assertEqual(res['value'], 2003405.0, "The barcode must be converted into value") + + def test_barcode_nomenclature_parse_barcode_ean8_04_multiple_rules(self): + """ Parses some barcodes with a nomenclature containing multiple EAN-8 + barcode rule and checks the right one is took depending of the pattern. + """ + self.env['barcode.rule'].create({ + 'name': 'Rule Test #1', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean8', + 'pattern': '11.....{N}', + }) + self.env['barcode.rule'].create({ + 'name': 'Rule Test #1', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean8', + 'pattern': '66{NN}....', + }) + + # Only fits the second barcode rule. + res = self.nomenclature.parse_barcode('11012344') + self.assertEqual(res['code'], '11012344') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean8') + self.assertEqual(res['base_code'], '11012340') + self.assertEqual(res['value'], 4) + + # Only fits the second barcode rule. + res = self.nomenclature.parse_barcode('66012344') + self.assertEqual(res['code'], '66012344') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean8') + self.assertEqual(res['base_code'], '66002344') + self.assertEqual(res['value'], 1) + + # Doesn't fit any barcode rule. + res = self.nomenclature.parse_barcode('16012344') + self.assertEqual(res['code'], '16012344') + self.assertEqual(res['type'], 'error') + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '16012344') + self.assertEqual(res['value'], 0) + + def test_barcode_nomenclature_parse_barcode_ean13_01(self): + """ Parses some barcodes with a EAN-13 barcode rule who contains a value + and checks the result. + """ + self.env['barcode.rule'].create({ + 'name': 'Rule Test #3', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean13', + 'pattern': '1........{NND}.', + }) + + # Must fail because too short. + res = self.nomenclature.parse_barcode('0002') + self.assertEqual(res['code'], '0002') + self.assertEqual(res['type'], 'error', "Must fail because the barcode is too short") + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '0002') + self.assertEqual(res['value'], 0) + + # Must fail because wrong checksum (last digit). + res = self.nomenclature.parse_barcode('12345678') + self.assertEqual(res['code'], '12345678') + self.assertEqual(res['type'], 'error', "Must fail because the checksum digit is wrong") + self.assertEqual(res['encoding'], '') + self.assertEqual(res['base_code'], '12345678') + self.assertEqual(res['value'], 0) + + # Must pass (right number of digits, right checksum). + res = self.nomenclature.parse_barcode('1020034051259') + self.assertEqual(res['code'], '1020034051259') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean13') + self.assertEqual(res['base_code'], '1020034050009') + self.assertEqual(res['value'], 12.5, "Should taken only the value part (NND)") + + def test_barcode_nomenclature_parse_barcode_ean13_02_sequence(self): + """ Parses some barcodes with a nomenclature containing two EAN-13 + barcode rule and checks the good one is took depending of its sequence. + """ + first_created_rule = self.env['barcode.rule'].create({ + 'name': 'Rule Test #1', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean13', + 'pattern': '.....{NNNDDDD}.', + 'sequence': 3, + }) + self.env['barcode.rule'].create({ + 'name': 'Rule Test #2', + 'barcode_nomenclature_id': self.nomenclature.id, + 'encoding': 'ean13', + 'pattern': '22......{NNDD}.', + 'sequence': 2, + }) + + # Invalids the cache to reset the nomenclature barcode rules' order. + self.nomenclature.invalidate_recordset(['rule_ids']) + + # Only fits the second barcode rule. + res = self.nomenclature.parse_barcode('2012345610255') + self.assertEqual(res['code'], '2012345610255') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean13') + self.assertEqual(res['base_code'], '2012300000008') + self.assertEqual(res['value'], 456.1025) + + # Fits the two barcode rules, but should take the second one (lower sequence). + res = self.nomenclature.parse_barcode('2212345610259') + self.assertEqual(res['code'], '2212345610259') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean13') + self.assertEqual(res['base_code'], '2212345600007') + self.assertEqual(res['value'], 10.25) + + first_created_rule.sequence = 1 + # Invalids the cache to reset the nomenclature barcode rules' order. + self.nomenclature.invalidate_recordset(['rule_ids']) + + # Should take the first one now (lower sequence). + res = self.nomenclature.parse_barcode('2212345610259') + self.assertEqual(res['code'], '2212345610259') + self.assertEqual(res['type'], 'product') + self.assertEqual(res['encoding'], 'ean13') + self.assertEqual(res['base_code'], '2212300000002') + self.assertEqual(res['value'], 456.1025) diff --git a/barcodes/views/barcodes_view.xml b/barcodes/views/barcodes_view.xml new file mode 100644 index 0000000..5b0e553 --- /dev/null +++ b/barcodes/views/barcodes_view.xml @@ -0,0 +1,82 @@ + + + + + Barcode Nomenclatures + barcode.nomenclature + +
+ + + + + +
+

+ Barcodes Nomenclatures define how barcodes are recognized and categorized. + When a barcode is scanned it is associated to the first rule with a matching + pattern. The pattern syntax is that of regular expression, and a barcode is matched + if the regular expression matches a prefix of the barcode. +

+ Patterns can also define how numerical values, such as weight or price, can be + encoded into the barcode. They are indicated by {NNN} where the N's + define where the number's digits are encoded. Floats are also supported with the + decimals indicated with D's, such as {NNNDD}. In these cases, + the barcode field on the associated records must show these digits as + zeroes. +

+
+ + + + + + + + + +
+
+
+
+ + + Barcode Nomenclatures + barcode.nomenclature + + + + + + + + + Barcode Nomenclatures + barcode.nomenclature + tree,kanban,form + +

+ Add a new barcode nomenclature +

+ A barcode nomenclature defines how the point of sale identify and interprets barcodes +

+
+
+ + + Barcode Rule + barcode.rule + +
+ + + + + + + + +
+
+
+
diff --git a/barcodes_gs1_nomenclature/__init__.py b/barcodes_gs1_nomenclature/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/barcodes_gs1_nomenclature/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/barcodes_gs1_nomenclature/__manifest__.py b/barcodes_gs1_nomenclature/__manifest__.py new file mode 100644 index 0000000..671103a --- /dev/null +++ b/barcodes_gs1_nomenclature/__manifest__.py @@ -0,0 +1,24 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'Barcode - GS1 Nomenclature', + 'version': '1.0', + 'category': 'Hidden', + 'summary': 'Parse barcodes according to the GS1-128 specifications', + 'depends': ['barcodes', 'uom'], + 'data': [ + 'data/barcodes_gs1_rules.xml', + 'views/barcodes_view.xml', + ], + 'installable': True, + 'assets': { + 'web.assets_backend': [ + 'barcodes_gs1_nomenclature/static/src/js/barcode_parser.js', + 'barcodes_gs1_nomenclature/static/src/js/barcode_service.js', + ], + 'web.qunit_suite_tests': [ + 'barcodes_gs1_nomenclature/static/src/js/tests/**/*', + ], + }, + 'license': 'LGPL-3', +} diff --git a/barcodes_gs1_nomenclature/data/barcodes_gs1_rules.xml b/barcodes_gs1_nomenclature/data/barcodes_gs1_rules.xml new file mode 100644 index 0000000..c06b14b --- /dev/null +++ b/barcodes_gs1_nomenclature/data/barcodes_gs1_rules.xml @@ -0,0 +1,338 @@ + + + + + Default GS1 Nomenclature + true + + + + + Serial Shipping Container Code + + 100 + gs1-128 + (00)(\d{18}) + package + identifier + + + + Global Trade Item Number (GTIN) + + 101 + gs1-128 + (01)(\d{14}) + product + identifier + + + + GTIN of contained trade items + + 102 + gs1-128 + (02)(\d{14}) + product + identifier + + + + Ship to / Deliver to Global Location Number (GLN) + + 110 + gs1-128 + (410)(\d{13}) + location_dest + identifier + + + + Ship for / Deliver for - Forward to Global Location Number (GLN) + + 113 + gs1-128 + (413)(\d{13}) + location_dest + identifier + + + + Identification of a physical location - Global Location Number (GLN) + + 114 + gs1-128 + (414)(\d{13}) + location + identifier + + + + + Batch or lot number + + 125 + gs1-128 + (10)([!"%-/0-9:-?A-Z_a-z]{0,20}) + lot + alpha + + + + Serial number + + 126 + gs1-128 + (21)([!"%-/0-9:-?A-Z_a-z]{0,20}) + lot + alpha + + + + + Pack date (YYMMDD) + + 137 + gs1-128 + (13)(\d{6}) + pack_date + date + + + + Best before date (YYMMDD) + + 138 + gs1-128 + (15)(\d{6}) + use_date + date + + + + Expiration date (YYMMDD) + + 139 + gs1-128 + (17)(\d{6}) + expiration_date + date + + + + + Variable count of items (variable measure trade item) + + 300 + gs1-128 + (30)(\d{0,8}) + + quantity + measure + False + + + + Count of trade items or trade item pieces contained in a logistic unit + + 305 + gs1-128 + (37)(\d{0,8}) + + quantity + measure + False + + + + Net weight, kilograms (variable measure trade item) + + 310 + gs1-128 + (310[0-5])(\d{6}) + + quantity + measure + True + + + + Length or first dimension, metres (variable measure trade item) + + 311 + gs1-128 + (311[0-5])(\d{6}) + + quantity + measure + True + + + + Area, square meters (variable measure trade item) + + 314 + gs1-128 + (314[0-5])(\d{6}) + + quantity + measure + True + + + + Net volume, litres (variable measure trade item) + + 315 + gs1-128 + (315[0-5])(\d{6}) + + quantity + measure + True + + + + Net volume, cubic metres (variable measure trade item) + + 316 + gs1-128 + (316[0-5])(\d{6}) + + quantity + measure + True + + + + Net weight, pounds (variable measure trade item) + + 320 + gs1-128 + (320[0-5])(\d{6}) + + quantity + measure + True + + + + Length or first dimension, inches (variable measure trade item) + + 321 + gs1-128 + (321[0-5])(\d{6}) + + quantity + measure + True + + + + Length or first dimension, feet (variable measure trade item) + + 322 + gs1-128 + (322[0-5])(\d{6}) + + quantity + measure + True + + + + Length or first dimension, yards (variable measure trade item) + + 323 + gs1-128 + (322[0-5])(\d{6}) + + quantity + measure + True + + + + Area, square feet (variable measure trade item) + + 351 + gs1-128 + (351[0-5])(\d{6}) + + quantity + measure + True + + + + Net weight (or volume), ounces (variable measure trade item) + + 357 + gs1-128 + (357[0-5])(\d{6}) + + quantity + measure + True + + + + Net volume, quarts (variable measure trade item) + + 360 + gs1-128 + (360[0-5])(\d{6}) + + quantity + measure + True + + + + Net volume, gallons U.S. (variable measure trade item) + + 361 + gs1-128 + (361[0-5])(\d{6}) + + quantity + measure + True + + + + Net volume, cubic inches (variable measure trade item) + + 364 + gs1-128 + (364[0-5])(\d{6}) + + quantity + measure + True + + + + Net volume, cubic feet (variable measure trade item) + + 365 + gs1-128 + (365[0-5])(\d{6}) + + quantity + measure + True + + + + + Package type + + 500 + gs1-128 + (91)([!"%-/0-9:-?A-Z_a-z]{0,90}) + package_type + alpha + + + diff --git a/barcodes_gs1_nomenclature/i18n/ar.po b/barcodes_gs1_nomenclature/i18n/ar.po new file mode 100644 index 0000000..b55d657 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/ar.po @@ -0,0 +1,259 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "اسم يحتوي على أحرف وأرقام " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"حد التعبير النمطي البديل لـ FNC1. يجب ألا يطابق الفاصل بداية/نهاية نمط أي " +"قواعد ذات صلة. " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "وحدة القياس المرتبطة " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "تسمية الباركود" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "قاعدة الباركود" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "مثالي قبل تاريخ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "التاريخ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "عشري " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "موقع الوجهة " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "التشفير" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "تاريخ الانتهاء " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "فاصل FNC1 " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "نوع محتوى GS1 " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "مسار HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"إذا كانت القيمة صحيحة، استخدم الرقم الأخير من الذكاء الاصطناعي لتحديد مكان " +"وضع الفاصلة الأولى " + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "الباركود غير صالح: لا يمكن صياغته كتاريخ " + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "الباركود غير صالح: رقم التحقق غير صحيح " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "تسمية GS1 " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "الموقع " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "المجموعة " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "المقياس" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "المعرف الرقمي " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "تاريخ التعبئة " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "الطرد " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "نوع الطرد" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "الكمية" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "بديل فاصل FNC1 ليس تعبيراً نمطياً صالحاً: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"يحدد نوع محتوى GS1 نوع البيانات التي سوف تقوم القاعدة بمعالجة البيانات " +"الباركود على هيئتها: * التاريخ: سوف يتم تحويل الباركود بتوقيت وتاريخ " +"أودو؛ * القياس: قيمة الباركود مرتبطة بوحدة قياس محددة؛ * " +"المعرف الرقمي: باركود ذو طول ثابت يتبع ترميزاً محدداً; *اسم يحتوي على" +" أحرف وأرقام: باركود ذو أطوال متفاوتة. " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "نمط القاعدة \"%s\" ليس تعبيراً نمطياً صالحاً: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"نمط القاعدة \"%s\" غير صالح، يحتاج إلى مجموعتين:\n" +"\t- الأولى لمعرّف التطبيق (عادة ما يكون من رقمين 2 أو 4)؛\n" +"\t- والثانية لرصد القيمة. " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"هناك خطأ ما في نمط قاعدة الباركود \"%s\".\n" +"إذا كانت هذه القائمة تستخدم الفواصل العشرية، تحقق من أن الخانة الأخيرة تتكون من رقم وليس أي شيء آخر لمعرّف التطبيق.\n" +"تأكد أيضاً من كون القيم المتطابقة المحتملة أرقاماً فقط، وإلا فلن تتم صياغة القيمة كوحدة قياس. " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"تستخدم هذه التسمية مواصفات GS1. وحدها قواعد ترميز GS1-128 المقبولة في هذا " +"النوع من التسمية. " + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "لا يمكن تحليل الباركود من قِبَل أي قواعد باركود. " + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "لا يمكن تحليل هذا الباركود جزئياً أو كلياً. " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"ستُطبق هذه القاعدة فقط إذا كان الباركود مُشفرًا بطريقة التشفير المحددة" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "النوع" diff --git a/barcodes_gs1_nomenclature/i18n/barcodes_gs1_nomenclature.pot b/barcodes_gs1_nomenclature/i18n/barcodes_gs1_nomenclature.pot new file mode 100644 index 0000000..ed3f1c8 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/barcodes_gs1_nomenclature.pot @@ -0,0 +1,237 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 21:55+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "" diff --git a/barcodes_gs1_nomenclature/i18n/bg.po b/barcodes_gs1_nomenclature/i18n/bg.po new file mode 100644 index 0000000..2746edb --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/bg.po @@ -0,0 +1,247 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Albena Mincheva , 2023 +# Igor Sheludko , 2023 +# KeyVillage, 2023 +# Maria Boyadjieva , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Баркодова номенклатура " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Правило за баркод" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Най-добър до" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Дата" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Локация на местонахождение" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодиране" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Дата на изтичане срока на годност" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Локация" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Партида" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Измервайте " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Пакет" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Вид пакет" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Количество" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Това правило ще се приложи, само ако баркодът е кодиран със специфична " +"кодировка" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Вид" diff --git a/barcodes_gs1_nomenclature/i18n/ca.po b/barcodes_gs1_nomenclature/i18n/ca.po new file mode 100644 index 0000000..bc1d3b2 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/ca.po @@ -0,0 +1,271 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Eugeni Chafer , 2023 +# Ivan Espinola, 2023 +# Marc Tormo i Bochaca , 2023 +# Arnau Ros, 2023 +# RGB Consulting , 2023 +# marcescu, 2023 +# Josep Anton Belchi, 2023 +# Quim - eccit , 2023 +# Sandra Franch , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nom alfanumèric" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Delimitador d'expressió regular alternatiu per al FNC1. El separador no ha " +"de coincidir amb l'inici/final de cap patró de regles relacionat." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Uom associada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclatura del codi de barres" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regla del codi de barres" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Data de consum preferent " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Ubicació destí" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificació" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Data d'expiració " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separador FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tipus de contingut GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutament HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Si és cert, utilitzeu l'últim dígit de la IA per a determinar on és el " +"primer decimal" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Codi de barres no vàlid: no es pot formatar com a data" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Codi de barres no vàlid: el dígit de comprovació és incorrecte" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "És la nomenclatura GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Ubicació" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mida" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identificador numèric" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Data del paquet" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paquet" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipus de paquet" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Quantitat" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "El separador alternatiu FNC1 no és un Regex vàlid:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"El tipus de contingut GS1 defineix quin tipus de dades processarà el codi de" +" barres com: * Data: el codi de barres es convertirà en una data-hora " +"d'Odoo; * Mesura: el valor del codi de barres està relacionat amb un " +"UoM específic; * Identificador numèric: codi de barres de longitud " +"fixa seguint una codificació específica; * Alfa-Numèric: codi de " +"barres de longitud variable." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "El patró de la regla\"%s\" no és un Regex vàlid:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"El patró de la regla \"%s\"no és vàlid, necessita dos grups:\n" +"\t- Un primer per a l'identificador de l'aplicació (normalment de 2 a 4 dígits);\n" +"\t- Una segona per a captar el valor." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Hi ha alguna cosa que no funciona amb la regla de codi de barres \"%s\" patró.\n" +"Si aquesta regla utilitza decimal, comprova que no pot obtenir un altre temps que un dígit com a últim char per a l'identificador d'aplicació.\n" +"Comprova també els possibles valors coincidents només poden ser dígits, en cas contrari el valor no es pot fer com a mesura." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Aquesta nomenclatura utilitza l'especificació GS1, només s'accepten les " +"regles de codificació GS1-128 és aquest tipus de nomenclatura." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Aquest codi de barres no es pot analitzar per cap regla de codi de barres." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Aquest codi de barres no es pot analitzar parcialment o completament." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Aquesta regla només s'aplicarà si el codi de barres està codificat amb la " +"codificació especificada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipus" diff --git a/barcodes_gs1_nomenclature/i18n/cs.po b/barcodes_gs1_nomenclature/i18n/cs.po new file mode 100644 index 0000000..d33d121 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/cs.po @@ -0,0 +1,246 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# Aleš Fiala , 2023 +# Jakub Smolka, 2024 +# Jiří Podhorecký , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jiří Podhorecký , 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenklatura čárového kódu" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Pravidlo čárového kódu" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Minimální trvanlivost" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Desetinný" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Cílové umístění" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kódování" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Datum platnosti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Typ obsahu GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Místo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Dávka" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Opatření" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Číselný identifikátor" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Datum balení" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Balení" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Typ balení" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Množství" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Toto pravidlo platí pouze v případě, že je čárový kód kódován zadaným " +"kódováním" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Typ" diff --git a/barcodes_gs1_nomenclature/i18n/da.po b/barcodes_gs1_nomenclature/i18n/da.po new file mode 100644 index 0000000..abb1986 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/da.po @@ -0,0 +1,244 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# lhmflexerp , 2023 +# Mads Søndergaard, 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Alfanumerisk Navn" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Associeret Måleenhed" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Stregkode plan" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Stregkode regler" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Bedst før (dato)" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Dato" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Destionation" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodning" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Udløbsdato" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 Indholdstype" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Ugyldig stregkode: Kan ikke formateres til en dato" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Ugyldig stregkode: check cifret er ikke korrekt" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Er GS1 Nomenklatur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Adresse" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mål" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numerisk identifikator" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Pakke" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Pakke type" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Antal" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Regelmønstret \"%s\" er ikke en gyldig Regex:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Denne stregkode kan ikke aflæses ud fra nogen stregkode regler" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Denne stregkode kan ikke aflæses delvist eller fuldt " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Denne regel gælder kun hvis stregkoden er kodet med den angivne kodning" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Type" diff --git a/barcodes_gs1_nomenclature/i18n/de.po b/barcodes_gs1_nomenclature/i18n/de.po new file mode 100644 index 0000000..872cd7d --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/de.po @@ -0,0 +1,260 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Alphanumerischer Name" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Alternatives Regex-Trennzeichen für FNC1. Das Trennzeichen darf nicht mit " +"dem Anfang/Ende eines verwandten Regelmusters übereinstimmen." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Zugehörige Maßeinheit" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Barcode-Nomenklatur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Barcoderegel" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Mindesthaltbarkeitsdatum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Dezimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Ziellagerort" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codierung" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Ablaufdatum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1-Trennzeichen" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1-Inhaltstyp" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-Routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Wenn Wahr, wird die letzte Ziffer von KI verwendet, um zu bestimmen, wo die " +"erste Dezimalstelle ist" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Ungültiger Barcode: Kann nicht als Datum formatiert werden" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Ungültiger Barcode: die Prüfziffer ist falsch" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Ist GS1-Nomenklatur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Lagerort" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Los" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Kennzahl" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numerische Kennung" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Verpackungsdatum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paketreferenz" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Pakettyp" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Menge" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Die FNC1-Trennzeichenalternative ist kein regulärer Ausdruck:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Der GS1-Inhaltstyp legt fest, als welche Art von Daten die Regel den Barcode" +" verarbeiten wird: * Datum: der Barcode wird in eine Odoo-Datumszeit " +"umgewandelt; * Kennzahl: der Wert des Barcodes bezieht sich auf eine " +"bestimmte Maßeinheit; * Numerische Kennung: Barcode mit fester Länge, der " +"einer bestimmten Codierung folgt; * Alphanumerischer Name: Barcode mit " +"variabler Länge." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Das Regelmuster „%s“ ist kein gültiger Regex:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Das Regelmuster „%s“ ist nicht gültig, es braucht zwei Gruppen:\n" +"\t- Eine erste für die Anwendungskennung (in der Regel 2- bis 4-stellig);\n" +"\t- Eine zweite, um den Wert zu erfassen." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Mit der Barcode-Regel „%s“ ist etwas nicht in Ordnung.\n" +"Wenn diese Regel Dezimalzahlen verwendet, stellen Sie sicher, dass nur Ziffern für den Application Identifier enthalten sind.\n" +"Stellen Sie sicher, dass mögliche übereinstimmende Werte nur Ziffern enthalten, da der Wert sonst nicht als Kennzahl zugeordnet werden kann." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Diese Nomenklatur verwendet die GS1-Spezifikation, nur die " +"GS1-128-Kodierungsregeln werden für diese Art von Nomenklatur akzeptiert." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Dieser Barcode kann von keiner Barcode-Regel geparst werden." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Dieser Barcode kann weder ganz noch teilweise geparst werden." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Diese Regel greift nur, wenn der Barcode in angegebener Codierung vorliegt." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Typ" diff --git a/barcodes_gs1_nomenclature/i18n/es.po b/barcodes_gs1_nomenclature/i18n/es.po new file mode 100644 index 0000000..a661f6b --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/es.po @@ -0,0 +1,266 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# Larissa Manderfeld, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2024\n" +"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nombre alfanumérico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Delimitador automático regex para el FNC1. El separador no debe tener el " +"mismo inicio o fin de cualquier patrón de reglas relacionado." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "UdM asociada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de código de barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regla de código de barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Fecha de consumo preferente" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Fecha" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Ubicación de destino" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificación" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Fecha de expiración" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separador FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tipo de contenido GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Si es \"true\", use el último dígito de IA para determinar dónde está el " +"primer decimal" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Código de barras no válido: no se puede formatear como fecha" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Código de barras no válido: revise si el dígito es correcto" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Es nomenclatura GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Ubicación" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lote" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Medida" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identificador numérico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Fecha de empaquetado" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paquete" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipo de paquete" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "La alternativa de separador FNC1 no es un regex válido:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"El tipo de contenido GS1 define como qué tipo de reglas de datos se " +"procesará el código de barras: * Fecha: El código de barras se " +"convertirá en una fecha y hora de Odoo; * Medida: el valor del código" +" de barras está relacionado a una UdM específica; * Identificador " +"numérico: código de barras de un largo fijo que sigue una codificación " +"específica; * Nombre alfanumérico: código de barras de tamaño " +"variable." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "El patrón de regla \"%s\" no es un regex válido:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"El patrón de regla \"%s\" no es válido, necesita dos grupos:\n" +"\t- Un primer grupo para el identificador de aplicación (usualmente de 2 a 4 dígitos);\n" +"\t- Un segundo grupo para capturar el valor." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Ocurre un error con el patrón de la regla \"%s\" del código de barras.\n" +"Si esta regla usa un decimal, verifique si no puede obtener algo más aparte de un dígito como último carácter para el identificador de aplicación.\n" +"Compruebe también si los valores emparejados posibles solo pueden ser dígitos, de lo contrario no puede usar el valor como medida." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Esta nomenclatura usa la especificación GS1, solo las reglas de codificación" +" GS1-128 se aceptan en este tipo de nomenclatura." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Este código de barras no se puede analizar por ninguna regla de código de " +"barras." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" +"Este código de barras no se puede analizar parcialmente ni completamente." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regla solo aplicará si el código de barras está codificado con la " +"codificación especificada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" diff --git a/barcodes_gs1_nomenclature/i18n/es_419.po b/barcodes_gs1_nomenclature/i18n/es_419.po new file mode 100644 index 0000000..b57a625 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/es_419.po @@ -0,0 +1,263 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 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:55+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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nombre alfanumérico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Delimitador automático regex para el FNC1. El separador no debe tener el " +"mismo inicio o fin de cualquier patrón de reglas relacionado." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "UdM asociada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclatura del código de barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regla del código de barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Fecha de consumo preferente" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Fecha" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Ubicación de destino" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificación" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Fecha de caducidad" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separador FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tipo de contenido GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Si es \"true\", use el último dígito de AI para determinar dónde está el " +"primer decimal" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Código de barras no válido: no se puede dar el formato de fecha" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Código de barras no válido: revise si el dígito es correcto" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Es nomenclatura GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Ubicación" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lote" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Medida" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identificador numérico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Fecha de empaquetado" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paquete" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipo de paquete" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Cantidad" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "La alternativa de separador FNC1 no es un regex válido:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"El tipo de contenido GS1 define como qué tipo de reglas de datos se " +"procesará el código de barras: * Fecha: El código de barras se convertirá en" +" una fecha y hora de Odoo; * Medida: el valor del código de barras está " +"relacionado a una UdM específica; * Identificador numérico: código de barras" +" de un largo fijo que sigue una codificación específica; * Nombre " +"alfanumérico: código de barras de diferentes tamaños." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "El patrón de regla \"%s\" no es un regex válido:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"El patrón de regla \"%s\" no es válido, necesita dos grupos:\n" +"\t- El primero para el identificador de aplicación (usualmente de 2 a 4 dígitos);\n" +"\t- El segundo para capturar el valor." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Ocurre un error con el patrón de la regla \"%s\" del código de barras.\n" +"Si esta regla usa un decimal, verifique si no puede obtener algo más aparte de un dígito como último carácter para el identificador de aplicación.\n" +"Compruebe también si los valores emparejados posibles solo pueden ser dígitos, de lo contrario no puede usar el valor como medida." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Esta nomenclatura usa la especificación GS1, solo se aceptan las reglas de " +"codificación GS1-128 en este tipo de nomenclatura." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Ninguna regla de código de barras puede analizar este código." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" +"Este código de barras no se puede analizar de forma parcial ni completa." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regla solo aplicará si el código de barras tiene la codificación " +"especificada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" diff --git a/barcodes_gs1_nomenclature/i18n/et.po b/barcodes_gs1_nomenclature/i18n/et.po new file mode 100644 index 0000000..a0bed9b --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/et.po @@ -0,0 +1,259 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Birgit Vijar, 2023 +# Martin Trigaux, 2023 +# Piia Paurson , 2023 +# JanaAvalah, 2023 +# Triine Aavik , 2023 +# Arma Gedonsky , 2023 +# Egon Raamat , 2023 +# Leaanika Randmets, 2023 +# Anna, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Anna, 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Tähe-numbriline nimi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Seotud mõõtühik" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Triipkoodi nomenklatuur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Triipkoodi reegel" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Parim enne kuupäev" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Kuupäev" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Kümnend" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Sihtkoha asukoht" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodeerimine" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Aegumiskuupäev" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 eraldaja" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 sisu tüüp" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Kehtetu triipkood: ei saa kuupäevana vormindada" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Kehtetu triipkood: kontrollnumber on vale" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "On GS1 nomenklatuur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Asukoht" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Partii" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mõõt" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numbriline identifikaator" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Paki kuupäev" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Pakend" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Pakendi tüüp" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Kogus" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Reegli muster \"%s\" ei kehti, see vajab kahte gruppi:\n" +"- Esimene rakenduse identifikaator (tavaliselt 2–4 numbrit);\n" +"- Teine, et väärtust tabada." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Triipkoodireegli \"%s\" mustriga on midagi valesti.\n" +"Kui see reegel kasutab kümnendsüsteemi, kontrollige, et see ei saaks rakenduse identifikaatori viimase tähena kunagi midagi muud kui numbrit.\n" +"Kontrollige ka, et võimalikud sobitatud väärtused võivad olla ainult numbrid, vastasel juhul ei saa väärtust mõõta." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"See nomenklatuur kasutab GS1 spetsifikatsiooni, seda tüüpi nomenklatuuri " +"puhul aktsepteeritakse ainult GS1-128 kodeerimisreegleid." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Seda triipkoodi ei saa parsida ühegi triipkoodi reegliga." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Seda triipkoodi ei saa osaliselt või täielikult parsida." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"See reegel kehtib ainult siis kui triipkood on kodeeritud määratud " +"kodeeringuga" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tüüp" diff --git a/barcodes_gs1_nomenclature/i18n/fa.po b/barcodes_gs1_nomenclature/i18n/fa.po new file mode 100644 index 0000000..0655616 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/fa.po @@ -0,0 +1,255 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Mohsen Mohammadi , 2023 +# Hamid Darabi, 2023 +# Hamid Ahmadimoghaddam, 2023 +# Hamed Mohammadi , 2023 +# Hanna Kheradroosta, 2023 +# Martin Trigaux, 2023 +# Mostafa Barmshory , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Mostafa Barmshory , 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "نام الفا عددی" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"جداکننده regex جایگزین برای FNC1. جداکننده نباید با شروع/پایان هیچ الگوی " +"قوانین مرتبط مطابقت داشته باشد." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "مرتبط Uom" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "نامگذاری بارکد" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "قانون بارکد" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "بهترین تاریخ مصرف" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "تاریخ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "عددی" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "مکان مقصد" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "رمزگذاری" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "تاریخ انقضا" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "جداکننده FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "نوع محتوای GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "مسیریابی HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"اگر درست است، از آخرین رقم هوش مصنوعی برای تعیین اینکه اولین اعشار کجاست " +"استفاده کنید" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "بارکد نامعتبر: نمی توان آن را به عنوان تاریخ قالب بندی کرد" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "بارکد نامعتبر: رقم بررسی نادرست است" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "نامگذاری GS1 است" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "مکان" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "سری ساخت" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "ندازه" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "شناسه عددی" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "تاریخ بسته بندی" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "بسته" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "نوع بسته‌بندی" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "تعداد" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "جایگزین جداکننده FNC1 یک Regex معتبر نیست:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"این نامگذاری از مشخصات GS1 استفاده می کند، تنها قوانین رمزگذاری GS1-128 " +"پذیرفته شده است که این نوع نامگذاری است." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "این بارکد با هیچ قانون بارکد قابل تجزیه نیست." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "این بارکد را نمی توان به طور جزئی یا کامل تجزیه کرد." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"این قانون فقط در صورتی اعمال می شود که بارکد با کدگذاری مشخص شده کدگذاری شده" +" باشد" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "نوع" diff --git a/barcodes_gs1_nomenclature/i18n/fi.po b/barcodes_gs1_nomenclature/i18n/fi.po new file mode 100644 index 0000000..ca08b6d --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/fi.po @@ -0,0 +1,268 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Veikko Väätäjä , 2023 +# Jarmo Kortetjärvi , 2023 +# Kari Lindgren , 2023 +# Tuomas Lyyra , 2023 +# Martin Trigaux, 2023 +# Marko Happonen , 2023 +# Tuomo Aura , 2023 +# Mikko Närjänen , 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:55+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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Aakkosnumeerinen nimi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Vaihtoehtoinen regex-rajausmerkki FNC1:lle. Erotin ei saa vastata minkään " +"asiaan liittyvän sääntökuvion alkua/loppua." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Liittyvä mittayksikkö" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Viivakoodi nimistö" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Viivakoodi sääntö" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Parasta ennen päiväys" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Päivämäärä" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Desimaali" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Kohdepaikka" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Koodaus" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Viim. voimassaolo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 Erotin" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 Sisältötyyppi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-reititys" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Jos True, käytetään AI:n viimeistä numeroa ensimmäisen desimaalin sijainnin " +"määrittämiseen" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Virheellinen viivakoodi: ei voida käsitellä, jos muotoiltu päiväksi" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Virheellinen viivakoodi: tarkistusnumero on virheellinen" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Onko GS1-nimikkeistö" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Sijainti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Erä/sarjanumero" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Määre" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numeerinen tunniste" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Pakkauspäivä" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paketti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Pakkauksen tyyppi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Määrä" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 erottimen vaihtoehto ei ole kelvollinen regex:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1-sisältötyyppi määrittelee, millaisena tietona sääntö käsittelee " +"viivakoodin: * Päivämäärä: viivakoodi muunnetaan Odoo-päivämääräksi; " +"* Mitta: viivakoodin arvo liittyy tiettyyn mittayksikköön; * Numeerinen " +"tunniste: kiinteän pituinen viivakoodi, joka noudattaa tiettyä koodausta; * " +"Aakkosnumeerinen nimi: vaihtelevan pituinen viivakoodi." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Sääntömalli \"%s\" ei ole kelvollinen Regex:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Sääntökuvio \"%s\" ei ole kelvollinen, se tarvitsee kaksi ryhmää:\n" +"\t- Ensimmäinen on sovellustunniste (yleensä 2-4 numeroa);\n" +"\t- Toinen arvoa varten." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Viivakoodisäännön \"%s\" kuviossa on vikaa.\n" +"Jos tämä sääntö käyttää desimaalilukua, tarkista, ettei se voi saada Application Identifierin viimeiseksi merkiksi muuta kuin numeron.\n" +"Tarkista myös, että mahdolliset sovitetut arvot voivat olla vain numeroita, muuten arvoa ei voida muuntaa mitaksi." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Tässä nimikkeistössä käytetään GS1-määrittelyä, ja ainoastaan " +"GS1-128-koodaussäännöt hyväksytään tällaisessa nimikkeistössä." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Tätä viivakoodia ei voi tunnistaa millään viivakoodisäännöillä." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Tätä viivakoodia ei voida tunnistaa osittain tai kokonaan." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Tätä sääntöä sovelletaan vain, jos viivakoodi on koodattu määritetyllä " +"koodauksella" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tyyppi" diff --git a/barcodes_gs1_nomenclature/i18n/fr.po b/barcodes_gs1_nomenclature/i18n/fr.po new file mode 100644 index 0000000..4af1769 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/fr.po @@ -0,0 +1,260 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nom alphanumérique" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Délimiteur regex alternatif pour le FCN1. Le délimiteur ne peut pas " +"correspondre au début/à la fin d'une autre règle connexe." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "UdM associée" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclature des codes-barres" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Règle de code-barres" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Date limite d'utilisation optimale" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Date" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Décimale" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Emplacement de destination" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Encodage" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Date d'expiration" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Séparateur FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Type de contenu GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Routage HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Si cette case est cochée, utilisez le dernier chiffre de l'AI pour " +"déterminer où se trouve la première décimale" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Code-barres invalide : ne peut pas être formaté comme une date" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Code-barres invalide : le chiffre de contrôle est incorrect" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Est de nomenclature GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Emplacement" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mesure" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identifiant numérique" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Date de colisage" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Colis" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Type de colis" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Quantité" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Le séparateur alternatif FNC1 n'est pas un regex valide:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Le type de contenu GS1 définit ce quelles données cette règle va gérer: " +"*Date: le code-barres sera converti en datetime Odoo; *Mesure: le code-" +"barres est relatif à une unité de mesure spécifique; *Identifiant " +"numérique : code-barres de taille fixe suivi d'un encodage spécifique; " +"*Nom alphanumérique: code-barres à taille variable" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Le modèle de règle \"%s\" n'est pas un Regex valide; " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Le modèle de règle \"%s\" est invalide, il nécessite 2 groupes:\n" +"\t- Un premier pour l'identifiant de l'application (normalement 2 à 4 chiffres);\n" +"\t- Un second pour la valeur" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Il y a une erreur avec la règle de code-barres \"%s\".\n" +"Si cette règle utilise des décimales, vérifiez qu'elle ne peut pas obtenir autre chose qu'un chiffre comme dernier caractère de l'identifiant de l'application.\n" +"Vérifiez également que les valeurs correspondantes possibles ne peuvent être que des chiffres, sinon la valeur ne peut pas être convertie en mesure." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Cette nomenclature utilise les directives de GS1, seul l'encodage GS1-128 " +"est accepté dans ce type de nomenclature" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Ce code-barres ne peut être analysé par aucune règle de code-barres." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Ce code-barres ne peut pas être partiellement ou totalement analysé." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Cette règle s'appliquera uniquement si le code-barres est encodé avec " +"l'encodage spécifié" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Type" diff --git a/barcodes_gs1_nomenclature/i18n/he.po b/barcodes_gs1_nomenclature/i18n/he.po new file mode 100644 index 0000000..ee32dce --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/he.po @@ -0,0 +1,246 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Martin Trigaux, 2023 +# Roy Sayag, 2023 +# Lilach Gilliam , 2023 +# ZVI BLONDER , 2023 +# דודי מלכה , 2023 +# Yihya Hugirat , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Yihya Hugirat , 2023\n" +"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: he\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "מונחי ברקוד" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "כלל ברקוד" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "תאריך אחרון לשימוש" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "תאריך" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "עשרוני" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "מיקום יעד" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "קידוד" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "תאריך תפוגה" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "ניתוב HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "מיקום" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "אצווה" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "מדד" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "תאריך חבילה" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "חבילה" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "סוג חבילה" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "כמות" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "כלל זה יחול רק אם הברקוד מקודד בקידוד שצוין" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "סוג" diff --git a/barcodes_gs1_nomenclature/i18n/hu.po b/barcodes_gs1_nomenclature/i18n/hu.po new file mode 100644 index 0000000..12a843c --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/hu.po @@ -0,0 +1,246 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Ákos Nagy , 2023 +# gezza , 2023 +# Tamás Németh , 2023 +# Martin Trigaux, 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:55+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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Vonalkód nómenklatúra" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Vonalkód szabály" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Minőség megőrzésének dátuma" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Dátum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimális" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Cél tárhely" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kódolás" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Lejárat dátuma" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP irányítás" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Helyszín" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mérés" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Csomag dátuma" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Csomag" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Csomag típus" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Mennyiség" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ezt a szabályt csak egyedi szabállyal létrehozott vonalkódra alkalmazza" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Típus" diff --git a/barcodes_gs1_nomenclature/i18n/hy.po b/barcodes_gs1_nomenclature/i18n/hy.po new file mode 100644 index 0000000..3412c7d --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/hy.po @@ -0,0 +1,237 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "" diff --git a/barcodes_gs1_nomenclature/i18n/id.po b/barcodes_gs1_nomenclature/i18n/id.po new file mode 100644 index 0000000..d290a75 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/id.po @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nama Alfanumerik" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Reged delimiter alternatif untuk FNC1. Separator tidak boleh cocok dengan " +"awal/akhir dari pola peraturan apapun yang terkait." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Uom Terkait" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Tatanama Barcode" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Peraturan Barcode" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Bagus sebelum tanggal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Tanggal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Desimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Lokasi tujuan" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Enkode" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Tanggal Kedaluwarsa" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separator FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tipe Konten GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"If True, gunakan digit terakhir AI untuk menentukan apakah desimal pertama " +"adalah" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Barcode tidak valid: tidak dapat diformat sebagai tanggal" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Barcode invalid: check digit tidak benar" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Apakah GS1 Tata Nama" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Lokasi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Ukur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Pengidentifikasi Numerik" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Tanggal Paket" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Kemasan" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipe Kemasan" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Kuantitas" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Alternatif Separator FNC1 tidak merupakan Regex valid:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Tipe konten GS1 mendefinisikan tipe data apa yang akan diproses peraturan " +"barcode: * Tanggal: barcode akan dikonversi menjadi tanggal waktu " +"Odoo; * Measure: nilai barcode terkait ke Satuan Ukuran spesifik;" +" * Pengidentifikasi Numerik: barcode dengan panjang tetap sesuai " +"dengan encoding spesifik; * Nama Alfanumerik: panjang barcode tidak " +"tetap." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Pola peraturan \"%s\" tidak merupakan Regex valid: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Pola peraturan \"%s\" tidak valid, membutuhkan dua kelompok:\n" +"\t- Yang pertama adalah Pengidentifikasi Aplikasi (biasanya 2 sampai 4 angka);\n" +"\t- Yang kedua untuk catch the value." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Ada yang salah dengan pola peraturan barcode \"%s\".\n" +"Bila peraturan ini menggunakan desimal, periksa agar peraturan ini hanya bisa menggunakan digit sebagai karakter terakhir pada Pengidentifikasi Aplikasi.\n" +"Periksa juga agar value yang mungkin cocok hanya dapat merupakan digit, karena bila tidak value tidak dapat digunakan sebagai measure." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Tata Nama ini menggunakan spesifikasi GS1, hanya peraturan encoding GS1-128 " +"yang diterima di tata nama seperti ini." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Barcode ini tidak dapat di-parse menggunakan peraturan barcode apapun." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Barcode ini tidak dapat di-parse secara parsial atau penuh." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Kaidah ini hanya akan diterapkan jika barcode dikodekan dengan pengkodean " +"tertentu." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Jenis" diff --git a/barcodes_gs1_nomenclature/i18n/is.po b/barcodes_gs1_nomenclature/i18n/is.po new file mode 100644 index 0000000..e273fae --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/is.po @@ -0,0 +1,242 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# jonasyngvi, 2024 +# Kristófer Arnþórsson, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Kristófer Arnþórsson, 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Dagsetning" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Magn" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "" diff --git a/barcodes_gs1_nomenclature/i18n/it.po b/barcodes_gs1_nomenclature/i18n/it.po new file mode 100644 index 0000000..61007ff --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/it.po @@ -0,0 +1,266 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# Marianna Ciofani, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Marianna Ciofani, 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nome alfanumerico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Delimitatore regex alternativo per FNC1. Il separatore non deve " +"corrispondere all'inizio/fine di qualsiasi modello di regola correlato." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Unità di misura associata" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclatura codice a barre" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regola Codice a barre" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Data di preferibile consumo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimale" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Ubicazione di destinazione" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codifica" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Data di scadenza" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separatore FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tipo di contenuto GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Instradamento HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Se vero, utilizza l'ultima cifra dell'AI per determinare dove si trova il " +"primo decimale" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Codice a barre non valido: non può essere formattato come data" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Codice a barre non valido: la cifra di controllo non è corretta" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "La nomenclatura GS1 è" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Ubicazione" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lotto" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Misura" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identificatore numerico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Data imballaggio" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Collo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipologia collo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Quantità" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "L'alternativa al separatore FNC1 non è un Regex valido:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Il tipo di contenuto GS1 definisce in quale tipo di dati verrà elaborato il " +"codice a barre dalla regola: *Data: il codice a barre verrà " +"convertito in un valore datetime Odoo; *Misura: il valore del codice " +"a barre è legato ad una specifica UdM; *Identificatore numerico: " +"codice a barre a lunghezza fissa che segue una codifica specifica; " +"*Nome alfanumerico: codice a barre dalla lunghezza variabile." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Il modello di regola \"%s\" non è un Regex valido:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Il modello di regola \"%s\" non è valido, ha bisogno di due gruppi:\n" +"\t- Un primo per l'identificatore dell'applicazione (di solito da 2 a 4 cifre);\n" +"\t- Un secondo per catturare il valore." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"C'è qualcosa che non va con il modello di regola del codice a barre \"%s\".\n" +"Se la regola utilizza decimali, verifica che non sia possibile ottenere qualcosa di diverso da una cifra come ultimo carattere per l'Identificatore di applicazione.\n" +"Verifica anche che i possibili valori abbinati possano essere solo cifre, altrimenti il valore non può essere espresso come misura." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Questa nomenclatura usa la specifica GS1, solo le regole di codifica GS1-128" +" sono accettate in questo tipo di nomenclatura." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Questo codice a barre non può essere analizzato da nessuna regola di codice " +"a barre." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" +"Questo codice a barre non può essere analizzato parzialmente o " +"completamente." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Questa regola verrà applicata solo se il codice rispetta la codifica " +"specificata" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipologia" diff --git a/barcodes_gs1_nomenclature/i18n/ja.po b/barcodes_gs1_nomenclature/i18n/ja.po new file mode 100644 index 0000000..fc719a2 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/ja.po @@ -0,0 +1,250 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "アルファベット数字名" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "FNC1 の代替正規表現区切り文字。区切り文字は、関連する規則パターンの開始/終了と一致してはいけません。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "関連する単位" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "バーコード表現規則" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "バーコード規則" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "賞味・使用期限日" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "日付" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "10進数" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "目的地" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "エンコード" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "有効期限日" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 区切り" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1内容タイプ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTPルーティング" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "無垢材の家具には、どの木の種類が最適でしょうか?この動画では、そんな疑問にお答えします!" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "無効なバーコード: 日付としてフォーマットできません" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "無効なバーコード: 確認数字が間違っています" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "GS1命名法とは" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "ロケーション" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "ロット" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "測定対象" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "数値識別子" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "梱包日" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "パッケージ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "梱包タイプ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "数量" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 セパレータ代替は有効な正規表現ではありません:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1コンテンツタイプは、規則がバーコードをどのようなデータとして処理するかを定義します:   * 日付: " +"バーコードはOdooの日時に変換されます。*値: バーコードの値は、特定の単位に関連しています。 *数値識別子: " +"特定のエンコーディングに従った固定長のバーコード。 *アルファ-数字名: 可変長のバーコード。" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "規則パターン \"%s\" は有効な正規表現ではありません:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"規則パターン \"%s\" は無効であり、2つのグループが必要です:\n" +"\t- 1つ目はアプリケーション識別子用 (通常2から4桁);\n" +"\t- 2つ目は値を捉える用" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"バーコード規則の\"%s\"パターンが不適切です。\n" +"この規則が10進数を使用している場合、アプリケーション識別子の最後の文字が数字以外になっていないか確認して下さい。\n" +"また、一致する可能性のある値が数字のみであることも確認して下さい。そうでなければ、値を測定単位として型変換することができません。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "この命名法はGS1仕様を使用しており、GS1-128エンコーディング規則のみがこの種の命名法として認められています。" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "このバーコードはどのバーコード規則でも解析できません。" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "このバーコードは一部または全部を解析できません。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "この規則は、バーコードが指定されたエンコーディングでエンコードされている場合にのみ適用されます" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "タイプ" diff --git a/barcodes_gs1_nomenclature/i18n/ko.po b/barcodes_gs1_nomenclature/i18n/ko.po new file mode 100644 index 0000000..470851a --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/ko.po @@ -0,0 +1,250 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "영숫자 이름" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "FNC1의 대체 정규식 구분 기호입니다. 구분 기호는 관련 규칙 패턴의 시작/끝 부분과 일치해서는 안됩니다." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "관련된 측정 단위 (UOM)" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "바코드 명칭" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "바코드 규칙" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "유통기한" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "날짜" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "소수점" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "목적지 위치" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "인코딩" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "만료일" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 구분 기호" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 내용 유형" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 라우팅" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "참인 경우, AI의 마지막 숫자를 사용하여 첫 번째 소수점의 위치를 확인합니다." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "잘못된 바코드: 날짜 형식을 지정할 수 없음" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "잘못된 바코드: 체크 숫자가 잘못됨" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "GS1 명명법 여부" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "위치" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "LOT" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "계산" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "숫자 식별 기호" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "포장 일자:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "패키지" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "패키지 유형" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "수량" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 대체 구분 기호가 유효한 정규식이 아닙니다: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1 콘텐츠 유형은 규칙을 통해 바코드를 처리할 데이터 종류를 지정합니다: * 일자: Odoo 일시로 바코드를 변환;" +" * 방법: 바코드 값이 특정한 측정 단위 (UoM)와 관련; * 숫자 식별 기호: 특정한 인코딩을 따르는 " +"고정된 길이의 바코드; * 영숫자 이름: 가변 길이 바코드." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "규칙 패턴 \"%s\"은 잘못된 정규식입니다: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"규칙 패턴 \"%s\"이 잘못되었습니다, 두 개의 그룹이 있어야 합니다:\n" +"\t- 첫번째 그룹에서 응용 프로그램 식별 기호를 두며 (보통 2 - 4 자리);\n" +"\t- 두번째 그룹에서 값을 확인합니다." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"바코드 규칙의 \"%s\" 패턴이 잘못되었습니다.\n" +"규칙에서 10진법을 사용하는 경우, 응용 프로그램 식별 기호의 마지막 문자로 숫자 외에 다른 항목을 가져올 수 없는지 확인하십시오.\n" +"일치하는 값도 숫자만 가능한지 확인하시되, 그렇지 않은 경우 해당 값은 측정용으로는 사용할 수 없습니다." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "명명법으로는 GS1 방식을 사용하며, 이러한 명명법에는 GS1-128 만 인코딩 규칙으로 허용됩니다. " + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "이 바코드를 분석할 수 있는 바코드 규칙이 없습니다." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "이 바코드의 전부 혹은 일부를 분석할 수 없습니다." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "이 규칙은 바코드가 지정된 인코딩으로 인코딩된 경우에만 적용됩니다." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "유형" diff --git a/barcodes_gs1_nomenclature/i18n/lt.po b/barcodes_gs1_nomenclature/i18n/lt.po new file mode 100644 index 0000000..f2f49a3 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/lt.po @@ -0,0 +1,249 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Silvija Butko , 2023 +# Jonas Zinkevicius , 2023 +# digitouch UAB , 2023 +# grupoda2 , 2023 +# Audrius Palenskis , 2023 +# Linas Versada , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Brūkšninio kodo terminologija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Brūkšninio kodo taisyklė" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Geriausias iki" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Siunčiama į" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodavimas" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Galiojimo datos pabaiga" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP nukreipimas" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Vieta" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Partija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paketas" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Pakuotės tipas" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Kiekis" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ši taisyklė bus pritaikyta tik jei brūkšninis kodas bus užkoduotas nurodytu " +"kodavimu" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipas" diff --git a/barcodes_gs1_nomenclature/i18n/lv.po b/barcodes_gs1_nomenclature/i18n/lv.po new file mode 100644 index 0000000..bc13a9e --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/lv.po @@ -0,0 +1,244 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Anzelika Adejanova, 2023 +# Martin Trigaux, 2023 +# ievaputnina , 2023 +# Will Sensors, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Will Sensors, 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Derīguma termiņš" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datums" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Derīguma beigu datums" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP maršrutēšana" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Atrašanās vieta" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Preču Partija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paka" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Iepakojuma tips" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Daudzums" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Veids" diff --git a/barcodes_gs1_nomenclature/i18n/nb.po b/barcodes_gs1_nomenclature/i18n/nb.po new file mode 100644 index 0000000..c00b177 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/nb.po @@ -0,0 +1,242 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Martin Trigaux, 2024 +# Marius Stedjan , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Marius Stedjan , 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Strekkode-nomenklatur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Strekkoderegel" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Best før-dato" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Dato" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Destinasjonslokasjon" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Koding" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Utløpsdato" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-ruting" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Sted" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Parti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mål" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Pakke" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Emballasjetype" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Antall" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Type" diff --git a/barcodes_gs1_nomenclature/i18n/nl.po b/barcodes_gs1_nomenclature/i18n/nl.po new file mode 100644 index 0000000..7d8c72d --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/nl.po @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# Erwin van der Ploeg , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Erwin van der Ploeg , 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Alfanumerieke naam" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Alternatief regex-scheidingsteken voor de FNC1. Het scheidingsteken mag niet" +" overeenkomen met het begin/einde van een verwant regelpatroon." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Gekoppelde Maateenheid" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Barcode nomenclatuur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Barcode regel" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Tenminste houdbaar tot datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimaal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Bestemmingslocatie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codering" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Vervaldatum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 scheidingsteken" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 inhoud type" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Indien Waar, gebruik dan het laatste cijfer van AI om te bepalen waar de " +"eerste decimaal is" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Ongeldige barcode: kan niet worden opgemaakt als datum" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Ongeldige barcode: het controlecijfer is onjuist" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Is GS1 nomenclatuur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Locatie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Partij" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Eenheid" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numerieke identificatie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Datum inpakken" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Verpakking" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Verpakking soort" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Hoeveelheid" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Het FNC1-scheidingsalternatief is geen geldige Regex: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Het GS1 inhoudstype definieert wat voor soort gegevens deze regels zullen " +"verwerken: * Datum: de barcode wordt omgezet in een Odoo datum/tijd;" +" * Maateenheid: de waarde van de barcode is gerelateerd aan een " +"specifieke maateenheid; * Numerieke identificatie: barcode met vaste " +"lengte na een specifieke codering; * Alfanumerieke naam: barcode met " +"variabele lengte." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Het regelpatroon “%s” is geen geldige Regex: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Het regelpatroon “%s” is niet geldig, het heeft twee groepen nodig:\n" +"- Een eerste voor de Application Identifier (meestal 2 tot 4 cijfers);\n" +"- Een tweede om de waarde te vangen." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Er is iets mis met het patroon van de barcoderegel “%s”.\n" +"Als deze regel decimaal gebruikt, controleer dan of deze niet ergens anders dan een cijfer kan krijgen als laatste teken voor de Application Identifier..\n" +"Controleer ook of de mogelijke overeenkomende waarden alleen uit cijfers kunnen bestaan, anders kan de waarde niet als maateenheid worden gebruikt." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Deze nomenclatuur gebruikt de GS1-specificatie, alleen " +"GS1-128-coderingsregels worden geaccepteerd voor dit soort nomenclatuur." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Deze barscode kan niet worden verwerkt door de barcoderegels." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Deze barcode kan niet gedeeltelijk of volledig worden verwerkt." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Deze regel zal enkel toegepast worden indien de barcode van de juiste " +"codering voorzien is" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Soort" diff --git a/barcodes_gs1_nomenclature/i18n/pl.po b/barcodes_gs1_nomenclature/i18n/pl.po new file mode 100644 index 0000000..d17af9b --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/pl.po @@ -0,0 +1,263 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nazwa alfanumeryczna" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Alternatywny delimiter regex dla FNC1. Separator nie może odpowiadać " +"początkowi/końcowi żadnego powiązanego wzorca reguł." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Powiązane JM" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenklatura kodu kreskowego" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Reguła kodu kreskowego" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Data najlepszego użycia" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Dziesiętny" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Lokalizacja docelowa" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodowanie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Data ważności" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separator FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Typ zawartości GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Wytyczanie HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Jeśli prawda, to użyj ostatniej cyfry AI do określenia miejsca pierwszego " +"miejsca po przecinku." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Nieprawidłowy kod kreskowy: nie można sformatować jako daty" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Nieprawidłowy kod kreskowy: cyfra kontrolna jest nieprawidłowa" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Czy nomenklatura GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Miejsce" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Partia" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Miara" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identyfikator liczbowy" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Data pakowania" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Opakowanie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Typ opakowania" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Ilość" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Alternatywa separatora FNC1 nie jest prawidłowym regexem:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Typ zawartości GS1 określa, jako jakiego rodzaju dane reguła przetworzy kod " +"kreskowy: * Data: kod kreskowy zostanie przekonwertowany na Odoo datetime; *" +" Miara: wartość kodu kreskowego jest związana z konkretnym JM; * " +"Identyfikator numeryczny: kod kreskowy o stałej długości po określonym " +"kodowaniu; * Nazwa alfanumeryczna: kod kreskowy o zmiennej długości." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Wzorzec reguły \"%s\" nie jest prawidłowym regexem:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Wzorzec reguły \"%s\" nie jest prawidłowy, wymaga dwóch grup:\n" +"- Pierwsza dla identyfikatora aplikacji (zwykle 2 do 4 cyfr);\n" +"- Drugi, aby złapać wartość." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Coś jest nie tak z regułą kodu kreskowego \"%s\" .\n" +"Jeśli reguła używa wartości dziesiętnych, sprawdź, czy nie może uzyskać czegoś innego niż cyfra jako ostatni znak dla identyfikatora aplikacji.\n" +"Sprawdź również, czy możliwe dopasowane wartości mogą być tylko cyframi, w przeciwnym razie wartość nie może być rzutowana jako środek." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Ta nomenklatura wykorzystuje specyfikację GS1, akceptowane są tylko reguły " +"kodowania GS1-128." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Tego kodu kreskowego nie można przeanalizować za pomocą żadnych reguł " +"dotyczących kodów kreskowych." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" +"Tego kodu kreskowego nie można przeanalizować częściowo ani w całości." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ta zasada zostanie zastosowana tylko dla kodów kreskowych ze zdefiniowanym " +"kodowaniem" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Typ" diff --git a/barcodes_gs1_nomenclature/i18n/pt.po b/barcodes_gs1_nomenclature/i18n/pt.po new file mode 100644 index 0000000..46326d4 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/pt.po @@ -0,0 +1,243 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de Código de Barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regra de Código de Barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Consumir antes da data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificação" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Data de Expiração" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Rotas HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Localização" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lote" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Medida" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Pacote" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipo de Embalagem" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Quantidade" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regra só será aplicada se o código de barras estiver codificado com a " +"codificação indicada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" diff --git a/barcodes_gs1_nomenclature/i18n/pt_BR.po b/barcodes_gs1_nomenclature/i18n/pt_BR.po new file mode 100644 index 0000000..f907f80 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/pt_BR.po @@ -0,0 +1,265 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# a75f12d3d37ea5bf159c4b3e85eb30e7_0fa6927, 2023 +# Maitê Dietze, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Maitê Dietze, 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Número alfanumérico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Delimitador de regex alternativo para o FNC1. O separador não deve " +"corresponder ao início/fim de nenhum padrão de regras relacionado." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "UM associada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de código de barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regra de código de barras" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Consumir antes da data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Data" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Local do destino" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificação" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Data de expiração" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separador FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tipo de conteúdo GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Roteamento HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Se for verdadeiro, use o último dígito do AI para determinar onde está o " +"primeiro decimal" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Código de barras inválido: não pode ser formatado como data" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Código de barras inválido: o dígito de verificação está incorreto" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "É uma nomenclatura GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Local" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lote" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Medida" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identificador numérico" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Data da embalagem" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Embalagem" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tipo de embalagem" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Quantidade" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "O separador alternativo FNC1 não é um Regex válido:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"O tipo de conteúdo GS1 define como que tipo de dados a regra processará o " +"código de barras: * Data: o código de barras será convertido em uma data e " +"hora do Odoo; * Medida: o valor do código de barras está relacionado a uma " +"UM específica; * Identificador numérico: código de barras de comprimento " +"fixo seguindo uma codificação específica; * Nome alfanumérico: código de " +"barras de comprimento variável." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "O padrão de regra \"%s\" não é um Regex válido:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"O padrão de regra \"%s\" não é válido, ele precisa de dois grupos:\n" +"\t- Um primeiro para o identificador do aplicativo (geralmente de 2 a 4 dígitos);\n" +"Um segundo para capturar o valor." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Há algo errado com o padrão \"%s\" da regra de código de barras.\n" +"Se essa regra usar decimal, verifique se ela não pode obter outro valor que não seja um dígito como último caractere do identificador do aplicativo.\n" +"Verifique também se os possíveis valores correspondentes só podem ser dígitos, caso contrário, o valor não poderá ser convertido em uma medida." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Essa nomenclatura usa a especificação GS1, e somente as regras de " +"codificação GS1-128 são aceitas nesse tipo de nomenclatura." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Esse código de barras não pode ser analisado por nenhuma regra de código de " +"barras." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Esse código de barras não pode ser parcial ou totalmente analisado." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Esta regra será aplicada somente se o código de barras for codificado com a " +"codificação especificada" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tipo" diff --git a/barcodes_gs1_nomenclature/i18n/ro.po b/barcodes_gs1_nomenclature/i18n/ro.po new file mode 100644 index 0000000..ddb8498 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/ro.po @@ -0,0 +1,267 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Cozmin Candea , 2024 +# sharkutz , 2024 +# Vacaru Adrian , 2024 +# Martin Trigaux, 2024 +# Dorin Hongu , 2024 +# Foldi Robert , 2024 +# Claudia Baisan, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Claudia Baisan, 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Nume alfanumeric" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Delimitator alternativ regex pentru FNC1. Delimitatorul nu trebuie să se " +"potrivească la începutul / sfârșitul oricărui model de reguli asociat." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "U.M. asociată" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenclator cod de bare" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Regulă cod de bare" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Consum înainte de" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Dată" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Zecimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Locația destinație" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Codificare:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Data expirării" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Separator FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Tip conținut GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Rutare HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Dacă este adevărat, utilizați ultima cifră a AI pentru a determina unde este" +" prima zecimală" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Cod de bare nevalid: nu poate fi formatat ca dată" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Cod de bare nevalid: cifra de control este incorectă" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Este nomenclator GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Locatie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Măsurare" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Identificator numeric" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Data ambalării" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Pachet" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tip pachet" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Cantitate" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Separatorul FNC1 Alternativ nu este un Regex valid: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Tipul conținutului GS1 definește ce fel de date va procesa regulile codul de" +" bare ca* Dată: codul de bare va fi convertit într-o dată Odoo;* Măsurare: " +"valoarea codului de bare este legată de o anumită UM;* Identificator " +"numeric: cod de bare cu lungime fixă care urmează un anumit codificare;* " +"Nume alfanumeric: cod de bare cu lungime variabilă." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Modelul regulii \"%s\" nu este un Regex valid: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Modelul regulii \"%s\" nu este valid, are nevoie de două grupuri:\n" +"\t- Unul pentru Identificatorul Aplicației (de obicei 2-4 cifre);\n" +"\t- Unul pentru a captura valoarea." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Există ceva greșit cu modelul regulii \"%s\".\n" +"Dacă această regulă folosește zecimale, verificați dacă nu poate obține altceva decât un caracter ca ultimul caracter pentru Identificatorul Aplicației.\n" +"Verificați și dacă valorile posibile pot fi doar cifre, altfel valoarea nu poate fi convertită într-o măsură." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Această nomenclatură folosește specificația GS1, doar regulile de codificare" +" GS1-128 sunt acceptate în acest tip de nomenclatură." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Acest cod de bare nu poate fi analizat de nicio regulă de cod de bare." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Acest cod de bare nu poate fi analizat parțial sau complet." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Această regulă se va aplica numai dacă codul de bare este codificat cu " +"codificarea specificată" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tip" diff --git a/barcodes_gs1_nomenclature/i18n/ru.po b/barcodes_gs1_nomenclature/i18n/ru.po new file mode 100644 index 0000000..d55d4e1 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/ru.po @@ -0,0 +1,266 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# alenafairy, 2023 +# Vasiliy Korobatov , 2023 +# ILMIR , 2023 +# Martin Trigaux, 2023 +# Сергей Шебанин , 2023 +# Collex100, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Collex100, 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Буквенно-цифровое Название" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Альтернативный разделитель regex для FNC1. Разделитель не должен совпадать с" +" началом/концом любого связанного шаблона правил." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Связанная единица измерения" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Номенклатура штрих-кода" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Правило штрих-кода" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Срок годности" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Дата" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Десятичное" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Место назначения" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодировка" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Дата окончания срока" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Сепаратор FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 Тип содержимого" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Маршрутизация HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Если True, используйте последнюю цифру AI, чтобы определить, где находится " +"первая десятичная дробь" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Неверный штрих-код: невозможно отформатировать как дату" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Неверный штрихкод: контрольная цифра неверна" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Является ли номенклатура GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Место хранения" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Партия" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Измерение" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Числовой идентификатор" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Дата упаковки" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Пакет" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Тип упаковки" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Количество" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Альтернативный разделитель FNC1 не является правильным Regex: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Тип содержимого GS1 определяет, в качестве какого типа данных правило будет " +"обрабатывать штрихкод: * Дата: штрихкод будет преобразован в дату " +"Odoo; * Мера: значение штрихкода относится к определенному UoM; * Числовой " +"идентификатор: штрихкод фиксированной длины, следующий определенной " +"кодировке; * Алфавитно-цифровое имя: штрихкод переменной длины." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Шаблон правила \"%s\" не является допустимым регулярным выражением: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Шаблон правила \"%s\" не подходит, ему нужны две группы:\n" +"\t- Первая - для идентификатора приложения (обычно от 2 до 4 цифр);\n" +"\t- Вторая - для определения значения." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Что-то не так с шаблоном правила штрихкода \"%s\".\n" +"Если это правило использует десятичную систему счисления, проверьте, не может ли оно получить в качестве последнего символа идентификатора приложения что-то еще, кроме цифры.\n" +"Проверьте также, что возможные совпадающие значения могут быть только цифрами, иначе значение не может быть преобразовано в меру." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Данная номенклатура использует спецификацию GS1, только правила кодирования " +"GS1-128 приняты для этого вида номенклатуры." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Этот штрих-код не может быть проанализирован никакими правилами штрих-кода." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Этот штрих-код не может быть частично или полностью проанализирован." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Это правило применяется только в том случае, если штрих-код закодирован с " +"указанной кодировкой" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Раздел" diff --git a/barcodes_gs1_nomenclature/i18n/sk.po b/barcodes_gs1_nomenclature/i18n/sk.po new file mode 100644 index 0000000..0047a83 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/sk.po @@ -0,0 +1,243 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Názvoslovie čiarového kódu" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Pravidlo čiarového kódu" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Dátum minimálnej trvanlivosti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Dátum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Desatinný" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Cieľová lokácia" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Zakódovanie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Dátum spotreby" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP smerovanie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Miesto" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Šarža" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Meranie" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Balík" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Typ balenia" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Množstvo" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Toto pravidlo bude platiť iba ak je čiarový kód zakódovaný so špecifickým " +"zakódovaním" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Typ" diff --git a/barcodes_gs1_nomenclature/i18n/sl.po b/barcodes_gs1_nomenclature/i18n/sl.po new file mode 100644 index 0000000..25c8552 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/sl.po @@ -0,0 +1,245 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Matjaz Mozetic , 2023 +# Katja Deržič, 2023 +# Tadej Lupšina , 2023 +# Martin Trigaux, 2023 +# matjaz k , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: matjaz k , 2023\n" +"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Nomenklatura črtne kode" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Pravilo črtne kode" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Najboljše za uporabo do" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodiranje" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Datum izteka" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP usmerjanje" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Je GS1 Nomenklatura?" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Lokacija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Sklop" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Datum pakiranja" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Programski paket" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tip pakiranja" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Količina" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "To pravilo velja samo, če je črtna koda kodirana s podano kodiranjem" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tip" diff --git a/barcodes_gs1_nomenclature/i18n/sr.po b/barcodes_gs1_nomenclature/i18n/sr.po new file mode 100644 index 0000000..2582207 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/sr.po @@ -0,0 +1,264 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Martin Trigaux, 2023 +# Dragan Vukosavljevic , 2023 +# Milan Bojovic , 2023 +# コフスタジオ, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: コフスタジオ, 2024\n" +"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Alfa-Numeričko Ime" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Alternativni regex delimiter za FNC1. Separator ne sme da se poklapa sa " +"početkom/krajem bilo kog povezanog obrasca pravila." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Povezana Uom" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Bar-kod nomenklatura" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Barkod pravilo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Najbolje pre Datuma" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimalan" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Ciljna lokacija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodiranje" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Datum isteka" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 Separator" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 Vrsta Sadržaja" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP rutiranje" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Ako je tačno, koristite poslednju cifru AI da biste odredili gde se nalazi " +"prva decimala." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Nevažeći barkod: ne može biti formatiran kao datum" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Nevažeći barkod: kontrolna cifra je netačna." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "GS1 Nomenklatura" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Lokacija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Partija" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mera" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numerički identifikator" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Datum pakovanja" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paket" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Tip paketa" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Količina" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 Separator Alternative nije validan Regex:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1 sadržajni tip definiše vrstu podataka koje će pravilo obraditi kao barkod:\n" +"* Datum: barkod će biti pretvoren u Odoo datum i vreme;\n" +"* Mera: vrednost barkoda je povezana sa određenom UoM;\n" +"* Numerički identifikator: barkod fiksne dužine koji sledi određeno kodiranje;\n" +"* Alfa-Numeričko ime: barkod promenljive dužine." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Pravilo obrasca \"%s\" nije validan Regex:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Pravilo obrasca \"%s\" nije validno, potrebne su dve grupe:\n" +"\t- Prva grupa za identifikator aplikacije (obično 2 do 4 cifre);\n" +"\t- Druga grupa za hvatanje vrednosti." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Nešto nije u redu sa šablonom pravila za barkod \"%s\".\n" +"Ako ovo pravilo koristi decimalni broj, proverite da poslednji karakter za identifikator aplikacije ne može biti ništa drugo osim cifre.\n" +"Takođe proverite da moguće podudarajuće vrednosti mogu biti samo cifre, inače vrednost ne može biti pretvorena u meru." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Ova Nomenklatura koristi GS1 specifikaciju, samo se pravila kodiranja " +"GS1-128 prihvataju u ovakvoj nomenklaturi." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Ovaj barkod ne može biti analiziran prema bilo kojim pravilima barkoda." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Ovaj barkod ne može biti delimično ili potpuno analiziran." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Ovo pravilo će se primenjivati samo ako je barkod kodiran sa određenim " +"kodiranjem." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Vrsta" diff --git a/barcodes_gs1_nomenclature/i18n/sv.po b/barcodes_gs1_nomenclature/i18n/sv.po new file mode 100644 index 0000000..cf91d00 --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/sv.po @@ -0,0 +1,265 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Mikael Åkerberg , 2023 +# Lasse L, 2023 +# Kim Asplund , 2023 +# Simon S, 2023 +# Martin Trigaux, 2023 +# Anders Wallenquist , 2024 +# Jakob Krabbe , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jakob Krabbe , 2024\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Alfa-numeriskt namn" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Alternativ regex-avgränsare för FNC1. Separatorn får inte matcha " +"början/slutet av något relaterat regelmönster." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Associerad Uom" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Streckkodsnomenklatur" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Streckkodsregel" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Bäst före datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Datum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Decimal" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Destinationsplats" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodning" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Slutdatum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 Separator" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 Innehållstyp" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-rutt" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Om True, använd den sista siffran i AI för att avgöra var den första " +"decimalen är" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Ogiltig streckkod: kan inte formateras som datum" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Ogiltig streckkod: kontrollsiffran är felaktig" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Är GS1-nomenklaturen" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Plats" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Parti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Mätning" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Numerisk identifierare" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Datum för paketering" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Emballage" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Pakettyp" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Antal" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 Separator Alternative är inte en giltig Regex: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1-innehållstypen definierar vilken typ av data som regeln kommer att " +"behandla streckkoden som: * Datum: streckkoden kommer att konverteras" +" till en Odoo-datetime; * Mått: streckkodens värde är relaterat till en " +"specifik UoM; * Numerisk identifierare: streckkod med fast längd som följer " +"en specifik kodning; * Alfa-numeriskt namn: streckkod med variabel längd." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Regelmönstret \"%s\" är inte en giltig Regex: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Regelmönstret \"%s\" är inte giltigt, det behöver två grupper:\n" +"\t- En första för applikationsidentifieraren (vanligtvis 2 till 4 siffror);\n" +"\t- En andra för att fånga upp värdet." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Det är något fel med streckkodsregelns \"%s\"-mönster.\n" +"Om den här regeln använder decimaltal, kontrollera att den inte kan få något annat än en siffra som sista tecken för Application Identifier.\n" +"Kontrollera också att de möjliga matchade värdena endast kan vara siffror, annars kan värdet inte omvandlas till ett mått." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Denna nomenklatur använder GS1-specifikationen, endast " +"GS1-128-kodningsregler accepteras är denna typ av nomenklatur." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Den här streckkoden kan inte tolkas av någon streckkodsregel." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Den här streckkoden kan inte analyseras helt eller delvis." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Denna regel gäller endast om streckkoden är kodad med den angivna kodningen" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Typ" diff --git a/barcodes_gs1_nomenclature/i18n/th.po b/barcodes_gs1_nomenclature/i18n/th.po new file mode 100644 index 0000000..4a0e40c --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/th.po @@ -0,0 +1,257 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# Rasareeyar Lappiam, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Rasareeyar Lappiam, 2023\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "ชื่อตัวเลขอัลฟ่า" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"ตัวคั่น regex ทางเลือกสำหรับ FNC1 " +"ตัวคั่นต้องไม่ตรงกับจุดเริ่มต้น/จุดสิ้นสุดของรูปแบบกฎที่เกี่ยวข้อง" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "หน่วยวัดที่เกี่ยวข้อง" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "การตีความบาร์โค้ด" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "กฎของบาร์โค้ด" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "ดีที่สุดก่อนวันที่" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "วันที่" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "ทศนิยม" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "ตำแหน่งปลายทาง" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "การเข้ารหัส" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "วันหมดอายุ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "ตัวแบ่ง FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "ประเภทเนื้อหา GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "การกำหนด HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"ถ้าเป็น True ให้ใช้หลักสุดท้ายของ AI เพื่อกำหนดว่าทศนิยมตัวแรกอยู่ที่ใด" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "บาร์โค้ดไม่ถูกต้อง: ไม่สามารถจัดรูปแบบเป็นวันที่" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "บาร์โค้ดไม่ถูกต้อง: เลขที่ตรวจสอบไม่ถูกต้อง" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "เป็นการตีความบาร์โค้ด GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "สถานที่" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "ล็อต" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "ตัวชี้วัด" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "ตัวระบุหมายเลข" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "วันที่แพ็ค" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "แพ็คเกจ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "ประเภทแพ็คเกจ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "ปริมาณ" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "ทางเลือกตัวคั่น FNC1 ไม่ใช่ Regex ที่ถูกต้อง:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"ประเภทเนื้อหา GS1 กำหนดประเภทของข้อมูลที่กฎจะประมวลผลบาร์โค้ดเป็น: * วันที่:" +" บาร์โค้ดจะถูกแปลงเป็นวันที่และเวลาของ Odoo; * การวัด: " +"ค่าของบาร์โค้ดเกี่ยวข้องกับหน่วยวัดเฉพาะ * ตัวระบุตัวเลข: " +"บาร์โค้ดความยาวคงที่ตามการเข้ารหัสเฉพาะ * ชื่อตัวเลขอัลฟ่า: " +"ตวามยาวตัวแปรบาร์โค้ด" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "รูปแบบกฎ \"%s\" ไม่ใช่ Regex ที่ถูกต้อง:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"รูปแบบกฎ\"%s\"ไม่ถูกต้อง จำเป็นต้องมีสองกลุ่ม:\n" +"\t- กลุ่มแรกสำหรับ ตัวระบุแอปพลิเคชัน (โดยปกติคือ 2 ถึง 4 หลัก)\n" +"\t- กลุ่มที่สองจับค่า" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"มีบางอย่างผิดปกติกับรูปแบบของกฎบาร์โค้ด \"%s\" \n" +"หากกฎนี้ใช้ทศนิยม ให้ตรวจสอบว่าไม่สามารถรับตัวเลขอื่นเป็นตัวอักษรตัวสุดท้ายสำหรับตัวระบุแอปพลิเคชันได้\n" +"ตรวจสอบด้วยว่าค่าที่ตรงกันที่เป็นไปได้ต้องเป็นตัวเลขเท่านั้น ไม่เช่นนั้น จะไม่สามารถแปลงค่าเป็นหน่วยวัดได้" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"ระบบการตีความนี้ใช้ข้อกำหนด GS1 ซึ่งยอมรับกฎการเข้ารหัส GS1-128 เท่านั้น" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "บาร์โค้ดนี้ไม่สามารถแยกวิเคราะห์ตามกฎบาร์โค้ดได้" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "บาร์โค้ดนี้ไม่สามารถแยกวิเคราะห์บางส่วนหรือทั้งหมดได้" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "กฎนี้จะใช้ได้เฉพาะเมื่อบาร์โค้ดถูกเข้ารหัสด้วยการเข้ารหัสที่ระบุ" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "ประเภท" diff --git a/barcodes_gs1_nomenclature/i18n/tr.po b/barcodes_gs1_nomenclature/i18n/tr.po new file mode 100644 index 0000000..2248c8c --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/tr.po @@ -0,0 +1,269 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Güven YILMAZ , 2023 +# Umur Akın , 2023 +# Ertuğrul Güreş , 2023 +# Halil, 2023 +# Ahmet Altinisik , 2023 +# Tugay Hatıl , 2023 +# Ediz Duman , 2023 +# Kaan Özdemir, 2023 +# Murat Kaplan , 2023 +# Levent Karakaş , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Levent Karakaş , 2023\n" +"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Alfanümerik İsim" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"FNC1 için alternatif normal ifade sınırlayıcı. Ayırıcı, herhangi bir ilgili " +"kural kalıbının başlangıcı/bitişi ile eşleşmemelidir." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "İlişkili Ölçü Birimi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Barkod Kural Seti" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Barkod kuralı" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Tavsiye Edilen Tüketim Tarihi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Tarih" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Ondalık" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Hedef konum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Kodlama" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Son Kullanma Tarihi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1 Ayracı" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 İçerik Türü" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Yönlendirme" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Doğru ise, ilk ondalık sayının nerede olduğunu belirlemek için AI'nın son " +"basamağını kullanın" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Geçersiz barkod: tarih olarak biçimlendirilemez" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Geçersiz barkod: kontrol basamağı yanlış" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "GS1 Terminolojisi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Konum" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lot" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Ölçüm" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Sayısal Tanımlayıcı" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Paket Tarihi" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Paket" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Paket Türü" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Miktar" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 Ayırıcı Alternatifi geçerli bir Normal İfade değil:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1 içerik türü, kuralın barkodu ne tür verileri işleyeceğini tanımlar:" +" * Tarih: barkod bir Odoo tarih saatine dönüştürülür; * Ölçü: " +"barkodun değeri belirli bir ölçü birimiyle ilgilidir; * Sayısal " +"Tanımlayıcı: belirli bir kodlamayı izleyen sabit uzunluklu barkod; * " +"Alfa-Sayısal Ad: değişken uzunluklu barkod." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "\"%s\" kural kalıbı geçerli bir Normal İfade değil:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"\"%s\" kural kalıbı geçerli değil, iki gruba ihtiyacı var:\n" +"\t- İlki Uygulama Tanımlayıcı için (genellikle 2 ila 4 basamak);\n" +"\t- İkincisi değeri yakalamak için." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Barkod kuralı \"%s\" deseninde bir sorun var.\n" +"Bu kural ondalık sayı kullanıyorsa, Uygulama Tanımlayıcısı için son karakter olarak bir rakamdan başka bir zaman alamadığını kontrol edin.\n" +"Ayrıca olası eşleşen değerlerin yalnızca rakam olabileceğini kontrol edin, aksi takdirde değer bir ölçü olarak kullanılamaz." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Bu İsimlendirme, GS1 spesifikasyonunu kullanır, bu tür bir isimlendirmede " +"sadece GS1-128 kodlama kuralları kabul edilir." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Bu barkod, herhangi bir barkod kuralı tarafından ayrıştırılamaz." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Bu barkod kısmen veya tamamen ayrıştırılamaz." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Bu kural okunan barkod yalnızca belirtilen kodlama ile barkod kodlanmış ise " +"uygulanacaktır." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Tür" diff --git a/barcodes_gs1_nomenclature/i18n/uk.po b/barcodes_gs1_nomenclature/i18n/uk.po new file mode 100644 index 0000000..e18abda --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/uk.po @@ -0,0 +1,260 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Алфавітно-цифрова назва" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Альтернативний роздільник регулярного виразу для FNC1. Роздільник не має " +"збігатися з початком/кінцем жодного пов’язаного шаблону правил." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Пов'язана од. вим." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Номенклатура штрих-кодів" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Правило штрих-коду" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Дата вжити до" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Дата" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Десятковий" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Розташування призначення" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Кодування" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Термін дії" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Роздільник FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Тип вмісту GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Маршрутизація HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Якщо True, використовуйте останню цифру AI, щоб визначити, де знаходиться " +"перший десятковий" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Недійсний штрих-код: не можна відформатувати як дату" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Недійсний штрих-код: знаки чеку некоректні" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Є номенклатурою GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Розташування" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Партія" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Міра" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Числовий ідентифікатор" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Дата пакування" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Упаковка" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Тип упаковки" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Кількість" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "Альтернативний роздільник FNC1 не є дійсним регулярним виразом: " + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Тип вмісту GS1 визначає, які будуть дані при обробці правилом штрих-коду: * " +"Дата: штрих-код буде перетворено в дату і час Odoo; * Вимірювання: значення " +"штрих-коду пов'язане з певною од. вим.; * Числовий ідентифікатор: штрих-код " +"фіксованої довжини після певного кодування; * Буквенно-цифрова назва: штрих-" +"код змінної довжини." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Паттерн правила \"%s\" не є дійсним регуляним виразом: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Паттерн правила \"%s\" недійсний, він вимагає дві групи:\n" +"\t- Перша модуля ідентифікатора (зазвичай від 2 до 4 чисел);\n" +"\t- Друга для отримання значення." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Щось не так із паттерном правила штрих-коду \"%s\".\n" +"Якщо це правило використовує десяткові числа, перевірте, чи він не може отримати тільки цифру як останній символ для модуля ідентифікатора.\n" +"Перевірте також, чи збігаються значення, які можуть бути лише цифрами, інакше значення не може бути використано як міра." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Ця номенклатура використовує специфікацію GS1, лише дозволені правила " +"кодування GS1-128 є правильною номенклатурою." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "Цей штрих-код не може бути розділений жодним правилом." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Штрих-код не може бути частково чи повністю розділений." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Дане правило діятиме, тільки якщо штрих-код закодовано точно зазначеним " +"кодуванням" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Тип" diff --git a/barcodes_gs1_nomenclature/i18n/vi.po b/barcodes_gs1_nomenclature/i18n/vi.po new file mode 100644 index 0000000..984538d --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/vi.po @@ -0,0 +1,262 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "Tên chứa chữ và số" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "" +"Dấu phân cách biểu thức chính quy thay thế cho FNC1 . Ký tự phân tách không " +"được khớp với phần đầu/cuối của bất kỳ mẫu quy tắc liên quan nào." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "Đơn vị tính liên kết" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "Phép đặt tên mã vạch" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "Quy tắc mã vạch" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "Sử dụng tốt nhất trước ngày" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "Ngày" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "Số thập phân" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "Vị trí đích" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "Mã hoá" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "Ngày hết hạn" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "Ký tự phân tách FNC1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "Loại nội dung GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "Định tuyến HTTP" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "" +"Nếu Đúng, hãy sử dụng chữ số cuối cùng của AI để xác định vị trí của số thập" +" phân đầu tiên" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "Mã vạch không hợp lệ: không thể định dạng thành ngày" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "Mã vạch không hợp lệ: chữ số kiểm tra không chính xác" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "Là quy tắc đặt tên GS1" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "Vị trí" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "Lô" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "Số đo" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "Mã dạng số" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "Ngày đóng gói" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "Kiện hàng" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "Kiểu đóng gói" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "Số lượng" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "" +"Thay thế dấu phân cách FNC1 không phải là một biểu thức chính quy hợp lệ:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"Loại nội dung GS1 xác định loại dữ liệu mà quy tắc sẽ xử lý mã vạch thành:" +" * Ngày: mã vạch sẽ được chuyển đổi thành ngày giờ của Odoo; *" +" Đơn vị tính: giá trị của mã vạch liên quan đến một đơn vị tính cụ thể;" +" * Mã dạng số: mã vạch có độ dài cố định theo một cách mã hóa cụ " +"thể; * Tên chứa chữ và số: mã vạch có độ dài không cố định." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "Mẫu quy tắc \"%s\" không phải là một biểu thức chính quy hợp lệ: " + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"Mẫu quy tắc \"%s\" không hợp lệ, cần hai nhóm:\n" +"\t- Nhóm đầu tiên dành cho Mã ứng dụng (thường là 2 đến 4 chữ số);\n" +"\t- Nhóm thứ hai để ghi nhận giá trị." + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"Đã xảy ra lỗi với mẫu quy tắc mã vạch \"%s\".\n" +"Nếu quy tắc này sử dụng số thập phân, hãy đảm bảo rằng ký tự cuối cùng của Mã ứng dụng phải là một chữ số.\n" +"Ngoài ra, hãy đảm bảo các giá trị có thể khớp phải là chữ số, nếu không, giá trị không thể được sử dụng làm đơn vị tính." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "" +"Phép đặt tên này sử dụng quy định kỹ thuật GS1, chỉ các quy tắc mã hóa " +"GS1-128 được chấp nhận là loại phép đặt tên này." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "" +"Không thể phân tích cú pháp mã vạch này theo bất kỳ quy tắc mã vạch nào." + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "Không thể phân tích cú pháp một phần hoặc toàn bộ mã vạch này." + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "" +"Quy tắc này sẽ chỉ áp dụng nếu mã vạch được mã hóa bằng cách mã hóa được chỉ" +" định" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "Loại" diff --git a/barcodes_gs1_nomenclature/i18n/zh_CN.po b/barcodes_gs1_nomenclature/i18n/zh_CN.po new file mode 100644 index 0000000..757962a --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/zh_CN.po @@ -0,0 +1,251 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023 +# Chloe Wang, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: 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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "字母数字名称" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "FNC1的替代性正则表达式分隔符。分隔符不能与任何相关规则模式的开始/结束匹配。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "相关联的Uom" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "条码命名规则" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "条码规则" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "在此日期前最佳" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "日期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "小数" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "目的位置" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "编码" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "有效期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1分离器" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1内容类型" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 路由" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "如果为真,使用AI的最后一位数字来确定第一个小数的位置" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "条形码无效:无法格式化为日期" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "条形码无效:检查数字不正确" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "是否是GS1 术语" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "位置" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "批次" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "测量" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "数值标识符" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "包装日期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "服务包" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "包裹类型" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "数量" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 替代分隔符不是有效的 Regex:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1 内容类型定义了规则将条形码处理为何种数据: * 日期:条形码将转换为 Odoo 日期; * 测量:条形码的值与特定的 UoM 相关; * " +"数字标识符:按照特定编码的固定长度条形码; * 字母数字名称:长度可变的条形码。" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "规则模式\"%s\"不是有效的 Regex:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"规则模式\"%s\"无效,它需要两组。\n" +"\t- 第一组是应用标识符(通常为 2 到 4 位数字)。\n" +"\t- 第二组捕捉值。" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"条码规则\"%s\"模式有问题。\n" +"如果该规则使用十进制,请检查应用程序标识符的最后一个字符是否为数字。\n" +"还要检查可能匹配的值只能是数字,否则该值不能被转换为度量值。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "此命名规范采用 GS1 规范,只接受 GS1-128 编码规则。" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "这个条形码不能被任何条形码规则所解析。" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "这个条形码不能被部分或完全解析。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "这条规则只应用于特殊编码的条形码" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "类型" diff --git a/barcodes_gs1_nomenclature/i18n/zh_TW.po b/barcodes_gs1_nomenclature/i18n/zh_TW.po new file mode 100644 index 0000000..9f4334d --- /dev/null +++ b/barcodes_gs1_nomenclature/i18n/zh_TW.po @@ -0,0 +1,250 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * barcodes_gs1_nomenclature +# +# Translators: +# Wil Odoo, 2023 +# Tony Ng, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tony Ng, 2023\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: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__alpha +msgid "Alpha-Numeric Name" +msgstr "字母數字名稱" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "" +"Alternative regex delimiter for the FNC1. The separator must not match the " +"begin/end of any related rules pattern." +msgstr "FNC1的替代性正則表達式分隔符。分隔符不能與任何相關規則模式的開始/結束匹配。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__associated_uom_id +msgid "Associated Uom" +msgstr "關聯的計量單位" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_nomenclature +msgid "Barcode Nomenclature" +msgstr "條碼命名規則" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_barcode_rule +msgid "Barcode Rule" +msgstr "條碼規則" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__use_date +msgid "Best before Date" +msgstr "最佳日期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__date +msgid "Date" +msgstr "日期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "Decimal" +msgstr "小數" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location_dest +msgid "Destination location" +msgstr "目的庫位" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "Encoding" +msgstr "編碼" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__expiration_date +msgid "Expiration Date" +msgstr "過期日期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__gs1_separator_fnc1 +msgid "FNC1 Separator" +msgstr "FNC1分離器" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "GS1 Content Type" +msgstr "GS1 內容類型" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__encoding__gs1-128 +msgid "GS1-128" +msgstr "GS1-128" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model,name:barcodes_gs1_nomenclature.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 路由" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_decimal_usage +msgid "" +"If True, use the last digit of AI to determine where the first decimal is" +msgstr "如果為真,使用AI的最後一位數字來確定第一個小數的位置" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: can't be formated as date" +msgstr "條碼無效:無法格式化為日期" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "Invalid barcode: the check digit is incorrect" +msgstr "條碼無效:校驗位不正確" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "Is GS1 Nomenclature" +msgstr "是 GS1 命名法" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__location +msgid "Location" +msgstr "地點" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__lot +msgid "Lot" +msgstr "批次" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__measure +msgid "Measure" +msgstr "測量" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__gs1_content_type__identifier +msgid "Numeric Identifier" +msgstr "數字標識符" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__pack_date +msgid "Pack Date" +msgstr "包裝日期" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package +msgid "Package" +msgstr "包裹" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__package_type +msgid "Package Type" +msgstr "包裝類型" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields.selection,name:barcodes_gs1_nomenclature.selection__barcode_rule__type__quantity +msgid "Quantity" +msgstr "數量" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "The FNC1 Separator Alternative is not a valid Regex: " +msgstr "FNC1 替代分隔符不是有效的 Regex正規表示式:" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__gs1_content_type +msgid "" +"The GS1 content type defines what kind of data the rule will process the " +"barcode as: * Date: the barcode will be converted into a Odoo " +"datetime; * Measure: the barcode's value is related to a specific " +"UoM; * Numeric Identifier: fixed length barcode following a specific " +"encoding; * Alpha-Numeric Name: variable length barcode." +msgstr "" +"GS1內容類型定義了規則將把條形碼處理成什麼樣的數據。 * 日期:條形碼將被轉換為Odoo日期時間; * " +"測量:條形碼的值與特定的計量單位有關; * 數字標識符:遵循特定編碼的固定長度的條形碼; * 英數名稱:可變長度的條形碼。" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "The rule pattern \"%s\" is not a valid Regex: " +msgstr "規則模式“%s”不是有效的正則表達式:" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_rule.py:0 +#, python-format +msgid "" +"The rule pattern \"%s\" is not valid, it needs two groups:\n" +"\t- A first one for the Application Identifier (usually 2 to 4 digits);\n" +"\t- A second one to catch the value." +msgstr "" +"規則模式“%s”無效,它需要兩個組:\n" +"- 應用程序標識符的第一個(通常為 2 到 4 位數字);\n" +"- 第二個捕獲值。" + +#. module: barcodes_gs1_nomenclature +#. odoo-python +#: code:addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py:0 +#, python-format +msgid "" +"There is something wrong with the barcode rule \"%s\" pattern.\n" +"If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" +"Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure." +msgstr "" +"條碼規則“%s”模式有問題。\n" +"如果此規則使用十進制,請檢查它不能在某個時間將數字作為應用程序標識符的最後一個字符。\n" +"還檢查可能的匹配值只能是數字,否則該值不能被轉換為度量。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_nomenclature__is_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__is_gs1_nomenclature +msgid "" +"This Nomenclature use the GS1 specification, only GS1-128 encoding rules is " +"accepted is this kind of nomenclature." +msgstr "此命名法使用 GS1 規範,僅接受 GS1-128 編碼規則是這種命名法。" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be parsed by any barcode rules." +msgstr "任何條碼規則都無法解析此條碼。" + +#. module: barcodes_gs1_nomenclature +#. odoo-javascript +#: code:addons/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js:0 +#, python-format +msgid "This barcode can't be partially or fully parsed." +msgstr "無法部分或完全解析此條碼。" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,help:barcodes_gs1_nomenclature.field_barcode_rule__encoding +msgid "" +"This rule will apply only if the barcode is encoded with the specified " +"encoding" +msgstr "這條規則將只適用於特定編碼的條碼" + +#. module: barcodes_gs1_nomenclature +#: model:ir.model.fields,field_description:barcodes_gs1_nomenclature.field_barcode_rule__type +msgid "Type" +msgstr "類型" diff --git a/barcodes_gs1_nomenclature/models/__init__.py b/barcodes_gs1_nomenclature/models/__init__.py new file mode 100644 index 0000000..d979a29 --- /dev/null +++ b/barcodes_gs1_nomenclature/models/__init__.py @@ -0,0 +1,3 @@ +from . import barcode_nomenclature +from . import barcode_rule +from . import ir_http diff --git a/barcodes_gs1_nomenclature/models/barcode_nomenclature.py b/barcodes_gs1_nomenclature/models/barcode_nomenclature.py new file mode 100644 index 0000000..01910c3 --- /dev/null +++ b/barcodes_gs1_nomenclature/models/barcode_nomenclature.py @@ -0,0 +1,175 @@ +import re +import datetime +import calendar + +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError +from odoo.tools import get_barcode_check_digit + +FNC1_CHAR = '\x1D' + + +class BarcodeNomenclature(models.Model): + _inherit = 'barcode.nomenclature' + + is_gs1_nomenclature = fields.Boolean( + string="Is GS1 Nomenclature", + help="This Nomenclature use the GS1 specification, only GS1-128 encoding rules is accepted is this kind of nomenclature.") + gs1_separator_fnc1 = fields.Char( + string="FNC1 Separator", trim=False, default=r'(Alt029|#|\x1D)', + help="Alternative regex delimiter for the FNC1. The separator must not match the begin/end of any related rules pattern.") + + @api.constrains('gs1_separator_fnc1') + def _check_pattern(self): + for nom in self: + if nom.is_gs1_nomenclature and nom.gs1_separator_fnc1: + try: + re.compile("(?:%s)?" % nom.gs1_separator_fnc1) + except re.error as error: + raise ValidationError(_("The FNC1 Separator Alternative is not a valid Regex: ") + str(error)) + + @api.model + def gs1_date_to_date(self, gs1_date): + """ Converts a GS1 date into a datetime.date. + + :param gs1_date: A year formated as yymmdd + :type gs1_date: str + :return: converted date + :rtype: datetime.date + """ + # See 7.12 Determination of century in dates: + # https://www.gs1.org/sites/default/files/docs/barcodes/GS1_General_Specifications.pdf + now = datetime.date.today() + current_century = now.year // 100 + substract_year = int(gs1_date[0:2]) - (now.year % 100) + century = (51 <= substract_year <= 99 and current_century - 1) or\ + (-99 <= substract_year <= -50 and current_century + 1) or\ + current_century + year = century * 100 + int(gs1_date[0:2]) + + if gs1_date[-2:] == '00': # Day is not mandatory, when not set -> last day of the month + date = datetime.datetime.strptime(str(year) + gs1_date[2:4], '%Y%m') + date = date.replace(day=calendar.monthrange(year, int(gs1_date[2:4]))[1]) + else: + date = datetime.datetime.strptime(str(year) + gs1_date[2:], '%Y%m%d') + return date.date() + + def parse_gs1_rule_pattern(self, match, rule): + result = { + 'rule': rule, + 'ai': match.group(1), + 'string_value': match.group(2), + } + if rule.gs1_content_type == 'measure': + try: + decimal_position = 0 # Decimal position begins at the end, 0 means no decimal. + if rule.gs1_decimal_usage: + decimal_position = int(match.group(1)[-1]) + if decimal_position > 0: + result['value'] = float(match.group(2)[:-decimal_position] + "." + match.group(2)[-decimal_position:]) + else: + result['value'] = int(match.group(2)) + except Exception: + raise ValidationError(_( + "There is something wrong with the barcode rule \"%s\" pattern.\n" + "If this rule uses decimal, check it can't get sometime else than a digit as last char for the Application Identifier.\n" + "Check also the possible matched values can only be digits, otherwise the value can't be casted as a measure.", + rule.name)) + elif rule.gs1_content_type == 'identifier': + # Check digit and remove it of the value + if match.group(2)[-1] != str(get_barcode_check_digit("0" * (18 - len(match.group(2))) + match.group(2))): + return None + result['value'] = match.group(2) + elif rule.gs1_content_type == 'date': + if len(match.group(2)) != 6: + return None + result['value'] = self.gs1_date_to_date(match.group(2)) + else: # when gs1_content_type == 'alpha': + result['value'] = match.group(2) + return result + + def gs1_decompose_extanded(self, barcode): + """Try to decompose the gs1 extanded barcode into several unit of information using gs1 rules. + + Return a ordered list of dict + """ + self.ensure_one() + separator_group = FNC1_CHAR + "?" + if self.gs1_separator_fnc1: + separator_group = "(?:%s)?" % self.gs1_separator_fnc1 + # zxing-library patch, removing GS1 identifiers + for identifier in [']C1', ']e0', ']d2', ']Q3', ']J1']: + if barcode.startswith(identifier): + barcode = barcode.replace(identifier, '') + break + results = [] + gs1_rules = self.rule_ids.filtered(lambda r: r.encoding == 'gs1-128') + + def find_next_rule(remaining_barcode): + for rule in gs1_rules: + match = re.search("^" + rule.pattern + separator_group, remaining_barcode) + # If match and contains 2 groups at minimun, the first one need to be the AI and the second the value + # We can't use regex nammed group because in JS, it is not the same regex syntax (and not compatible in all browser) + if match and len(match.groups()) >= 2: + res = self.parse_gs1_rule_pattern(match, rule) + if res: + return res, remaining_barcode[match.end():] + return None + + while len(barcode) > 0: + res_bar = find_next_rule(barcode) + # Cannot continue -> Fail to decompose gs1 and return + if not res_bar or res_bar[1] == barcode: + return None + barcode = res_bar[1] + results.append(res_bar[0]) + + return results + + def parse_barcode(self, barcode): + if self.is_gs1_nomenclature: + return self.gs1_decompose_extanded(barcode) + return super().parse_barcode(barcode) + + @api.model + def _preprocess_gs1_search_args(self, args, barcode_types, field='barcode'): + """Helper method to preprocess 'args' in _search method to add support to + search with GS1 barcode result. + Cut off the padding if using GS1 and searching on barcode. If the barcode + is only digits to keep the original barcode part only. + """ + nomenclature = self.env.company.nomenclature_id + if nomenclature.is_gs1_nomenclature: + for i, arg in enumerate(args): + if not isinstance(arg, (list, tuple)) or len(arg) != 3: + continue + field_name, operator, value = arg + if field_name != field or operator not in ['ilike', 'not ilike', '=', '!='] or value is False: + continue + + parsed_data = [] + try: + parsed_data += nomenclature.parse_barcode(value) or [] + except (ValidationError, ValueError): + pass + + replacing_operator = 'ilike' if operator in ['ilike', '='] else 'not ilike' + for data in parsed_data: + data_type = data['rule'].type + value = data['value'] + if data_type in barcode_types: + if data_type == 'lot': + args[i] = (field_name, operator, value) + break + match = re.match('0*([0-9]+)$', str(value)) + if match: + unpadded_barcode = match.groups()[0] + args[i] = (field_name, replacing_operator, unpadded_barcode) + break + + # The barcode isn't a valid GS1 barcode, checks if it can be unpadded. + if not parsed_data: + match = re.match('0+([0-9]+)$', value) + if match: + args[i] = (field_name, replacing_operator, match.groups()[0]) + return args diff --git a/barcodes_gs1_nomenclature/models/barcode_rule.py b/barcodes_gs1_nomenclature/models/barcode_rule.py new file mode 100644 index 0000000..669ee64 --- /dev/null +++ b/barcodes_gs1_nomenclature/models/barcode_rule.py @@ -0,0 +1,69 @@ +import re + +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + + +class BarcodeRule(models.Model): + _inherit = 'barcode.rule' + + def _default_encoding(self): + return 'gs1-128' if self.env.context.get('is_gs1') else 'any' + + encoding = fields.Selection( + selection_add=[('gs1-128', 'GS1-128')], default=_default_encoding, + ondelete={'gs1-128': 'set default'}) + type = fields.Selection( + selection_add=[ + ('quantity', 'Quantity'), + ('location', 'Location'), + ('location_dest', 'Destination location'), + ('lot', 'Lot number'), + ('package', 'Package'), + ('use_date', 'Best before Date'), + ('expiration_date', 'Expiration Date'), + ('package_type', 'Package Type'), + ('pack_date', 'Pack Date'), + ], ondelete={ + 'quantity': 'set default', + 'location': 'set default', + 'location_dest': 'set default', + 'lot': 'set default', + 'package': 'set default', + 'use_date': 'set default', + 'expiration_date': 'set default', + 'package_type': 'set default', + 'pack_date': 'set default', + }) + is_gs1_nomenclature = fields.Boolean(related="barcode_nomenclature_id.is_gs1_nomenclature") + gs1_content_type = fields.Selection([ + ('date', 'Date'), + ('measure', 'Measure'), + ('identifier', 'Numeric Identifier'), + ('alpha', 'Alpha-Numeric Name'), + ], string="GS1 Content Type", + help="The GS1 content type defines what kind of data the rule will process the barcode as:\ + * Date: the barcode will be converted into a Odoo datetime;\ + * Measure: the barcode's value is related to a specific UoM;\ + * Numeric Identifier: fixed length barcode following a specific encoding;\ + * Alpha-Numeric Name: variable length barcode.") + gs1_decimal_usage = fields.Boolean('Decimal', help="If True, use the last digit of AI to determine where the first decimal is") + associated_uom_id = fields.Many2one('uom.uom') + + @api.constrains('pattern') + def _check_pattern(self): + gs1_rules = self.filtered(lambda rule: rule.encoding == 'gs1-128') + for rule in gs1_rules: + try: + re.compile(rule.pattern) + except re.error as error: + raise ValidationError(_("The rule pattern \"%s\" is not a valid Regex: ", rule.name) + str(error)) + groups = re.findall(r'\([^)]*\)', rule.pattern) + if len(groups) != 2: + raise ValidationError(_( + "The rule pattern \"%s\" is not valid, it needs two groups:" + "\n\t- A first one for the Application Identifier (usually 2 to 4 digits);" + "\n\t- A second one to catch the value.", + rule.name)) + + super(BarcodeRule, (self - gs1_rules))._check_pattern() diff --git a/barcodes_gs1_nomenclature/models/ir_http.py b/barcodes_gs1_nomenclature/models/ir_http.py new file mode 100644 index 0000000..9a42eb9 --- /dev/null +++ b/barcodes_gs1_nomenclature/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 IrHttp(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + res = super().session_info() + nomenclature = self.env.company.sudo().nomenclature_id + if not nomenclature.is_gs1_nomenclature: + return res + res['gs1_group_separator_encodings'] = nomenclature.gs1_separator_fnc1 + return res diff --git a/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js b/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js new file mode 100644 index 0000000..2c6f447 --- /dev/null +++ b/barcodes_gs1_nomenclature/static/src/js/barcode_parser.js @@ -0,0 +1,167 @@ +/** @odoo-module **/ + +import { patch } from "@web/core/utils/patch"; +import { BarcodeParser } from "@barcodes/js/barcode_parser"; +import { _t } from "@web/core/l10n/translation"; +export class GS1BarcodeError extends Error {}; + +export const FNC1_CHAR = String.fromCharCode(29); + +patch(BarcodeParser, { + barcodeNomenclatureFields: [ + ...BarcodeParser.barcodeNomenclatureFields, + "is_gs1_nomenclature", + "gs1_separator_fnc1", + ], + barcodeRuleFields: [ + ...BarcodeParser.barcodeRuleFields, + "gs1_content_type", + "gs1_decimal_usage", + "associated_uom_id", + ], +}); + +patch(BarcodeParser.prototype, { + setup(attributes) { + super.setup(...arguments); + // Use the nomenclature's separaor regex, else use an impossible one. + const nomenclatureSeparator = this.nomenclature && this.nomenclature.gs1_separator_fnc1; + this.gs1SeparatorRegex = new RegExp(nomenclatureSeparator || '.^', 'g'); + }, + + /** + * Convert YYMMDD GS1 date into a Date object + * + * @param {string} gs1Date YYMMDD string date, length must be 6 + * @returns {Date} + */ + gs1_date_to_date(gs1Date) { + // See 7.12 Determination of century in dates: + // https://www.gs1.org/sites/default/files/docs/barcodes/GS1_General_Specifications.pdfDetermination of century + const now = new Date(); + const substractYear = parseInt(gs1Date.slice(0, 2)) - (now.getFullYear() % 100); + let century = Math.floor(now.getFullYear() / 100); + if (51 <= substractYear && substractYear <= 99) { + century--; + } else if (-99 <= substractYear && substractYear <= -50) { + century++; + } + const year = century * 100 + parseInt(gs1Date.slice(0, 2)); + const date = new Date(year, parseInt(gs1Date.slice(2, 4) - 1)); + + if (gs1Date.slice(-2) === '00'){ + // Day is not mandatory, when not set -> last day of the month + date.setDate(new Date(year, parseInt(gs1Date.slice(2, 4)), 0).getDate()); + } else { + date.setDate(parseInt(gs1Date.slice(-2))); + } + return date; + }, + + /** + * Perform interpretation of the barcode value depending of the rule.gs1_content_type + * + * @param {Array} match Result of a regex match with atmost 2 groups (ia and value) + * @param {Object} rule Matched Barcode Rule + * @returns {Object|null} + */ + parse_gs1_rule_pattern(match, rule) { + const result = { + rule: Object.assign({}, rule), + ai: match[1], + string_value: match[2], + code: match[2], + base_code: match[2], + type: rule.type + }; + if (rule.gs1_content_type === 'measure'){ + let decimalPosition = 0; // Decimal position begin at the end, 0 means no decimal + if (rule.gs1_decimal_usage){ + decimalPosition = parseInt(match[1][match[1].length - 1]); + } + if (decimalPosition > 0) { + const integral = match[2].slice(0, match[2].length - decimalPosition); + const decimal = match[2].slice(match[2].length - decimalPosition); + result.value = parseFloat( integral + "." + decimal); + } else { + result.value = parseInt(match[2]); + } + } else if (rule.gs1_content_type === 'identifier'){ + if (parseInt(match[2][match[2].length - 1]) !== this.get_barcode_check_digit("0".repeat(18 - match[2].length) + match[2])){ + throw new Error(_t("Invalid barcode: the check digit is incorrect")); + // return {error: _t("Invalid barcode: the check digit is incorrect")}; + } + result.value = match[2]; + } else if (rule.gs1_content_type === 'date'){ + if (match[2].length !== 6){ + throw new Error(_t("Invalid barcode: can't be formated as date")); + // return {error: _t("Invalid barcode: can't be formated as date")}; + } + result.value = this.gs1_date_to_date(match[2]); + } else { + result.value = match[2]; + } + return result; + }, + + /** + * Try to decompose the gs1 extanded barcode into several unit of information using gs1 rules. + * + * @param {string} barcode + * @returns {Array} Array of object + */ + gs1_decompose_extanded(barcode) { + const results = []; + const rules = this.nomenclature.rules.filter(rule => rule.encoding === 'gs1-128'); + const separatorReg = `(?:${FNC1_CHAR}+)?`; + barcode = this._convertGS1Separators(barcode); + + while (barcode.length > 0) { + const barcodeLength = barcode.length; + for (const rule of rules) { + const match = barcode.match("^" + rule.pattern + separatorReg); + if (match && match.length >= 3) { + const res = this.parse_gs1_rule_pattern(match, rule); + if (res) { + barcode = barcode.slice(match.index + match[0].length); + results.push(res); + if (barcode.length === 0) { + return results; // Barcode completly parsed, no need to keep looping. + } + } else { + throw new GS1BarcodeError(_t("This barcode can't be parsed by any barcode rules.")); + } + } + } + if (barcodeLength === barcode.length) { + throw new GS1BarcodeError(_t("This barcode can't be partially or fully parsed.")); + } + } + + return results; + }, + + /** + * @override + * @returns {Object|Array|null} If nomenclature is GS1, returns an array or null + */ + parse_barcode(barcode) { + if (this.nomenclature && this.nomenclature.is_gs1_nomenclature) { + return this.gs1_decompose_extanded(barcode); + } + return super.parse_barcode(...arguments); + }, + + /** + * The FNC1 is the default GS1 separator character, but through the field `gs1_separator_fnc1`, + * the user has the possibility to define one or multiple characters to use as separator as + * a regex. This method replaces all of the matches in the given barcode by the FNC1. + * + * @param {string} barcode + * @returns {string} + */ + _convertGS1Separators: function (barcode) { + barcode = barcode.replace(this.gs1SeparatorRegex, FNC1_CHAR); + return barcode; + }, +}); diff --git a/barcodes_gs1_nomenclature/static/src/js/barcode_service.js b/barcodes_gs1_nomenclature/static/src/js/barcode_service.js new file mode 100644 index 0000000..b802459 --- /dev/null +++ b/barcodes_gs1_nomenclature/static/src/js/barcode_service.js @@ -0,0 +1,18 @@ +/** @odoo-module **/ + +import { session } from "@web/session"; +import { patch } from "@web/core/utils/patch"; +import { barcodeService } from '@barcodes/barcode_service'; + +import { FNC1_CHAR } from "@barcodes_gs1_nomenclature/js/barcode_parser"; + + +patch(barcodeService, { + // Use the regex given by the session, else use an impossible one + gs1SeparatorRegex: new RegExp(session.gs1_group_separator_encodings || '.^', 'g'), + + cleanBarcode(barcode) { + barcode = barcode.replace(barcodeService.gs1SeparatorRegex, FNC1_CHAR); + return super.cleanBarcode(barcode); + }, +}); diff --git a/barcodes_gs1_nomenclature/static/src/js/tests/barcode_parser_tests.js b/barcodes_gs1_nomenclature/static/src/js/tests/barcode_parser_tests.js new file mode 100644 index 0000000..9490d91 --- /dev/null +++ b/barcodes_gs1_nomenclature/static/src/js/tests/barcode_parser_tests.js @@ -0,0 +1,254 @@ +/** @odoo-module **/ + +import { BarcodeParser } from "@barcodes/js/barcode_parser"; +import { barcodeService } from "@barcodes/barcode_service"; + + +QUnit.module('Barcodes', {}, function () { +QUnit.module('Barcode GS1 Parser', { + beforeEach: function () { + this.nomenclature = { + id: 2, + name: "GS1", + upc_ean_conv: "always", + is_gs1_nomenclature: true, + gs1_separator_fnc1: '', + rules: [ + { + id: 2, + name: "Global Trade Item Number (GTIN)", + barcode_nomenclature_id: 2, + sequence: 100, + encoding: "gs1-128", + pattern: "(01)(\\d{14})", + type: "product", + gs1_content_type: "identifier", + gs1_decimal_usage: false + }, { + id: 3, + name: "GTIN of contained trade items", + barcode_nomenclature_id: 2, + sequence: 101, + encoding: "gs1-128", + pattern: "(02)(\\d{14})", + type: "product", + gs1_content_type: "identifier", + gs1_decimal_usage: false + }, { + id: 4, + name: "Batch or lot number", + barcode_nomenclature_id: 2, + sequence: 102, + encoding: "gs1-128", + pattern: "(10)([!\"%/0-9:?A-Za-z]{0,20})", + type: "product", + gs1_content_type: "alpha", + gs1_decimal_usage: false + }, { + id: 5, + name: "Serial number", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(21)([!\"%/0-9:?A-Za-z]{0,20})", + type: "product", + gs1_content_type: "alpha", + gs1_decimal_usage: false + }, { + id: 6, + name: "Pack date (YYMMDD)", + barcode_nomenclature_id: 2, + sequence: 103, + encoding: "gs1-128", + pattern: "(13)(\\d{6})", + type: "pack_date", + gs1_content_type: "date", + gs1_decimal_usage: false + }, { + id: 7, + name: "Best before date (YYMMDD)", + barcode_nomenclature_id: 2, + sequence: 104, + encoding: "gs1-128", + pattern: "(15)(\\d{6})", + type: "use_date", + gs1_content_type: "date", + gs1_decimal_usage: false + }, { + id: 8, + name: "Expiration date (YYMMDD)", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(16)(\\d{6})", + type: "expiration_date", + gs1_content_type: "date", + gs1_decimal_usage: false + }, { + id: 9, + name: "Variable count of items (variabl", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(30)(\\d{0,8})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: false + }, { + id: 10, + name: "Count of trade items or trade it", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(37)(\\d{0,8})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: false + }, { + id: 11, + name: "Net weight, kilograms (variable", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(310[0-5])(\\d{6})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: true + }, { + id: 12, + name: "Length or first dimension, metre", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(311[0-5])(\\d{6})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: true + }, { + id: 13, + name: "Net volume, litres (variable mea", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(315[0-5])(\\d{6})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: true + }, { + id: 14, + name: "Length or first dimension, inche", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(321[0-5])(\\d{6})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: true + }, { + id: 15, + name: "Net weight (or volume), ounces (", + barcode_nomenclature_id: 2, + sequence: 105, + encoding: "gs1-128", + pattern: "(357[0-5])(\\d{6})", + type: "product", + gs1_content_type: "measure", + gs1_decimal_usage: true + } + ] + } + } +}, function () { + QUnit.test('Test gs1 date barcode', async function (assert) { + assert.expect(9); + const barcodeNomenclature = new BarcodeParser({nomenclature: this.nomenclature}); + + // 20/10/2015 -> 151020 + let dateGS1 = "151020"; + let date = barcodeNomenclature.gs1_date_to_date(dateGS1); + assert.equal(date.getDate(), 20); + assert.equal(date.getMonth() + 1, 10); + assert.equal(date.getFullYear(), 2015); + + // XX/03/2052 -> 520300 -> (if day no set take last day of the month -> 31) + dateGS1 = "520300"; + date = barcodeNomenclature.gs1_date_to_date(dateGS1); + assert.equal(date.getDate(), 31); + assert.equal(date.getMonth() + 1, 3); + assert.equal(date.getFullYear(), 2052); + + // XX/02/2020 -> 520200 -> (if day no set take last day of the month -> 29) + dateGS1 = "200200"; + date = barcodeNomenclature.gs1_date_to_date(dateGS1); + assert.equal(date.getDate(), 29); + assert.equal(date.getMonth() + 1, 2); + assert.equal(date.getFullYear(), 2020); + }); + + QUnit.test('Test gs1 decompose extended', async function (assert) { + assert.expect(19); + const barcodeNomenclature = new BarcodeParser({nomenclature: this.nomenclature}); + + // (01)94019097685457(10)33650100138(3102)002004(15)131018 + let code128 = "01940190976854571033650100138\x1D310200200415131018"; + let res = barcodeNomenclature.gs1_decompose_extanded(code128); + assert.equal(res.length, 4); + assert.equal(res[0].ai, "01"); + + assert.equal(res[1].ai, "10"); + + assert.equal(res[2].ai, "3102"); + assert.equal(res[2].value, 20.04); + + assert.equal(res[3].ai, "15"); + assert.equal(typeof res[3].value.getFullYear, 'function'); + assert.equal(res[3].value.getFullYear(), 2013); + assert.equal(res[3].value.getDate(), 18); + assert.equal(res[3].value.getMonth() + 1, 10); + + // (01)94019097685457(13)170119(30)17 + code128 = "0194019097685457131701193017"; + res = barcodeNomenclature.gs1_decompose_extanded(code128); + assert.equal(res.length, 3); + assert.equal(res[0].ai, "01"); + + assert.equal(res[1].ai, "13"); + assert.equal(typeof res[1].value.getFullYear, 'function'); + assert.equal(res[1].value.getFullYear(), 2017); + assert.equal(res[1].value.getDate(), 19); + assert.equal(res[1].value.getMonth() + 1, 1); + + assert.equal(res[2].ai, "30"); + assert.equal(res[2].value, 17); + }); + + QUnit.test('Test Alternative GS1 Separator (fnc1)', async function (assert) { + assert.expect(6); + let barcodeNomenclature = new BarcodeParser({ nomenclature: this.nomenclature }); + await barcodeNomenclature.loaded; + + // (21)12345(15)090101(16)100101 + const code128 = "2112345#1509010116100101"; + let res; + try { + res = barcodeNomenclature.gs1_decompose_extanded(barcodeService.cleanBarcode(code128)); + } catch (error) { + assert.ok( + error instanceof Error, + "Still using the default separator, so using a custom separator shouldn't work" + ); + } + + // Reload the nomenclature but this time using '#' as separator. + this.nomenclature.gs1_separator_fnc1 = '#'; + barcodeNomenclature = new BarcodeParser({ nomenclature: this.nomenclature }); + await barcodeNomenclature.loaded; + res = barcodeNomenclature.gs1_decompose_extanded(barcodeService.cleanBarcode(code128)); + assert.equal(res.length, 3); + assert.equal(res[0].ai, "21"); + assert.equal(res[0].value, "12345"); + assert.equal(res[1].ai, "15"); + assert.equal(res[2].ai, "16"); + }); +}); +}); diff --git a/barcodes_gs1_nomenclature/tests/__init__.py b/barcodes_gs1_nomenclature/tests/__init__.py new file mode 100644 index 0000000..cdab5c7 --- /dev/null +++ b/barcodes_gs1_nomenclature/tests/__init__.py @@ -0,0 +1 @@ +from . import test_barcodes_gs1_nomenclature diff --git a/barcodes_gs1_nomenclature/tests/test_barcodes_gs1_nomenclature.py b/barcodes_gs1_nomenclature/tests/test_barcodes_gs1_nomenclature.py new file mode 100644 index 0000000..23a0fae --- /dev/null +++ b/barcodes_gs1_nomenclature/tests/test_barcodes_gs1_nomenclature.py @@ -0,0 +1,130 @@ +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestBarcodeGS1Nomenclature(TransactionCase): + def test_gs1_date_to_date(self): + barcode_nomenclature = self.env['barcode.nomenclature'] + # 20/10/2015 -> 151020 + date_gs1 = "151020" + date = barcode_nomenclature.gs1_date_to_date(date_gs1) + self.assertEqual(date.day, 20) + self.assertEqual(date.month, 10) + self.assertEqual(date.year, 2015) + + # XX/03/2052 -> 520300 -> (if day no set take last day of the month -> 31) + date_gs1 = "520300" + date = barcode_nomenclature.gs1_date_to_date(date_gs1) + self.assertEqual(date.day, 31) + self.assertEqual(date.month, 3) + self.assertEqual(date.year, 2052) + + # XX/02/2020 -> 520200 -> (if day no set take last day of the month -> 29) + date_gs1 = "200200" + date = barcode_nomenclature.gs1_date_to_date(date_gs1) + self.assertEqual(date.day, 29) + self.assertEqual(date.month, 2) + self.assertEqual(date.year, 2020) + + def test_gs1_extanded_barcode_1(self): + barcode_nomenclature = self.env['barcode.nomenclature'].browse(self.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature')) + # (01)94019097685457(10)33650100138(3102)002004(15)131018 + code128 = "01940190976854571033650100138\x1D310200200415131018" + res = barcode_nomenclature.gs1_decompose_extanded(code128) + self.assertEqual(len(res), 4) + self.assertEqual(res[0]["ai"], "01") + + self.assertEqual(res[1]["ai"], "10") + + self.assertEqual(res[2]["ai"], "3102") + self.assertEqual(res[2]["value"], 20.04) + + self.assertEqual(res[3]["ai"], "15") + self.assertEqual(res[3]["value"].year, 2013) + self.assertEqual(res[3]["value"].day, 18) + self.assertEqual(res[3]["value"].month, 10) + + # (01)94019097685457(13)170119(30)17 + code128 = "0194019097685457131701193017" + res = barcode_nomenclature.gs1_decompose_extanded(code128) + self.assertEqual(len(res), 3) + self.assertEqual(res[0]["ai"], "01") + + self.assertEqual(res[1]["ai"], "13") + self.assertEqual(res[1]["value"].year, 2017) + self.assertEqual(res[1]["value"].day, 19) + self.assertEqual(res[1]["value"].month, 1) + + self.assertEqual(res[2]["ai"], "30") + self.assertEqual(res[2]["value"], 17) + + def test_gs1_extanded_barcode_2_decimal(self): + """ Parses multiples barcode with (or without) a decimal value and + checks for each of them the value is correctly parsed. + """ + # Configures a barcode GS1 nomenclature... + barcode_nomenclature = self.env['barcode.nomenclature'].create({ + 'name': "GS1 Nomenclature - Test", + 'is_gs1_nomenclature': True, + }) + default_barcode_rule_vals = { + 'default_encoding': 'gs1-128', + 'default_barcode_nomenclature_id': barcode_nomenclature.id, + 'default_type': 'quantity', + 'default_gs1_content_type': 'measure', + } + # Creates a rule who don't take any decimal. + barcode_rule = self.env['barcode.rule'].with_context(default_barcode_rule_vals).create({ + 'name': "GS1 Rule Test - No Decimal", + 'pattern': r'(300)(\d{5,8})', + 'gs1_decimal_usage': False, + }) + # Creates a rule to take the four last digit as decimals. + barcode_rule_decimal = self.env['barcode.rule'].with_context(default_barcode_rule_vals).create({ + 'name': "GS1 Rule Test - Four Decimals", + 'pattern': r'(304)(\d{5,8})', + 'gs1_decimal_usage': True, + }) + + # Checks barcodes without decimals. + res = barcode_nomenclature.gs1_decompose_extanded('30000000') + self.assertEqual(len(res), 1) + self.assertEqual(res[0]['string_value'], '00000') + self.assertEqual(res[0]['value'], 0) + + res = barcode_nomenclature.gs1_decompose_extanded('30018789') + self.assertEqual(len(res), 1) + self.assertEqual(res[0]['string_value'], '18789') + self.assertEqual(res[0]['value'], 18789) + + res = barcode_nomenclature.gs1_decompose_extanded('3001515000') + self.assertEqual(len(res), 1) + self.assertEqual(res[0]['string_value'], '1515000') + self.assertEqual(res[0]['value'], 1515000) + + # Checks barcodes with decimals. + res = barcode_nomenclature.gs1_decompose_extanded('30400000') + self.assertEqual(len(res), 1) + self.assertEqual(res[0]['string_value'], '00000') + self.assertEqual(res[0]['value'], 0.0) + + res = barcode_nomenclature.gs1_decompose_extanded('30418789') + self.assertEqual(len(res), 1) + self.assertEqual(res[0]['string_value'], '18789') + self.assertEqual(res[0]['value'], 1.8789) + + res = barcode_nomenclature.gs1_decompose_extanded('3041515000') + self.assertEqual(len(res), 1) + self.assertEqual(res[0]['string_value'], '1515000') + self.assertEqual(res[0]['value'], 151.5) + + # Checks wrong configs will raise an exception. + barcode_rule_decimal.pattern = r'()(\d{0,4})' + # Barcode rule uses decimals but AI doesn't precise what is the decimal position. + with self.assertRaises(ValidationError): + res = barcode_nomenclature.gs1_decompose_extanded('1234') + + # The pattern is too permissive and can catch something which can't be casted as measurement + barcode_rule.pattern = r'(300)(.*)' + with self.assertRaises(ValidationError): + res = barcode_nomenclature.gs1_decompose_extanded('300bilou4000') diff --git a/barcodes_gs1_nomenclature/views/barcodes_view.xml b/barcodes_gs1_nomenclature/views/barcodes_view.xml new file mode 100644 index 0000000..044eba6 --- /dev/null +++ b/barcodes_gs1_nomenclature/views/barcodes_view.xml @@ -0,0 +1,60 @@ + + + + Barcode Nomenclatures + barcode.nomenclature + + + + + is_gs1_nomenclature + + + + + + + + + + {'is_gs1': is_gs1_nomenclature} + + + parent.is_gs1_nomenclature + + + + + + + + + + + Barcode Nomenclatures + barcode.nomenclature + + + + + + + + + + Barcode Rule + barcode.rule + + + + parent.is_gs1_nomenclature or type == 'alias' + + + + + + + + + + diff --git a/uom/__init__.py b/uom/__init__.py new file mode 100644 index 0000000..dc5e6b6 --- /dev/null +++ b/uom/__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/uom/__manifest__.py b/uom/__manifest__.py new file mode 100644 index 0000000..2bf2316 --- /dev/null +++ b/uom/__manifest__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'Units of measure', + 'version': '1.0', + 'category': 'Sales/Sales', + 'depends': ['base'], + 'description': """ +This is the base module for managing Units of measure. +======================================================================== + """, + 'data': [ + 'data/uom_data.xml', + 'security/uom_security.xml', + 'security/ir.model.access.csv', + 'views/uom_uom_views.xml', + ], + 'installable': True, + 'license': 'LGPL-3', +} diff --git a/uom/data/uom_data.xml b/uom/data/uom_data.xml new file mode 100644 index 0000000..ae6068e --- /dev/null +++ b/uom/data/uom_data.xml @@ -0,0 +1,205 @@ + + + + + + Unit + + + Weight + + + Working Time + + + Length / Distance + + + Surface + + + Volume + + + + + + + Units + + reference + + + + + Dozens + + bigger + + + + + Days + + + reference + + + Hours + + + smaller + + + + + + m + + reference + + + + mm + + smaller + + + + km + + bigger + + + + cm + + smaller + + + + + m² + + + reference + + + + + L + + 1.0 + reference + + + m³ + + 1000 + bigger + + + + + + kg + + reference + + + + g + + smaller + + + + + t + + bigger + + + + + + lb + + 2.20462 + smaller + + + oz + + 35.274 + smaller + + + + + in + + 39.3701 + smaller + + + ft + + 3.28084 + smaller + + + yd + + 1.09361 + smaller + + + mi + + + bigger + + + + + ft² + + 10.76391 + smaller + + + + + fl oz (US) + + 33.814 + smaller + + + qt (US) + + 1.05669 + smaller + + + gal (US) + + + bigger + + + in³ + + 61.0237 + smaller + + + ft³ + + 28.3168 + bigger + + + diff --git a/uom/i18n/ar.po b/uom/i18n/ar.po new file mode 100644 index 0000000..9d61099 --- /dev/null +++ b/uom/i18n/ar.po @@ -0,0 +1,520 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Wil Odoo, 2023 +# Malaz Abuidris , 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: Malaz Abuidris , 2024\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" مثال: 1*(الوحدة المرجعية)=النسبة*(هذه الوحدة)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" مثال: 1*(هذه الوحدة)=النسبة*(الوحدة المرجعية)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "نشط" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "إضافة وحدة قياس جديدة " + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "إضافة فئة وحدة قياس جديدة " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "مؤرشف" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "نسبة أكبر" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "أكبر من وحدة القياس المرجعية" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "الفئة " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "اللون" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "النسبة المجمعة " + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"لا يمكن التحويل بين وحدات القياس إلا إذا كانت تنتمي لنفس الفئة. سيتم إجراء " +"التحويل بناءً على النسب." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "الأيام" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "اسم العرض " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "درزينات " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "تجميع حسب" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "ساعات " + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"بكم مرة تعد وحدة القياس هذه أكبر من وحدة القياس المرجعية في هذه الفئة: 1 * " +"(هذه الوحدة) = النسبة * (الوحدة المرجعية) " + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"بكم مرة تعد وحدة القياس هذه أكبر أو أصغر مقارنة بوحدة القياس المرجعية في هذه" +" الفئة: 1 * (هذه الوحدة) = النسبة * (الوحدة المرجعية) " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "المُعرف" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "الطول / المسافة " + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "إدارة وحدات قياس متعددة " + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "وحدة قياس المنتج" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "فئات وحدات قياس المنتج" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "النسبة" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "وحدة القياس المرجعية لهذه الفئة " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "وحدة القياس المرجعية " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "دقة التقريب" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "البحث عن وحدة القياس " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "البحث عن فئة وحدة القياس " + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "أصغر من وحدة القياس المرجعية" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"لقد تم تعديل بعض الحقول الأساسية في %s. \n" +"يرجى العلم بأنه لن يتم تحديث البيانات الموجودة بالفعل جراء هذا التغيير. \n" +"\n" +"بما أن وحدات القياس تؤثر على النظام بأكمله، قد يؤدي ذلك إلى مشاكل خطيرة. \n" +"مثال: قد يؤدي تعديل التقريب إلى اضطراب في رصيد المخزون. \n" +"\n" +"وبالتالي، لا يُنصح بتغيير وحدات القياس الأساسية في قاعدة بيانات سارية. " + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "السطح " + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"ستكون الكمية المحتسبة من أضعاف هذه القيمة. استخدم 1.0 لوحدة قياس لا يمكن " +"تقسيمها بعد الآن، كقطعة. " + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "لا يمكن أن يكون معدل التحويل لوحدة قياس 0! " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"وحدات القياس التالية مستخدمة من قِبَل النظام ولا يمكن حذفها: %s \n" +"بإمكانك أرشفتها عوضاً عن ذلك. " + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "يجب أن يكون للوحدة المرجعية معامل تحويل يساوي 1. " + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "يجب أن تكون دقة التقريب قيمة موجبة فقط لا غير. " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"لا تنتمي وحدة القياس %s المحددة في بند الطلب إلى نفس الفئة التي تنتمي إليها " +"وحدة القياس %s المحددة في المنتج. يرجى تصحيح وحدة القياس المحددة في بند " +"الطلب أو في المنتج. يجب أن ينتميا لنفس الفئة. " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "لا يمكن أن تكون قيمة النسبة صفراً " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "النوع" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "قم بإلغاء تحديد الحقل النشط لتعطيل وحدة قياس دون حذفها. " + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "الوحدة" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "وحدة القياس" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "فئة وحدة القياس " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "الوحدات" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "وحدات القياس" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "فئات وحدات القياس " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "فئات وحدات القياس" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"يمكن تحويل وحدات القياس التي تنتمي إلى \n" +" نفس الفئة بين بعضها. على سبيل المثال، في الفئة\n" +" 'الوقت'، ستكون لديك وحدات القياس التالية:\n" +" ساعات، أيام. " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "يجب أن يكون لفئة وحدة القياس %s وحدة قياس مرجعية واحدة على الأقل. " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "يجب أن يكون لفئة وحدة القياس %s وحدة قياس مرجعية. " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "يجب أن يكون لفئة وحدة القياس %s وحدة قياس مرجعية واحدة فقط. " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "وحدة القياس " + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "الحجم " + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "تحذير لـ %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "الوزن" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "وقت العمل " + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"عليك تحديد معدل تحويل بين عدة وحدات\n" +" قياس ضمن نفس الفئة. " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "سم" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "أونصة (الولايات المتحدة الأمريكية) " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "قدم " + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "قدم مربع " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "قدم مكعب " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "غالون (الولايات المحدة الأمريكية) " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "في" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "إنش مكعب " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "كجم" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "كم" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "رطل " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "ميل " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "مليمتر " + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "متر مربع " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "متر مكعب " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "أونصة " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "الكمية (الولايات المتحدة الأمريكية) " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/az.po b/uom/i18n/az.po new file mode 100644 index 0000000..6bd90f8 --- /dev/null +++ b/uom/i18n/az.po @@ -0,0 +1,467 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Jumshud Sultanov , 2022 +# erpgo translator , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiv" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arxivləndi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kateqoriya" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Rəng" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "Ölçü vahidləri arasındakı konversiya yalnız onlar eyni kateqoriyaya aid olduqda baş verə bilər. Konversiya nisbətlərə əsasən həyata keçiriləcək." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Tərəfindən yaradılıb" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Tarixdə yaradıldı" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Gün" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Ekran Adı" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Aşağıdakılara görə Qrupla" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Saatlar" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "Son Dəyişdirilmə tarixi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Son Yeniləyən" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Son Yenilənmə tarixi" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Məhsulun Ölçü Vahidi" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Yuvarlaqlaşdırma Dəqiqliyi" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tip" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Vahid" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Ölçü Vahidi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Vahidlər" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "%s üçün xəbərdarlıq" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "-də" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/bg.po b/uom/i18n/bg.po new file mode 100644 index 0000000..5a468ac --- /dev/null +++ b/uom/i18n/bg.po @@ -0,0 +1,510 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# KeyVillage, 2023 +# Martin Trigaux, 2023 +# aleksandar ivanov, 2023 +# Maria Boyadjieva , 2023 +# Igor Sheludko , 2023 +# Albena Mincheva , 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: Albena Mincheva , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Активно" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Архивирано" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "По-голямо съотношение" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "По-голямо от референтната мерна единица" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Категория" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Цвят" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Преобразуването на мерните единици може да възникне, само ако те принадлежат" +" към една и съща категория. Преобразуването ще се извърши въз основа на " +"съотношенията." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Създадено от" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Създадено на" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Дни" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Име за Показване" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Групиране по" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Часове" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Колко пъти тази мерна единица е по-голяма от референтната мерна единица в " +"тази категория: 1 * (тази единица) = съотношение * (референтна единица)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Колко по-голяма или по-малка е тази мерна единица в сравнение с референтната" +" мерна единица за тази категория: 1 * (референтна единица) = съотношение * " +"(тази единица)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Последно актуализирано от" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Последно актуализирано на" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Дължина/разстояние" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Управлявайте няколко мерни единици" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Продуктова мерна единица" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Категории на МЕ за продукта" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Съотношение" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Референтна мерна единица за тази категория" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Точност на закръгляване" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "По-малко от референтната мерна единица" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Изчисленото количество ще бъде кратно на тази стойност. Използвайте като " +"образец 1.0 за мерна единица, която не може да бъде допълнително разделена." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Коефициентът на преобразуване за единица мярка не може да е 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Вид" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Премахнете отметката от активното поле, за да деактивирате мерната единица " +"без да я изтривате." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Единица" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Мерна единица" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Единици" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Мерни единици" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Категории на мерни единици" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Мерни единици, принадлежащи към една и съща категория, могат да се\n" +" конвертират помежду си. Например, в категория\n" +" 'Време' ще разполагате със следните мерни единици:\n" +" часове, дни." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Обем" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Предупреждение за %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Тегло" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Работно време" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Трябва да определите степен на конвертиране между няколко мерни\n" +" единици в една и съща категория." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "см" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "в" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "кг" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "км" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/bs.po b/uom/i18n/bs.po new file mode 100644 index 0000000..8a27ba2 --- /dev/null +++ b/uom/i18n/bs.po @@ -0,0 +1,467 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2018-09-18 09:49+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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktivan" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Veće od referentne jedinice mjere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorija" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "Konverzija između jedinica mjera može samo da se pojavi ako pripadaju istoj kategoriji. Konverzija se izvršava na osnovu omjera." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Dužina / Udaljenost" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Upravljanje sa više jedinica mjere" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Jedinica mjere proizvoda" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategorije jedinica mjera" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Omjer" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referentna jedinica mjere za ovu kategoriju" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Preciznost zaokruživanja" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Manje od referentne jedinice mjere" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "Izračunata količina će biti množioc ove vrijednosti. Koristite 1.0 za jedinicu mjere koja ne može dalje da se razdvaja, kao što je komad." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Koeficijent omjera za ovu jedinicu mjere ne može biti 0!" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tip" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Jedinica" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Jedinica mjere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Jedinice mere" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategorije jedinica mjere" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volumen" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Težina" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Radno Vrijeme" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/ca.po b/uom/i18n/ca.po new file mode 100644 index 0000000..518907d --- /dev/null +++ b/uom/i18n/ca.po @@ -0,0 +1,533 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Óscar Fonseca , 2023 +# Martin Trigaux, 2023 +# RGB Consulting , 2023 +# José Cabrera Lozano , 2023 +# Josep Anton Belchi, 2023 +# Manel Fernandez Ramirez , 2023 +# Quim - eccit , 2023 +# marcescu, 2023 +# Ivan Espinola, 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: Ivan Espinola, 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" per exemple: 1(unitat de referència)=ratio(aquesta unitat)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" per exemple: 1(aquesta unitat)=ratio(unitat de referència)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Actiu" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Afegeix una nova unitat de mesura" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Afegeix una nova unitat de categoria de mesura" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arxivat" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Major ràtio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Més gran que la unitat de mesura de referència" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Color" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Ràtio combinat" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"La conversió entre les unitats de mesura només és possible si pertanyen a la" +" mateixa categoria. La conversió es basarà en les ràtios establertes." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dies" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nom mostrat" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Desenes" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Agrupar per" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Hores" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Quants cops la Unitat de Mesura és més gran que la unitat de mesura de " +"referència en aquesta categoria: 1 * (aquesta unitat) = rati * (unitat de " +"referència)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Com de gran o de petita és aquesta unitat comparada amb la unitat de mesura " +"de referència d'aquesta categoria: 1 * (unitat de referència) = rati * " +"(aquesta unitat)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Longitud / Distància" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gestionar múltiples unitats de mesura" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unitat de mesura del producte" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categories de producte UdM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Ràtio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unitat de mesura de referència per aquesta categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referència UoM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precisió d'arrodoniment" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Cerca UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Buscar en la categoria UoM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Més petita que la unitat de mesura de referència" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Alguns camps crítics han estat modificats en %s.\n" +"Tingueu en compte que les dades existents no s'actualitzaran amb aquest canvi.\n" +"\n" +"Com que les unitats de mesura afecten a tot el sistema, això pot causar problemes crítics.\n" +"P. ex. modificar l'arrodoniment podria pertorbar el vostre balanç d'inventari.\n" +"\n" +"Per tant, no es recomana canviar les unitats de mesura del nucli en una base de dades en execució." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Superfície" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"La quantitat calculada serà un múltiple d'aquest valor. Utilitzi 1.0 per " +"unitat de mesura que no pot ser dividida, com una peça." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "El ràtio de conversió per a una unitat de mesura no pot ser 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Les següents unitats de mesura són utilitzades pel sistema i no poden ser eliminades: %s\n" +"En lloc d'això, els podeu arxivar." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "La unitat de referència ha de tenir un factor de conversió igual a 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "La precisió d'arrodoniment ha d'ésser positiva." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"La unitat de mesura %s definida a la línia de comandes no pertany a la " +"mateixa categoria que la unitat de mesura %s definit al producte. Si us " +"plau, corregeixin la unitat de mesura definida en la línia d'ordre o en el " +"producte, haurien de pertànyer a la mateixa categoria." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipus" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Desactivi el camp actiu per desactivar una unitat de mesura sense esborrar-" +"la." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unitat de venda" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unitat de mesura" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categoria d'unitats de mesura" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unitats" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unitats de mesura" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categories d'unitats de mesura" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorias d'unitats de mesura" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Les unitats de mesura pertanyents a la mateixa categoria, poden ser " +"convertides entre elles. Per exemple, en la categoria 'Temps', poden " +"tenir les següents unitats de mesura: Hores, Dies." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"La categoria UoM %s ha de tenir almenys una unitat de referència de mesura." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Categoria UoM %s hauria de tenir una unitat de mesura de referència." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Categoria UoM %s només hauria de tenir una unitat de mesura de referència." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Uom" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volum" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Avís per a %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Pes" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Horari de treball" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Ha de definir una ràtio de conversió entre diverses unitats de mesura dins " +"de la mateixa categoria." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "en" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/cs.po b/uom/i18n/cs.po new file mode 100644 index 0000000..146ebb8 --- /dev/null +++ b/uom/i18n/cs.po @@ -0,0 +1,513 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Ivana Bartonkova, 2023 +# Wil Odoo, 2023 +# Katerina Horylova, 2024 +# Jakub Smolka, 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: Jakub Smolka, 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktivní" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Přidat novou měrnou jednotku" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Přidat novou kategorii měrné jednotky" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archivováno" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Větší poměr" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Větší než referenční měrná jednotka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Barva" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Převod mezi měrnými jednotkami lze uskutečnit pouze pokud patří do stejné " +"kategorie. Převod bude proveden na základě vzájemných poměrů." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Vytvořeno uživatelem" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Vytvořeno dne" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dny" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Zobrazovací název" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Seskupit podle" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Hodiny" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Kolikrát je tato měrná jednotka větší než referenční měrná jednotka v této " +"kategorii: 1 * (tato jednotka) = poměr * (referenční jednotka)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"O kolik větší nebo menší je tato jednotka ve srovnání s referenční měrnou " +"jednotkou pro tuto kategorii: 1 * (referenční jednotka) = poměr * (tato " +"jednotka)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Naposledy upraveno uživatelem" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Naposledy upraveno dne" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Délka / Vzdálenost" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Spravovat více měrných jednotek" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produktová měrná jednotka" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategorie produktových měrných jednotek" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Poměr" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Refereční měrná jednotka této kategorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Zaokrouhlovací přesnost" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Hledat měrné jednotky" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Menší než referenční měrná jednotka" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Povrch" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Spočítáné množství bude v násobcích této hodnoty. Použijte 1.0 pro měrnou " +"jednotku, kterou nelze dále dělit (například kusy)." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Převodní poměr mezi měrnými jednotkami nemůže být 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Referenční jednotka musí mít přepočítací koeficient rovný 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Přesnost zaokrouhlení musí být pouze kladná" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Měrná jednotka %s definovaná na řádku objednávky nepatří do stejné kategorie" +" jako měrná jednotka %s definovaná na výrobku. Opravte prosím měrnou " +"jednotku definovanou na řádku objednávky nebo na výrobku, měly by patřit do " +"stejné kategorie." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Typ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Zrušte zaškrtnutí políčka aktivní, chcete-li zakázat jednotku měření, aniž " +"byste ji odstranili." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Jednotka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Měrná jednotka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategorie měrných jednotek" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Jednotky" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Měrné jednotky" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategorie měrných jednotek" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategorie měrných jednotek" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Měrné jednotky patřící do stejné kategorie mohou být\n" +"převedeny mezi sebou. Například v kategorii\n" +"„Čas“, budete mít následující měrné jednotky:\n" +"Hodiny, dny." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Kategorie měrných jednotek %s by měla mít pouze jednu referenční měrnou " +"jednotku." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Objem" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Upozornění na %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Hmotnost" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Pracovní čas" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Musíte definovat konverzní poměr mezi několika měrnými jednotkami v rámci " +"stejné kategorie." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "v " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/da.po b/uom/i18n/da.po new file mode 100644 index 0000000..f20213e --- /dev/null +++ b/uom/i18n/da.po @@ -0,0 +1,508 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# lhmflexerp , 2023 +# Martin Trigaux, 2023 +# Sanne Kristensen , 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: Sanne Kristensen , 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiv" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Tilføj en ny måleenhed" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Tilføj en ny måleenheds kategori" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arkiveret" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Større andel" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Større end reference måleenheden" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Farve" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Konvertering mellem enheder kan kun ske, hvis de tilhører samme kategori. " +"Konvertering vil ske ud fra forholdstallene." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Oprettet af" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Oprettet den" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dage" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Snesevis" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Sortér efter" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Timer" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Hvor mange gange er denne måleenhed større end referencemængden i denne " +"kategori: 1 * (denne enhed) = forholdet * (referencenhed)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Hvor meget større eller mindre er denne enhed sammenlignet med " +"referencemåleenhed for denne kategori: 1 * (referencemåleenhed) = forhold * " +"(denne enhed)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Sidst opdateret af" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Sidst opdateret den" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Længde/distance" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Håndtering af mange måleenheder" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Vareenhed" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Produkt måleenhed kategorier" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Forholdstal" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Reference enhed for denne kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Afrunding" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Søg måleenhed" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mindre end reference enheden" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Det beregnede antal vil være multiplum af denne værdi. Brug 1.0 for en enhed" +" som ikke kan deles yderligere, f.eks. stk." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Konverterings raten for en enhed kan ikke være 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Reference enheden skal have en konversions faktor lig med 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Afrundingspræcisionen skal udelukkende være positiv." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Måleenheden %s defineret på ordrelinjen tilhører ikke den samme kategori som" +" måleenheden %s defineret på produktet. Vær venlig at rette måleenheden " +"defineret på ordrelinjen, eller på produktet; de bør tilhøre samme kategori." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Type" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Afmarker det aktive felt for at deaktivere en måleenhed uden at slette den." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Enhed" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Enhed" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Måleenhed kategori" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Enheder" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Enheder" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Måleenhedskategorier" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Enheds kategorier" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Måleenhed tilhørende den samme kategori kan\n" +" konverteres mellem hinanden. For eksempel, i kategorien\n" +" 'Tid', vil du have følgende måleenheder:\n" +" Timer, Dage." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "Måleenheds kategori %s bør have en reference måleenhed." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Måleenhed" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volumen" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Advarsel for %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Vægt" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Arbejdstid" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Du skal definere en konverterings rate mellem flere måleenheder\n" +" indenfor samme kategori." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "fod" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "fod³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gallon (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "i" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "tommer³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mil" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/de.po b/uom/i18n/de.po new file mode 100644 index 0000000..a2176e4 --- /dev/null +++ b/uom/i18n/de.po @@ -0,0 +1,524 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" z. B.: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" z. B.: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiv" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Eine neue Maßeinheit hinzufügen" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Eine neue Maßeinheitskategorie hinzufügen" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archiviert" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Größerer Faktor" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Größer als die Referenzeinheit" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Farbe" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Kombinierter Faktor" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Die Umrechnung zwischen Maßeinheiten kann nur erfolgen, wenn sie derselben " +"Kategorie angehören. Die Umrechnung erfolgt auf Basis der Kennzahlen." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Tage" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dutzende" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Gruppieren nach" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Stunden" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Wie viel größer oder kleiner ist diese Einheit im Vergleich zur " +"Referenzeinheit in dieser Kategorie: 1 * (diese Einheit) = Faktor * " +"(Referenzeinheit)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Wie viel größer oder kleiner ist diese Einheit im Vergleich zur " +"Referenzeinheit in dieser Kategorie: 1 * (Referenzeinheit) = Faktor * (diese" +" Einheit)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Länge/Distanz" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Mehrere Maßeinheiten verwalten" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Maßeinheit des Produkts" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "ME-Kategorien für Produkte" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Faktor" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referenzmaßeinheit dieser Kategorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referenzmaßeinheit" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Rundungsgenauigkeit" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Maßeinheit suchen" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Maßeinheitskategorie suchen" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Kleiner als die Referenzeinheit" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Einige wichtige Felder wurden am %s geändert.\n" +"Beachten Sie, dass bestehende Daten durch diese Änderung NICHT aktualisiert werden.\n" +"\n" +"Da sich die Maßeinheiten auf das gesamte System auswirken, kann dies zu kritischen Problemen führen.\n" +"So könnte z. B. eine Änderung der Rundung Ihre Bestandsbilanz stören.\n" +"\n" +"Es ist daher nicht empfehlenswert, die Hauptmaßeinheiten in einer laufenden Datenbank zu ändern." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Oberfläche" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Der berechnete Bestand wird ein Vielfaches dieses Wert sein. „1,0“ steht für" +" für eine Maßeinheit, die nicht weiter geteilt werden kann, wie zum Beispiel" +" ein Stück." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Der Umrechnungsfaktor einer Maßeinheit darf nicht 0 sein!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Die folgenden Maßeinheiten werden vom System verwendet und können nicht gelöscht werden: %s\n" +"Sie können sie stattdessen archivieren." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Die Referenzeinheit muss einen Umrechnungsfaktor von 1 haben." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Die Rundungsgenauigkeit muss unbedingt positiv sein." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Die in der Auftragsposition definierte Maßeinheit %s gehört nicht zur " +"gleichen Kategorie wie die im Produkt definierte Maßeinheit %s. Bitte " +"korrigieren Sie die auf der Auftragsposition oder auf dem Produkt definierte" +" Maßeinheit, sie sollten der gleichen Kategorie angehören." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Der Wert des Verhältnisses konnte nicht Null sein" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Typ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Heben Sie die Markierung des aktiven Felds auf, um eine Maßeinheit zu " +"deaktivieren, ohne sie zu löschen." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Einheit" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Maßeinheit" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Maßeinheitskategorie" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Einheit(en)" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Maßeinheiten" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Maßeinheitskategorien" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Maßeinheitskategorien" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Maßeinheiten, die derselben Kategorie angehören, können untereinander konvertiert werden. Die Kategorie „Zeit“ enthält beispielsweise die folgenden Maßeinheiten:\n" +"Stunden, Tage." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Maßeinheitskategorie %s muss mindestens eine Referenzmaßeinheit haben." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Die Maßeinheitskategorie %s sollte eine Referenzmaßeinheit haben." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "Maßeinheitskategorie %s sollte nur eine Referenzmaßeinheit haben." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Maßeinheit" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volumen" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Warnung für %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Gewicht" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Arbeitszeit" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Sie müssen einen Umrechnungsfaktor für unterschiedliche Maßeinheiten " +"derselben Kategorie festlegen." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "Gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/el.po b/uom/i18n/el.po new file mode 100644 index 0000000..766a27f --- /dev/null +++ b/uom/i18n/el.po @@ -0,0 +1,467 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2018-09-18 09:49+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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Σε Ισχύ" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Μεγαλύτερη Αναλογία" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Μεγαλύτερη από την αναφορά Μονάδας Μέτρησης" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Κατηγορία" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "Μετατροπή ανάμεσα σε Μονάδες Μέτρησης μπορεί να πραγματοποιηθεί μόνο αν ανήκουν στην ίδια κατηγορία. Η μετατροπή θα γίνει βάσει των αναλογιών." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Δημιουργήθηκε από" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Εμφάνιση Ονόματος" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "Κωδικός" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "Τελευταία τροποποίηση στις" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Τελευταία Ενημέρωση από" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Τελευταία Ενημέρωση στις" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Μήκος/Απόσταση" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Διαχείριση Πολλαπλών Μονάδων Μέτρησης" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Μονάδα Μέτρησης Είδους" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Σχέση" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Αναφορά Μονάδα Μέτρησης για αυτή την κατηγορία " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Ακρίβεια στρογγυλοποίησης" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Μικρότερη από την αναφορά μονάδα μέτρησης" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "Η υπολογιζόμενη ποσότητα θα είναι ένα πολλαπλάσιο από αυτή την τιμή. Χρησιμοποίησε το 1.0 για Μονάδα Μέτρησης που δεν μπορεί να κατατμηθεί παραπάνω, όπως είναι το τεμάχιο." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Η σχέση μετατροπής για μια μονάδα μέτρησης δεν μπορεί να είναι 0!" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Τύπος" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Μονάδα" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Μονάδα Μέτρησης" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Μονάδες Μέτρησης" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Κατηγορίες Μονάδων Μέτρησης" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Όγκος" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Βάρος" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Ωράριο Εργασίας" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "εκ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "κιλά" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "χλμ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/es.po b/uom/i18n/es.po new file mode 100644 index 0000000..b12ce7a --- /dev/null +++ b/uom/i18n/es.po @@ -0,0 +1,528 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Wil Odoo, 2023 +# Larissa Manderfeld, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21: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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" p. ej. 1*(unidad de referencia)=ratio*(esta unidad)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" p. ej: 1*(esta unidad)=ratio*(unidad de referencia)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Activo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Agregar una nueva unidad de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Agregar una nueva categoría de unidad de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archivado" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Ratio más grande" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Más grande que la unidad de medida de referencia" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categoría" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Color" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Ratio combinado" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"La conversión entre las unidades de medidas sólo puede ocurrir si pertenecen" +" a la misma categoría. La conversión se hará en función de las ratios." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Días" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Docenas" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Horas" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Cuantas veces esta unidad de medida es más grande que la unidad de medida de" +" referencia en esta categoría: 1 * (esta unidad) = ratio * (unidad de " +"referencia)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Cómo de grande o de pequeña es esta unidad comparada con la unidad de medida de referencia de esta categoría:\n" +"1 * (unidad de referencia) = ratio * (esta unidad)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Longitud / Distancia" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gestionar múltiples unidades de medida" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidad de medida del producto" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categoría de UdM para producto" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Ratio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unidad de medida de referencia para esta categoría" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "UdM de referencia" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precisión de redondeo" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Buscar UdM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Buscar categoría de la UdM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Más pequeña que la unidad de medida de referencia" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Algunos campos críticos se modificaron en %s.\n" +"Tome en cuenta que este cambio no modificará la información existente.\n" +"\n" +"Ya que las unidades de medida impactan a todo el sistema, esto puede traer problemas críticos.\n" +"P. ej. modificar el redondeo podría alterar el saldo de su inventario.\n" +"\n" +"Por eso, cambiar las unidades de medida neutrales en una base de datos funcional no está recomendado." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Superficie" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"La cantidad calculada será un múltiplo de este valor. Use 1,0 para una " +"unidad de medida que no puede ser dividida, como una pieza." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "¡La ratio de conversión para una unidad de medida no puede ser 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"El sistema usa las unidades de medida que se muestran aquí, por lo tanto, no se pueden borrar: %s\n" +"Mejor archívelas." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "La unidad de referencia debe tener un factor de conversión igual a 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "La precisión de redondeo debe ser estrictamente positiva." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"La unidad de medida %s que se definió en la línea de la orden no pertenece a" +" la misma categoría que la unidad de medida %s definida en el producto. " +"Corrija la unidad de medida definida en la línea de orden o en el producto, " +"deben pertenecer a la misma categoría." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "El valor de la ratio no puede ser cero" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipo" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Desactive el campo activo para desactivar la unidad de medida sin borrarla." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unidad" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unidad de medida" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categoría de unidades de medida" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unidades" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unidades de medida" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categorías de unidades de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorías de unidades de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Las unidades de medida pertenecientes a la misma categoría pueden ser\n" +"convertidas entre sí. Por ejemplo, la categoría\n" +"'Tiempo', tendrá las siguientes unidades de medida: \n" +"Horas, Días." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"La categoría de UdM %s debería tener al menos una unidad de medida de " +"referencia." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" +"La categoría de UdM %s debería tener una unidad de medida de referencia." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"La categoría de unidad de medida %s solo debe tener una unidad de medida de " +"referencia." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "UdM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volumen" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Advertencia para %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Peso" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Horario de trabajo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Debe definir una proporción de conversión entre varias unidades de\n" +"medida dentro de la misma categoría." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (EE. UU.)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (EE. UU.)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (EE. UU.)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/es_419.po b/uom/i18n/es_419.po new file mode 100644 index 0000000..046bdce --- /dev/null +++ b/uom/i18n/es_419.po @@ -0,0 +1,531 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Wil Odoo, 2023 +# Patricia Gutiérrez Capetillo , 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: Patricia Gutiérrez Capetillo , 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" por ejemplo: 1 * (unidad de referencia) = proporción * (esta unidad)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" por ejemplo: 1 * (esta unidad) = proporción * (unidad de referencia)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Activo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Agregar una nueva unidad de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Agregar una nueva categoría de unidad de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archivado" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Proporción mayor" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Más grande que la unidad de medida de referencia" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categoría" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Color" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Proporción combinada" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Las unidades de medida solo se pueden convertir si ambas unidades pertenecen" +" a la misma categoría. La conversión se basará en las proporciones " +"establecidas." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Días" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nombre en pantalla" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Docenas" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Horas" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Cuántas veces esta unidad de medida es más grande que la unidad de medida de" +" referencia en esta categoría: 1 * (esta unidad) = proporción * (unidad de " +"referencia)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Qué tan grande o pequeña es esta unidad comparada con la unidad de medida de referencia de esta categoría:\n" +"1 * (unidad de referencia) = proporción * (esta unidad)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Longitud/distancia" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gestionar varias unidades de medida" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidad de medida del producto" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categoría de UdM de producto" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Proporción" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unidad de medida de referencia para esta categoría" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Unidad de medida de referencia" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precisión de redondeo" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Buscar unidad de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Buscar categoría UdM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Más pequeña que la unidad de medida de referencia" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Se modificaron algunos campos críticos en %s.\n" +"Tome en cuenta que este cambio no modificará la información existente.\n" +"\n" +"Como las unidades de medida impactan a todo el sistema, esto puede causar problemas críticos.\n" +"Por ejemplo, modificar el redondeo podría alterar el balance de su inventario.\n" +"\n" +"No es recomendable cambiar las unidades de medida neutrales en una base de datos funcional." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Superficie" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"La cantidad calculada será un múltiplo de este valor. Use 1.0 para una " +"unidad de medida que no se puede dividir, como una pieza." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "La relación de conversión para una unidad de medida no puede ser 0" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"El sistema usa las unidades de medida que se muestran aquí, así que no se pueden eliminar: %s\n" +"Puede archivarlas." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "La unidad de referencia debe tener un factor de conversión igual a 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "La precisión de redondeo debe ser estrictamente positiva." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"La unidad de medida %s que se definió en la línea de la orden no pertenece a" +" la misma categoría que la unidad de medida %s definida en el producto. " +"Estas unidades de medida deben pertenecer a la misma categoría, corrija una " +"de ellas." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "El valor de la proporción no puede ser cero" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipo" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Desactive el campo activo para desactivar la unidad de medida sin " +"eliminarla." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unidad" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unidad de medida" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categoría de unidades de medida" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unidades" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unidades de medida" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categorías de las unidades de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorías de unidades de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Las unidades de medida pertenecientes a la misma categoría se pueden\n" +"convertir entre sí. Por ejemplo, la categoría\n" +"'Tiempo', tendrá las siguientes unidades de medida: \n" +"horas, días." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"La categoría %s de unidades de medida debería tener al menos una unidad de " +"medida de referencia." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" +"La categoría de unidades de medida %s debería tener una unidad de medida de " +"referencia." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"La categoría de unidad de medida %s solo debe tener una unidad de medida de " +"referencia." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "UdM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volumen" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Advertencia para %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Peso" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Horas laborables" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Debe definir una proporción de conversión entre varias unidades de\n" +"medida dentro de la misma categoría." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (EE. UU.)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (EE. UU.)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "en " + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (EE. UU.)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/et.po b/uom/i18n/et.po new file mode 100644 index 0000000..ca7f48a --- /dev/null +++ b/uom/i18n/et.po @@ -0,0 +1,536 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Patrick-Jordan Kiudorv, 2023 +# Birgit Vijar, 2023 +# Katrin Kampura, 2023 +# Arma Gedonsky , 2023 +# Piia Paurson , 2023 +# JanaAvalah, 2023 +# Triine Aavik , 2023 +# Eneli Õigus , 2023 +# Martin Trigaux, 2023 +# Martin Aavastik , 2023 +# Marten, 2023 +# Rivo Zängov , 2023 +# Leaanika Randmets, 2023 +# Stevin Lilla, 2024 +# Anna, 2024 +# Siim Raasuke, 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: Siim Raasuke, 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiivne" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Lisa uus mõõtühik" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Lisa uus mõõtühikute kategooria" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arhiveeritud" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Mitu korda suurem?" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Suurem kui võrdlusühik" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategooria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Värv" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Kombineeritud suhe" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Ühikute vaheline konversioon on võimalik ainult siis, kui ühikud kuuluvad " +"samasse kategooriasse. Konverteerimist tehakse määrade järgi." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Loodud (kelle poolt?)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Loodud" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "päevad" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Kuvatav nimi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "tosin" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Rühmitamine" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Tund(i)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Mitu korda on see mõõtühik suurem võrdlusühikust: 1 * (see ühik) = mitu " +"korda väiksem? * (võrdlusühik)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Kui palju on ühik suurem või väikem võrreldes kategooria võrdlusühikuga: 1* " +"(kategooria võrdlusühik) = mitu korda suurem/väiksem? * (see ühik)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Viimati uuendatud" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Viimati uuendatud" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Pikkus / vahemaa" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Halda mitut mõõtühikut" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Toote mõõtühik" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Toote mõõtühiku kategooriad" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Mitu korda väiksem?" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Selle kategooria võrdlusühik" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Mõõtühiku viide" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Ümardamise täpsus" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Otsi mõõtühikut" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Otsi mõõtühiku kategooriat" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Väiksem kui võrdlusühik" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Mõned kriitilised väljad on muudetud %s peal.\n" +"Pange tähele, et olemasolevaid andmeid selle muudatusega EI uuendata.\n" +"\n" +"Kuna mõõtühikud mõjutavad kogu süsteemi, võib see põhjustada kriitilisi probleeme.\n" +"Näiteks võib ümardamise muutmine häirida teie inventari tasakaalu.\n" +"\n" +"Seetõttu ei ole käimasolevas andmebaasis põhikomponentide mõõtühikute muutmine soovitatav." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Pindala" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "The conversion ratio for a unit of measure cannot be 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Süsteem kasutab järgmisi mõõtühikuid ja neid ei saa kustutada: %s\n" +"Võite need arhiveerida hoopis." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" +"Viidatud mõõtühikul peab olema konversioonifaktor, mis on võrdne 1-ga." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Ümardamise täpsus peab olema rangelt positiivne." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Tellimuse real määratud mõõtühik %s ei kuulu samasse kategooriasse kui " +"tootel määratud mõõtühik %s. Palun parandage mõõtühik tellimuse real või " +"tootel, need peaksid kuuluma samasse kategooriasse." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Suhtarvu väärtus ei saa olla null." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tüüp" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Uncheck the active field to disable a unit of measure without deleting it." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Ühik" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Mõõtühik" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Mõõtühikute kategooriad" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "tk" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Mõõtühikud" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Mõõtühikute kategooriad" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Mõõtühikute kategooriad" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "Mõõtühikute kategoorial %s peab olema vähemalt üks viidatud mõõtühik." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Mõõtühikute kategoorial %s peaks olema viidatud mõõtühik." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "Mõõtühikute kategoorial %s peaks olema ainult üks viidatud mõõtühik." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Mõõtühik" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Ruumala" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Hoiatus %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Kaal" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Tööaeg" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "tollid" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/fa.po b/uom/i18n/fa.po new file mode 100644 index 0000000..e40a812 --- /dev/null +++ b/uom/i18n/fa.po @@ -0,0 +1,496 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# F Hariri , 2023 +# Hamid Darabi, 2023 +# Yousef Shadmanesh , 2023 +# Hamed Mohammadi , 2023 +# Martin Trigaux, 2023 +# Hanna Kheradroosta, 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: Hanna Kheradroosta, 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "فعال" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "یک واحد اندازه گیری جدید اضافه کنید" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "یک دسته بندی واحد اندازه گیری جدید اضافه کنید" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "بایگانی شده" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "نسبت بزرگتر" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "دسته بندی" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "رنگ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"تبدیل بین واحدهای اندازه گیری تنها در صورتی می تواند اتفاق بیفتد که به یک " +"دسته تعلق داشته باشند. تبدیل بر اساس نسبت ها انجام خواهد شد." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "ایجادشده در" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "روز" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "نام نمایش داده شده" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "دوجین" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "گروه‌بندی برمبنای" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "ساعت" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "شناسه" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "آخرین بروز رسانی توسط" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "آخرین بروز رسانی در" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "طول / مسافت" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "مدیریت چندین واحد اندازه گیری" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "واحد اندازه گیری محصول" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "دسته بندی واحد اندازه گیری محصول" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "نسبت" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "واحد اندازه گیری مرجع" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "دقت گردکردن" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "جستجو واحد اندازه گیری" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "جستجو در دسته واحد اندازه گیری" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "نوع" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "عدد" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "واحد اندازه‌گیری" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "دسته واحد اندازه گیری" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "عدد" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "واحدهای اندازه گیری" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "دسته بندی واحدهای اندازه گیری" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "دسته بندی واحدهای اندازه گیری" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "دسته واحد اندازه گیری%s باید یک واحد اندازه گیری مرجع داشته باشد." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "دسته واحد اندازه گیری%s باید فقط یک واحد اندازه گیری مرجع داشته باشد." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "واحد اندازه گیری" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "حجم" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "هشدار برای %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "وزن" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "ساعت کاری" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"شما باید ضریب تبدیل بین چند واحد\n" +"اندازه گیری در یک طبقه بندی یکسان را تعیین کنید." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "سانتی‌متر" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "در" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "کیلوگرم" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "کیلومتر" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "میلیمتر" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "مترمربع" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "مترمکعب" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/fi.po b/uom/i18n/fi.po new file mode 100644 index 0000000..2786a8e --- /dev/null +++ b/uom/i18n/fi.po @@ -0,0 +1,532 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Veikko Väätäjä , 2023 +# Jussi Lehto , 2023 +# Kari Lindgren , 2023 +# Mikko Virtanen , 2023 +# Atte Isopuro , 2023 +# Jussi Heikkilä , 2023 +# Tuomo Aura , 2023 +# Tuomas Lyyra , 2023 +# Martin Trigaux, 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" esim: 1*(viiteyksikkö)=suhde*(tämä yksikkö)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" esim: 1*(tämä yksikkö)=suhde*(vertailuyksikkö)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiivinen" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Lisää uusi mittayksikkö" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Lisää uusi mittayksikkö kategoria" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arkistoitu" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Suurempi suhde" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Suurempi kuin referenssiyksikkö" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Väri" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Yhdistetty suhdeluku" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Yksiköiden välinen muunnos onnistuu vain saman ryhmän (kategorian) sisällä. " +"Konversio tehdään käyttäen kertoimena suhdetta." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Luonut" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Luotu" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Päivää" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Näyttönimi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Tusina" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Ryhmittely" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Tunnit" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Kuinka monta kertaa tämä mittayksikkö on suurempi kuin tässä luokassa oleva " +"mittayksikkö: 1 * (tämä yksikkö) = suhde * (vertailuyksikkö)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Kuinka paljon suurempi tai pienempi tämä yksikkö verrattuna tämän luokan " +"mittayksikköön: 1 * (vertailuyksikkö) = suhde * (tämä yksikkö)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Pituus / Etäisyys" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Hallitse useita mittayksiköitä" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Tuotteen yksikkö" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Tuote UoM Kategoriat" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Suhde" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referenssiyksikkö tälle ryhmälle" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Viitemittayksikkö (UoM)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Pyöristystarkkuus" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Etsi mittayksikkö" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Etsi mittayksikön kategoria" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Pienempi kuin referenssiyksikkö" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Joitakin kriittisiä kenttiä on muutettu kohdassa %s.\n" +"Huomaa, että tämä muutos ei päivitä olemassa olevia tietoja.\n" +"\n" +"Koska mittayksiköt vaikuttavat koko järjestelmään, tämä voi aiheuttaa kriittisiä ongelmia.\n" +"Esimerkiksi pyöristyksen muuttaminen voi häiritä varastotasetta.\n" +"\n" +"Siksi keskeisten mittayksiköiden muuttaminen käynnissä olevassa tietokannassa ei ole suositeltavaa." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Pinta" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Laskettu määrä on moninkerta tästä arvosta. Käytä arvoa 1.0 sellaiselle " +"mittayksikölle jota ei voi jakaa, kuten kappale." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Muuntokerroin mittayksikölle ei voi olla 0 !" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Järjestelmä käyttää seuraavia mittayksiköitä, eikä niitä voi poistaa: %s\n" +"Voit arkistoida ne sen sijaan." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Vertailuyksikön muuntokerroin on oltava 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Pyöristystarkkuuden on oltava ehdottomasti positiivinen." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Tilausrivillä määritelty mittayksikkö %s ei kuulu samaan luokkaan kuin " +"tuotteessa määritelty mittayksikkö %s. Korjaa tilausrivillä tai tuotteessa " +"määritelty mittayksikkö, niiden pitäisi kuulua samaan luokkaan." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Suhdeluvun arvo ei voi olla nolla" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tyyppi" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Poista aktiivinen kenttä ottaaksesi pois käytöstä mittayksikön poistamatta " +"sitä." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Yksikkö" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Mittayksikkö" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Mittayksiköiden ryhmä" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Kpl" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Mittayksiköt" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Mittayksikköjen kategoriat" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Yksiköiden ryhmät" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Samaan luokkaan kuuluvat mittayksiköt voidaan\n" +"             muuntaa keskenään. Esimerkiksi luokassa\n" +"             'Aika' , sinulla on seuraavat mittayksiköt:\n" +"             Tunnit, päivät." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Mittayksikkö-kategoriassa %s on oltava vähintään yksi viitemittayksikkö." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Mittayksikkö-kategorialla %s tulisi olla viitemittayksikkö." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "UoM-kategoriassa %s tulisi olla vain yksi referenssimittayksikkö." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Mittayksikkö" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Tilavuus" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Varoitus %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Paino" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Työaika" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Sinun on määritettävä muuntokurssi useiden yksiköiden välillä\n" +"             samaan kategoriaan." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "neliöjalkaa (ft²)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "tuumaa" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mailia" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "kk" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "jaardia (yd)" diff --git a/uom/i18n/fr.po b/uom/i18n/fr.po new file mode 100644 index 0000000..10fee7f --- /dev/null +++ b/uom/i18n/fr.po @@ -0,0 +1,528 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" par ex. : 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" par ex. : 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Actif" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Ajouter une nouvelle unité de mesure" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Ajouter une nouvelle catégorie d'unité de mesure" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archivé" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Facteur supérieur" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Plus grande que l'unité de mesure de référence" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Catégorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Couleur" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Facteur combiné" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Il est possible de convertir deux unités de mesures si elles appartiennent à" +" la même catégorie. Cette conversion utilise les facteurs définis pour ces " +"unités." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Jours" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Douzaines" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Regrouper par" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Heures" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Combien de fois cette unité de mesure est plus grande que l'unité de mesure " +"de référence de cette catégorie : 1 x (cette unité) = facteur x (unité de " +"référence)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Combien de fois cette unité est plus petite ou plus grande que l'unité de " +"mesure de référence de cette catégorie : 1 x (unité de référence) = facteur " +"x (cette unité)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Longueur / Distance" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gérer plusieurs unités de mesure" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unité de mesure du produit" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Catégorie d'UdM du produit" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Facteur" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unité de mesure de référence pour cette catégorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "UdM de référence" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Précision d'arrondi" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Rechercher UdM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Rechercher une catégorie d'UdM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Plus petite que l'unité de mesure de référence" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Certains champs critiques ont été modifiés sur %s.\n" +"Notez que les données existantes NE SERONT PAS mises à jour par ce changement.\n" +"\n" +"Comme les unités de mesure ont un impact sur l'ensemble du système, cela peut entraîner des problèmes critiques.\n" +"Par ex. modifier l'arrondi pourrait perturber l'équilibre de votre inventaire.\n" +"\n" +"Par conséquent, il n'est pas recommandé de modifier les unités de mesure de base dans une base de données en cours d'exécution." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Superficie" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"La quantité calculée sera un multiple de cette valeur. Utilisez 1,0 pour une" +" unité de mesure indivisible telle que la pièce." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Le facteur de conversion d'une unité de mesure ne peut pas être 0 !" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Les unités de mesure suivantes sont utilisées par le système et ne peuvent pas être supprimées : %s\n" +"Vous pouvez les archiver à la place." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "L'unité de référence doit avoir un facteur de conversion égale à 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "L'arrondissement doit être strictement positif." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"L'unité de mesure %s définie sur la ligne de commande n'appartient pas à la " +"même catégorie que l'unité de mesure %s définie sur le produit. Veuillez " +"corriger l'unité de mesure définie sur la ligne de commande ou sur le " +"produit, elles doivent appartenir à la même catégorie." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "La valeur du ratio ne peut pas être zéro" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Type" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Décochez le champ actif pour désactiver une unité de mesure sans la " +"supprimer." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unité" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unité de mesure" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Catégories d'unités de mesure" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unité(s)" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unités de mesure" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Catégories d'unités de mesure" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Catégories d'unités de mesure" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Les unités de mesure appartenant à la même catégorie peuvent être\n" +" converties entre elles. Par exemple, dans la catégorie\n" +" 'Temps', vous aurez les unités de mesure suivantes : \n" +" Heures, Jours." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"La catégorie d'UdM %s doit avoir au moins une unité de mesure de référence." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "La catégorie d'UdM %s doit avoir une unité de mesure de référence." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"La catégorie d'unité de mesure %s devrait n'avoir qu'une unité de mesure de " +"référence." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "UdM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volume" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Avertissement pour %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Poids" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Temps de travail" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Vous devez définir un facteur de conversion entre plusieurs unités de\n" +" mesure au sein de la même catégorie." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/gu.po b/uom/i18n/gu.po new file mode 100644 index 0000000..f3b2c72 --- /dev/null +++ b/uom/i18n/gu.po @@ -0,0 +1,466 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Qaidjohar Barbhaya, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Active" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archived" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Category" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Created by" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Created on" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Days" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Group By" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "Last Modified on" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Rounding Precision" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Type" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unit of Measure" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Warning for %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/he.po b/uom/i18n/he.po new file mode 100644 index 0000000..b4a8bc8 --- /dev/null +++ b/uom/i18n/he.po @@ -0,0 +1,506 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Lilach Gilliam , 2023 +# Yihya Hugirat , 2023 +# NoaFarkash, 2023 +# Leandro Noijovich , 2023 +# ZVI BLONDER , 2023 +# Martin Trigaux, 2023 +# ExcaliberX , 2023 +# Ha Ketem , 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: Ha Ketem , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "פעיל" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "הוסף יחידת מידה חדשה" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "הוסף קטגורית יחידת מידה חדשה" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "בארכיון" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "יחס גדול יותר" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "גדול מיחידת המידה הבסיסית" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "קטגוריה" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "צבע" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"המרה בין יחידות מידה יכולה להתרחש רק אם הן שייכות לאותה קטגוריה. ההמרה תיעשה" +" על בסיס היחס בניהן." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "נוצר על-ידי" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "ימים" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "שם לתצוגה" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "תריסרים" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "קבץ לפי" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "שעות" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"בכמה פעמים יחידת מידה זו גדולה מיחידת המידה הבסיסית בקטגוריה זו: 1 * (יחידה " +"זו) = יחס * (יחידת מידה בסיסית)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"בכמה יחידה זו גדולה יותר או קטנה יותר ביחס ליחידת המידה הבסיסית של קטגוריה " +"זו: 1 * (יחידת מידה בסיסית) = יחס * (יחידה זו)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "מזהה" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על-ידי" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "עדכון אחרון ב" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "אורך / מרחק" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "נהל יחידות מידה מרובות" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "יחידת מידה של מוצר" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "קטגוריות יחידת מידה של מוצר" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "יחס" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "יחידת מידה בסיסית לקטגוריה זו" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "דיוק עיגול" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "חפש יחידת מידה" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "חפש קטגורית יחידת מידה" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "קטן מיחידת המידה הבסיסית" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"הכמות המחושבת תהיה כפולה של ערך זה. השתמש ב 1.0 עבור יחידת מידה שלא ניתן " +"לפצל אותה עוד יותר, כגון חתיכה." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "יחס ההמרה של יחידת מידה לא יכול להיות 0 !" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "מקדם ההמרה של יחידת המידה הבסיסית חייב להיות שווה ל 1 ." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "דיוק העיגול חייב להיות חיובי." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "סוג" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "בטל את הסימון של שדה \"פעיל\" כדי להשבית את יחידת המידה ללא מחיקתה." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "יחידה" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "יחידת מידה" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "קטגורית יחידת מידה" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "יחידה" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "יחידות מידה" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "קטגוריות יחידות מידה" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "קטגוריות יחידת מידה" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"ניתן להמיר יחידות מידה השייכות לאותה קטגוריה.\n" +" לדוגמא: בקטגוריה: 'זמן', יהיו יחידות המידה הבאות: שעות, ימים." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "קטגורית יחידת מידה %s צריכה להכיל יחידת מידה בסיסית אחת בלבד." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "יחידת מידה" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "נפח" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "אזהרה עבור %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "משקל" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "זמן עבודה" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"עליך להגדיר יחס המרה בין מספר \n" +" יחידות שונות באותה קטגוריה." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "ס\"מ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "ב" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "ק\"ג" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "ק\"מ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/hr.po b/uom/i18n/hr.po new file mode 100644 index 0000000..6032e31 --- /dev/null +++ b/uom/i18n/hr.po @@ -0,0 +1,475 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Vladimir Olujić , 2022 +# Tina Milas, 2022 +# Karolina Tonković , 2022 +# 0ba0ac30481a756f36528ba6f9a4317e_6443a87 <52eefe24349934c364624ef40611b7a3_1010754>, 2022 +# Milan Tribuson , 2022 +# Martin Trigaux, 2022 +# Hrvoje Sić , 2022 +# Bole , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+0000\n" +"Last-Translator: Bole , 2023\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktivan" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Dodaj novu jedinicu mjere" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Dodaj novu kategoriju jedinica mjere" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arhivirano" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Veći omjer" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Veće od referentne jedinice mjere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorija" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Boja" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "Konverzija jedinica mjere može se vršiti samo za jedinice mjere koje pripadaju istoj kategoriji. Konverzija će se izvršiti temeljem omjera jedinica mjere." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dani/a" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupiraj po" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Sati" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Koliko je ova jedinica veća ili manja od referentne jedinice mjere za ovu kategoriju:\n" +"1 * (referentna jedinica) = omjer * (ova jedinica)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "Zadnja promjena" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Promijenio" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Vrijeme promjene" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Duljina / udaljenost" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Upravljanje sa više jedinica mjere" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "JM proizvoda" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategorije jedinica mjera proizvoda" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Omjer" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referentna jedinica mjere za ovu kategoriju" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Točnost zaokruživanja" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Manje od referentne jedinice mjere" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Koeficijent pretvorbe ne smije biti 0!" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Referentna jedinica mora imati faktor konverzije 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Preciznost zaokruživanja mora obavezno biti pozitivna vrijednost." + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Vrsta" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "Odznačite aktivno polje kako biste onemogućili jedinicu mjere, a da je ne izbrišete." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Jedinica" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Jedinica mjere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategorija jedinice mjere" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Jedinice" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Jedinice mjere" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategorije mjernih jedinica" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategorije jedinica mjere" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "JM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volumen" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Upozorenje za %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Težina" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Radno vrijeme" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "u" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/hu.po b/uom/i18n/hu.po new file mode 100644 index 0000000..869e05c --- /dev/null +++ b/uom/i18n/hu.po @@ -0,0 +1,512 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Tamás Dombos, 2023 +# Ákos Nagy , 2023 +# krnkris, 2023 +# Kovács Tibor , 2023 +# Szabolcs Rádi, 2023 +# gezza , 2023 +# Martin Trigaux, 2023 +# Tamás Németh , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tamás Németh , 2023\n" +"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktív" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Új mértékegység" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Új mértékegység kategória" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archivált" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Nagyítási arányszám" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Nagyobb, mint a referencia mértékegység" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategória" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Szín" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"A mértékegységek közötti átváltás csak akkor valósul meg, ha ugyanabba a " +"kategóriába tartoznak. Az átváltás az arányszámok alapján történik." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Létrehozta" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Létrehozva" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "nap" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Megjelenített név" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Tucat" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Csoportosítás" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "óra" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Hányszor nagyobb ez a mértékegység, mint ennek a kategóriának a referencia " +"mértékegysége: 1 * (ez az egység) = arány * (referencia egység)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Mennyivel nagyobb vagy kisebb ez az egység ezen kategória referencia-" +"mértékegységhez képest: 1 * (referencia egység) = arány * (ez az egység)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "Azonosító" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Frissítette" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Frissítve" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Hossz / Távolság" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Mértékegységek kezelése" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Termék mértékegység" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Termék me. kategóriák" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Arány" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Ezen kategória referencia mértékegysége" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referencia me." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Kerekítési pontosság" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Me. keresése" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Kisebb, mint a referencia mértékegység" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"A kiszámított mennyiség ezen érték többszöröse lesz. Használja az 1.0 " +"értéket olyan mértékegységhez, amely nem osztható tovább, mint például egy " +"darab." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Egy mértékegység átváltási aránya nem lehet 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "A referencia egység átváltási arányának 1-nek kell lennie." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "A kerekítési pontosság csak pozitív lehet." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Típus" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Az aktív mező kijelölésének megszüntetésével kikapcsolhat egy mértékegységet" +" annak törlése nélkül." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Egység" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Mértékegység" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Mértékegység kategória" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "egység" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Mértékegységek" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Mértékegység kategóriák" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Mértékegység kategóriák" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Ugyanabba a kategóriába tartozó mértékegységek \n" +" átválthatóak egymás közt. Például, az\n" +" 'Idő', kategóriában, a következő mértékegységek találhatók: óra, nap." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"A(z) %s mértékegység kategória csak egy referencia mértékegységgel kéne, " +"hogy rendelkezzen." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Me" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Térfogat" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Figyelmeztetés erre %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Súly" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Munkaidő" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Meg kell határoznia egy átváltási arányt a mértékegységek\n" +" között ugyanazon kategórián belül." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "folyékony uncia" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "láb" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "négyzetláb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "köbláb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gallon (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "hüvelyk" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "köbhüvelyk" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "font" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "uncia" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "kvart (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yard" diff --git a/uom/i18n/hy.po b/uom/i18n/hy.po new file mode 100644 index 0000000..d9b852e --- /dev/null +++ b/uom/i18n/hy.po @@ -0,0 +1,483 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/id.po b/uom/i18n/id.po new file mode 100644 index 0000000..e08973e --- /dev/null +++ b/uom/i18n/id.po @@ -0,0 +1,526 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktif" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Tambahkan satuan ukuran baru" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Tambahkan kategori satuan ukuran baru" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Diarsipkan" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Rasio lebih besar" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Lebih besar dari Satuan dasar" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Warna" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Combined Ratio" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Konversi antara satuan hanya dapat terjadi jika mereka berada pada kategori " +"yang sama. Konversi akan dibuat berdasarkan rasio." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Dibuat oleh" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Dibuat pada" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Hari" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Berlusin-lusin" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Dikelompokkan berdasarkan" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Jam" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Berapa kalinya Satuan ini lebih besar dari Satuan Dasar di kategori ini: 1 *" +" (satuan ini) = rasio * (satuan dasar)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Berapa besar atau kecil Satuan ini dibandingkan dengan Satuan Dasar di " +"kategori ini: 1 * (satuan dasar) = rasio * (satuan ini)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Terakhir Diperbarui oleh" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Terakhir Diperbarui pada" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Panjang / Jarak" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Kelola Banyak Satuan" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Satuan Produk" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategori Satuan Produk" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Rasio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Satuan Dasar untuk kategori ini" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referensi Satuan Ukuran" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Ketepatan Pembulatan" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Cari Satuan Ukuran" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Cari Kategori Satuan Ukuran" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Lebih kecil dari Satuan Dasar" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Beberapa field penting telah dimodifikasi pada %s.\n" +"Mohon diingat bahwa data yang sudah ada TIDAK akan diupdate oleh perubahan ini.\n" +"\n" +"Karena satuan ukuran berdampak ke seluruh sistem, ini dapat berujung pada masalah kritis.\n" +"Contoh memodifikasi pembulatan dapat mengubah saldo inventaris Anda.\n" +"\n" +"Oleh karena itu, mengubah satuan ukuran inti pada database yang bekerja tidak disarankan." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Permukaan" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Jumlah terhitung adalah kelipatan dari nilai ini. Gunakan 1.0 untuk satuan " +"yang tidak dapat dibagi lagi, seperti satu biji." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Rasio dari konversi untuk satuan tidak boleh 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Satuan ukuran berikut digunakan oleh sistem dan tidak dapat dihapus: %s\n" +"Alih-alih Anda dapat mengarsipnya." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Reference unit harus memiliki faktor konversi sama dengan 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Ketepatan pembulatan harus selalu positif." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Satuan ukuran %s yang didefinisikan pada baris order tidak berasal dari " +"kategori yang sama dengan satuan ukuran %s yang didefinisikan pada produk. " +"Mohon betulkan satuan ukuran yang didefinisikan pada baris order atau pada " +"produk, supaya mereka berasal dari kategori yang sama." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "NIlai dari rasio tidak boleh Nol" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Jenis" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Hapus centang pada kolom aktif untuk menon-aktifkan satuan tanpa " +"menghapusnya." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unit" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Satuan Ukuran" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategori Satuan Ukuran" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unit" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Satuan Ukuran" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategori Satuan Ukuran" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategori Satuan" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Satuan pada kategori yang sama dapat\n" +"dikonversi satu sama lain. Sebagai contoh, pada kategori ini\n" +"'Waktu', Anda memiliki satuan berikut ini:\n" +"Jam, Hari." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Kategori Satuan Ukuran %s harus memiliki setidaknya satu satuan ukuran " +"referensi." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Kategori Satuan Ukuran %s harus memiliki satuan ukuran referensi." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Kategori Satuan Ukuran %s harus memiliki hanya satu satuan ukuran referensi." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Satuan ukuran" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volume" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Peringatan untuk %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Berat" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Waktu Kerja" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Anda harus menetapkan kurs konversi antara beberapa Satuan\n" +" dalam kategori yang sama." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (AS)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (AS)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "di dalam" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (AS)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/is.po b/uom/i18n/is.po new file mode 100644 index 0000000..e88edb4 --- /dev/null +++ b/uom/i18n/is.po @@ -0,0 +1,490 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# jonasyngvi, 2024 +# Kristófer Arnþórsson, 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: Kristófer Arnþórsson, 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Virk" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Vistuð" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Flokkur" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Litur" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Umreikningur milli mælieininga getur aðeins átt sér stað ef þær tilheyra " +"sama flokki. Umreikningurinn verður byggður á hlutföllunum." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Búið til af" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Búið til þann" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dagar" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Birtingarnafn" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Hópað eftir" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "Auðkenni (ID)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Síðast uppfært af" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Síðast uppfært þann" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Mælieining" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/it.po b/uom/i18n/it.po new file mode 100644 index 0000000..4fb6066 --- /dev/null +++ b/uom/i18n/it.po @@ -0,0 +1,530 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" es.: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" es.: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Attivo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Aggiungi una nuova unità di misura" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Aggiungi una nuova categoria per le unità di misura" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "In archivio" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Maggiore rapporto" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Maggiore dell'unità di misura di riferimento" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Colore" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Combined Ratio" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Le conversioni tra unità di misura possono avvenire solo se appartengono " +"alla stessa categoria. La conversione verrà effettuata in base alle " +"proporzioni." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Data creazione" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Giorni" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dozzine" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Raggruppa per" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Ore" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Quante volte l'unità di misura è maggiore dell'unità di misura di " +"riferimento per la categoria: 1 * (unità) = rapporto * (unità di " +"riferimento)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Quanto l'unità di misura è maggiore/minore dell'unità di misura di " +"riferimento per la categoria: 1 * (unità di riferimento) = rapporto * " +"(unità)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Lunghezza / Distanza" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gestione unità di misura multiple" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unità di misura prodotto" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categorie UdM prodotto" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Rapporto" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unità di misura di riferimento per la categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Unità di misura di riferimento" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precisione arrotondamento" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Ricerca UdM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Cerca nella categoria unità di misura" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Minore dell'unità di misura di riferimento" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Alcuni campi critici sono stati modificati su %s.\n" +"Nota che i dati esistenti NON saranno aggiornati da questa modifica.\n" +"\n" +"Dato che le unità di misura hanno un impatto sul sistema, questo potrebbe creare seri problemi.\n" +"Ad es. modificare l'arrotondamento potrebbe disturbare l'equilibrio del magazzino.\n" +"\n" +"Pertanto, non è consigliabile cambiare le unità di misura principali in un database in esecuzione." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Superficie" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"La quantità calcolata sarà un multiplo di questo valore. Usare 1,0 per una " +"unità di misura non ulteriormente divisibile, ad esempio un pezzo." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Il rapporto di conversione per una unità di misura non può essere 0." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Le seguenti unità di misura sono utilizzate dal sistema e non possono essere eliminate: %s\n" +"Puoi invece archiviarle." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "L'unità di riferimento deve avere un fattore di conversione pari a 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "La precisione di arrotondamento deve essere strettamente positiva." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"L'unità di misura %s indicata nella riga d'ordine non appartiene alla stessa" +" categoria dell'unità di misura %s definita nel prodotto. Correggere la riga" +" d'ordine o il prodotto, le loro unità di misura devono appartenere alla " +"stessa categoria." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Il valore del rapporto non può essere zero" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipologia" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Deselezionare il campo attivo per disabilitare una unità di misura senza " +"eliminarla." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unità" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unità di misura" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categoria unità di misura" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unità" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unità di misura" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categorie unità di misura" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorie unità di misura" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Le unità di misura che appartengono alla stessa categoria\n" +" possono essere convertite fra loro. Ad esempio, nella categoria\n" +" \"Periodo\", sono presenti le seguenti unità di misura:\n" +" ore, giorni." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"La categoria dell'UDM %s deve avere almeno un'unità di misura di " +"riferimento." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" +"La categoria unità di misura %s deve avere un'unità di misura di " +"riferimento." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"La categoria UdM %s deve avere una sola unità di misura di riferimento." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "UdM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volume" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Avviso per %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Peso" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Orario lavorativo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Deve essere indicato un tasso di conversione tra le diverse\n" +" unità di misura della stessa categoria." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (Stati Uniti)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (Stati Uniti)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "Km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (Stati Uniti)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "iarda" diff --git a/uom/i18n/ja.po b/uom/i18n/ja.po new file mode 100644 index 0000000..a1e836a --- /dev/null +++ b/uom/i18n/ja.po @@ -0,0 +1,507 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Wil Odoo, 2023 +# Ryoko Tsuda , 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: Ryoko Tsuda , 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" 例: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" 例: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "有効化" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "新しい単位を追加" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "新しい単位カテゴリを追加" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "アーカイブ済" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "比率" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "基準単位より大きい" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "カテゴリー" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "色" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "複合比率" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "単位間の変換は同じカテゴリに属している場合のみ可能です。変換は比率に基づいて行われます。" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "作成日" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "日" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "ダース" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "グループ化" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "時間" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "このカテゴリの基準単位に比べて、この単位は何倍大きいか:1 * (この単位) = 比率 * (基準単位)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "この単位がどのくらい大きいか小さいかは、このカテゴリの基準単位と比較されます。: 1 * (基準単位) = 比率 * (この単位)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "長さ / 距離" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "複数の単位を管理" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "プロダクト単位" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "プロダクト単位カテゴリ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "比率" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "このカテゴリの基準単位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "参照単位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "丸め精度" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "単位を検索" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "単位カテゴリを検索" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "基準単位より小さい" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"いくつかの重要なフィールドが%sで変更されました。\n" +"既存のデータはこの変更によって更新されないことに注意して下さい。\n" +"\n" +"単位はシステム全体に影響するため、この変更は重大な問題を引き起こす可能性があります。\n" +"例えば、四捨五入を変更すると在庫残高を乱す可能性があります。\n" +"\n" +"よって、実行中のデータベースで中心的な単位を変更することは推奨されません。" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "表面" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "計算された数量はこの値の倍数になります。小片のような更に分割できない単位には1.0を使用します。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "単位の変換比率は0にできません。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"以下の単位はシステムで使用されており、削除することはできません:%s \n" +"代わりにアーカイブすることができます。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "参照単位は、換算係数が1に等しい必要があります。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "丸め精度は必ず正の値にして下さい。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"オーダ明細で定義された単位%sが、プロダクトで定義された単位と同じカテゴリ%sに属していません。オーダ明細またはプロダクトで定義された単位を修正して下さい。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "比率の値がゼロになることはありません" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "タイプ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "アクティブ項目のチェックを外すことで、単位を削除することなく非表示にできます。" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "単位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "単位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "単位カテゴリ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "個" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "単位" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "単位カテゴリ" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "単位カテゴリ" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"同じカテゴリに属する単位は、互いの間で変換することができます。\n" +" たとえば、時間であれば以下の単位を持っています:\n" +" 時間, 日数." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "単位カテゴリ%sには、少なくとも1つの参照単位がある必要があります。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "単位カテゴリ%sは参照単位を有する必要があります。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "単位カテゴリ%sは参照単位を1つのみ有する必要があります。" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "単位" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "容積" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "%s の警告です。" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "重量" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "作業時間" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "同じカテゴリ内の各計量単位の変換レートを定義しなくてはなりません。" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/km.po b/uom/i18n/km.po new file mode 100644 index 0000000..c203a8d --- /dev/null +++ b/uom/i18n/km.po @@ -0,0 +1,466 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Sengtha Chay , 2018 +# Chan Nath , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2018-09-18 09:49+0000\n" +"Last-Translator: Chan Nath , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "សកម្ម" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "ប្រភេទ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "បង្កើតដោយ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "បង្កើតនៅ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "កាលបរិច្ឆេតកែប្រែចុងក្រោយ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "ប្រភេទ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/ko.po b/uom/i18n/ko.po new file mode 100644 index 0000000..5fadf2f --- /dev/null +++ b/uom/i18n/ko.po @@ -0,0 +1,510 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" 예: 1*(기준 단위)=비율*(해당 단위)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" 예: 1*(해당 단위)=비율*(기준 단위)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "활성화" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "새 단위 추가하기" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "새 단위 범주 추가하기" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "보관됨" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "더 큰 비율" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "기준 단위보다 큼" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "카테고리" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "색상" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "조합 비율" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "단위 사이의 변환은 동일 카테고리에서만 가능합니다. 변환은 비율에 따라 이루어집니다." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "작성자" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "작성일자" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "일" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "표시명" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "다스" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "그룹별" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "시간" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "이 측정 단위가 해당 범주의 기준 단위보다 몇 배 더 큰지를 나타냅니다: 1 * (해당 단위) = 비율 * (기준 단위)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "이 범주의 기준 단위와 비교하여 이 단위가 얼마나 크거나 작습니까 : 1 * (기준 단위) = 비율 * (해당 단위)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "최근 갱신한 사람" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "최근 갱신 일자" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "길이 / 거리" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "복수의 단위 관리" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "품목 단위" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "상품 단위 범주" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "비율" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "이 범주의 기준 단위" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "기준 측정 단위" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "올림 정확도" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "단위 검색" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "측정 단위 카테고리 검색" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "기준 단위보다 작음" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"%s 항목에서 일부 중요 필드가 수정되었습니다.\n" +"이번 변경으로 기존 데이터가 업데이트되는 것이 아님을 유의하시기 바랍니다.\n" +"\n" +"측정 단위는 전체 시스템에 영향을 미치므로 심각한 문제를 초래할 수 있습니다.\n" +"예를 들어, 반올림을 수정하는 경우 재고 잔액이 손상될 수 있습니다.\n" +"\n" +"따라서, 사용 중인 데이터베이스에서는 핵심적인 측정 단위를 변경하지 않는 것이 좋습니다." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "면적" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "계산된 수량은 이 값의 배수입니다. 조각과 같이 더 이상 분할할 수 없는 단위에는 1.0을 사용하십시오." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "단위의 변환 비율은 0 일 수 없습니다!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"다음의 측정 단위는 시스템에서 사용되고 있으며 삭제할 수 없습니다: %s\n" +"대신 보관 처리는 할 수 있습니다." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "기준 단위의 변환 계수는 1과 같아야 합니다." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "반올림 정밀도는 반드시 양수여야 합니다." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"주문 내역에서 지정된 %s 측정 단위는 품목에 지정된 %s 측정 단위와 동일한 카테고리에 속해 있지 않습니다. 주문 내역 혹은 품목에서 " +"지정된 측정 단위를 동일한 카테고리에 속하도록 수정하시기 바랍니다." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "비율 값은 0이 될 수 없습니다." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "유형" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "단위를 삭제하지 않고 비활성화하려면 필드 활성화를 선택 취소하십시오." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "단위" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "단위" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "단위 범주" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "단위" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "단위" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "단위 카테고리" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "단위 범주" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"동일한 범주에 속하는 단위는 서로 변환할 수 있습니다. \n" +" 예를 들어 '시간' 범주에는 \n" +" 다음과 같은 측정 단위가 있습니다 : \n" +" 시간, 일." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "%s 측정 단위 카테고리에는 기준 측정 단위가 적어도 하나는 있어야 합니다." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "%s 측정 단위 카테고리에는 기준 측정 단위가 있어야 합니다." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "UoM 범주 %s는 기준 측정 단위가 하나만 있어야 합니다." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "측정 단위" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "부피" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "%s에 대한 경고" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "무게" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "근무 시간" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"동일한 범주 내에서 여러 단위 간의 \n" +" 변환 비율을 정의해야 합니다." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/lb.po b/uom/i18n/lb.po new file mode 100644 index 0000000..ae12e80 --- /dev/null +++ b/uom/i18n/lb.po @@ -0,0 +1,462 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-23 08:03+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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/lt.po b/uom/i18n/lt.po new file mode 100644 index 0000000..2249554 --- /dev/null +++ b/uom/i18n/lt.po @@ -0,0 +1,512 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Arminas Grigonis , 2023 +# UAB "Draugiški sprendimai" , 2023 +# Arunas V. , 2023 +# Denis Knotko , 2023 +# Monika Raciunaite , 2023 +# Silvija Butko , 2023 +# Martin Trigaux, 2023 +# Linas Versada , 2023 +# digitouch UAB , 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: digitouch UAB , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktyvus" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archyvuotas" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Didesnis santykis" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Didesnis negu etaloninas matavimas vienetas" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorija" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Spalva" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Konvertavimas galimas tik tarp tai pačiai grupei priklausančių matavimo " +"vienetų. Konvertuojant kiekiai bus paskaičiuoti pagal santykį." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dienos" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Rodomas pavadinimas" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupuoti pagal" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Valandos" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Kiek kartų šis matavimo vienetas yra didesnis nei lyginamasis matavimo " +"vienetas šioje kategorijoje: 1 * (šis vienetas) = santykis * (lyginamasis " +"vienetas)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Kiek kartų didesnis ar mažesnis yra šis vienetas, lyginant su šios " +"kategorijos lyginamuoju vienetu: 1 * (lyginamasis vienetas) = santykis * " +"(šis vienetas)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Ilgis" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Tvarkyti kelis matavimo vienetus" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produkto matavimo vienetas" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Produkto matavimo vienetų kategorijos" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Santykis" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Etaloninis kategorijos matavimo vienetas" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Apvalinimo tikslumas" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mažesnis negu etaloninas matavimas vienetas" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Apskaičiuotas kiekis bus šios reikšmės kartotinis. Įveskite 1.0 tiems " +"matavimo vienetams, kurie negali būti skaidomi iki trupmeninės dalies, kaip," +" pavyzdžiui, daiktiniai vienetai." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Matavimo vieneto keitimo santykis negali būti 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipas" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Atžymėkite aktyvų lauką, kad išjungtumėte matavimo vienetą jo neištrindami." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Vienetas" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Mato vienetas" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Vienetai" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Matavimo vienetai" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Mato vienetų kategorijos" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Mato vienetų kategorijos" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Tai pačiai kategorijai priklausantys matavimo vienetai gali būt konvertuojami tarpusavyje. Pavyzdžiui, kategorijoje\n" +"\"Laikas\" turėsite tokius vienetus:\n" +"Valandos, dienos." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Tūris" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Įspėjimas %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Svoris" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Darbo laikas" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Turite nurodyti keitimo santykį tarp toje pačioje kategorijoje\n" +"esančių matavimų vienetų." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "yra" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/lv.po b/uom/i18n/lv.po new file mode 100644 index 0000000..6ff1801 --- /dev/null +++ b/uom/i18n/lv.po @@ -0,0 +1,497 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Arnis Putniņš , 2023 +# Konstantins Zabogonskis , 2023 +# Anzelika Adejanova, 2023 +# Armīns Jeltajevs , 2023 +# InfernalLV , 2023 +# ievaputnina , 2023 +# Martin Trigaux, 2023 +# Will Sensors, 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: Will Sensors, 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktīvs" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arhivēts" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorija" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Krāsa" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Mērvienību konvertēšana starp mērvienībām var notikt tikai tad, ja tās " +"pieder vienai un tai pašai kategorijai. Pārrēķins tiks veikts, pamatojoties " +"uz attiecībām." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Izveidoja" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Izveidots" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dienas" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Attēlotais nosaukums" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupēt pēc" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Stundas" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Pēdējoreiz atjaunināja" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Pēdējoreiz atjaunināts" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Garums / Attālums" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Pārvaldīt vairākas mērvienības" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produkta Mērvienība" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Attiecība" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Noapaļošanas precizitāte" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Konversācijas attiecība mērvienībai nevar būt 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Veids" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Vienība" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Mērvienība" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Vienības" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Mērvienības" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Mērvienību kategoriju vienības" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Mērvienību kategorijas" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Skaļums" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Brīdinājums par %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Svars" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Darba laiks" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "iekš" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/mn.po b/uom/i18n/mn.po new file mode 100644 index 0000000..78d880b --- /dev/null +++ b/uom/i18n/mn.po @@ -0,0 +1,480 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Батмөнх Ганбат , 2022 +# Batmunkh Ganbat , 2022 +# Minj P , 2022 +# Bayarkhuu Bataa, 2022 +# Baskhuu Lodoikhuu , 2022 +# Martin Trigaux, 2022 +# Onii Onii , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-23 08:03+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+0000\n" +"Last-Translator: Onii Onii , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Идэвхтэй" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Шинэ хэмжих нэгж нэмэх" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Шинэ хэмжих нэгжийн ангилал нэмэх" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Архивласан" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Том харьцаа" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Сурвалж хэмжих нэгжээс их" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Ангилал" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Өнгө" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios." +msgstr "Хэмжих нэгжийг хооронд нь хөрвүүлэх явдал нь зөвхөн нэг ангилалд хамаарч байвал л хийгдэнэ. Хөрвүүлэлт нь харьцаан дээр суурилж явагдана." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Үүсгэсэн этгээд" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Үүсгэсэн огноо" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Өдөр" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Дэлгэрэнгүй нэр" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Бүлэглэлт" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Цаг" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "Энэ хэмжих нэгж нь энэ ангилалын сурвалж хэмжих нэгжээс хэд их болох: 1 * (энэ нэгж) = харьцаа * (сурвалж нэгж)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Энэ хэмжих нэгж нь хэр зэрэг их эсвэл бага гэдэг нь энэ ангилалын сурвалж хэмжих нэгжтэй жишсэнээр илэрхийлэгдэнэ: \n" +"1 * (сурвалж нэгж) = харьцаа * (энэ нэгж)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category____last_update +#: model:ir.model.fields,field_description:uom.field_uom_uom____last_update +msgid "Last Modified on" +msgstr "Сүүлд зассан огноо" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Сүүлд зассан этгээд" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Сүүлд зассан огноо" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Урт / Зай" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Олон хэмжих нэгжийг удирдах" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Барааны хэмжих нэгж" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Барааны х.нэгжийн ангилал" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Харьцаа" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Ангилалын сурвалж хэмжих нэгж" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Нарийвчлалын орон" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Сурвалж хэмжих нэгжээс бага" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "The computed quantity will be a multiple of this value. Use 1.0 for a Unit of Measure that cannot be further split, such as a piece." +msgstr "Тооцоолсон тоо хэмжээ нь эдгээрийн үржвэр байна. 1.0 гэсэн тоог цааш үл хуваагдах нэгжид хэрэглэнэ. Жишээлбэл ширхэг." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Хэмжих нэгжийн хөрвүүлэлтийн коэффицент 0 байж болохгүй!" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The unit of measure %s defined on the order line doesn't belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Төрөл" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Идэвхитэй талбарыг сонгоогүй тохиолдолд хэмжих нэгжийг устгалгүйгээр идэвхгүй болгоно\n" +"." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Ширхэг" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Хэмжих нэгж" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Хэмжих нэгжийн Ангилал" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Нэгж" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Хэмжих нэгж" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Хэмжих нэгжийн ангилал" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Хэмжих нэгжийн ангилал" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Ижил ангилал хамаарах хэмжих нэгжүүд нь хоорондоо хөрвүүлэгдэх\n" +"боломжтой. Жишээлбэл, \n" +" 'Хугацаа' ангилалд, дараах хэмжих нэгжүүд байж болно:\n" +" Цаг, Хоног." + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Эзлэхүүн" + +#. module: uom +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "%s-д зориулсан анхааруулга" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Жин" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Ажлын цаг" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "Ижил ангилал дахь хэмжих нэгжүүдийн хооронд хөрвөх харьцааг тодорхойлох ёстой." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "см" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "байрлал" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "кг" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "км" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/nb.po b/uom/i18n/nb.po new file mode 100644 index 0000000..de08a10 --- /dev/null +++ b/uom/i18n/nb.po @@ -0,0 +1,492 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Thor Arne Hvidsten , 2024 +# Marius Stedjan , 2024 +# Martin Trigaux, 2024 +# Jorunn D. Newth, 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: Jorunn D. Newth, 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiv" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arkivert" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Multiplum" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Større enn referanse-enheten" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Farge" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Konvertering mellom enheter fungerer kun når de tilhører samme kategori. " +"Konverteringen gjøres basert på forholdet mellom enhetene." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Opprettet av" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Opprettet den" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dager" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Visningsnavn" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupper etter" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Timer" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Sist oppdatert" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Lengde / avstand" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Administrer flere måleenheter" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produktenhet" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategorier for Produktenhet" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Faktor" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referanse-enhet for denne kategorien" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Avrundingspresisjon" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mindre enn referanse-enheten" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Konverteringsfaktoren for en måleenhet kan ikke være 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Type" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "Avmerk \"Aktiv\" for å skjule en måleenhet uten å slette den." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Enhet" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Enhet" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Stk" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Enheter" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Enhetskategorier" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Enhetskategorier" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volum" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Advarsel for %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Vekt" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Arbeidstid" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "i" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/nl.po b/uom/i18n/nl.po new file mode 100644 index 0000000..b7abbd6 --- /dev/null +++ b/uom/i18n/nl.po @@ -0,0 +1,524 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" bijv.: 1*(referentie-eenheid)=ratio*(deze eenheid)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" bijv.: 1*(deze eenheid)=ratio*(referentie-eenheid)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Actief" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Voeg een nieuwe maateenheid toe" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Voeg een nieuwe maateenheidcategorie toe" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Gearchiveerd" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Grotere verhouding" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Groter dan de referentie maateenheid" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Kleur" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Gecombineerde verhouding" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Conversie tussen maateenheden kan alleen plaatsvinden als deze behoren tot " +"dezelfde categorie. De conversie wordt gemaakt op basis van ratio's." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dagen" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dozijnen" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Groeperen op" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Uren" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Hoeveel keer deze maateenheid groter is dan de referentie maateenheid in " +"deze categorie: 1 * (deze eenheid) = ratio * (referentie eenheid)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Hoe veel groter of kleiner deze maateenheid is vergeleken met de referentie " +"maateenheid voor deze categorie: 1 * (referentie eenheid) = ratio * (deze " +"eenheid)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Lengte / Afstand" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Beheer meerdere maateenheden" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Maateenheid product" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Product maateenheidcategorieën" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Ratio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referentie maateenheid voor deze categorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referentie maateenheid" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Afrondingsprecisie" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Zoek maateenheid" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Zoek maateenheidcategorie" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Kleiner dan de referentie maateenheid." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Sommige kritieke velden zijn gewijzigd op %s.\n" +"Houd er rekening mee dat bestaande gegevens door deze wijziging NIET worden bijgewerkt.\n" +"\n" +"Aangezien maateenheden van invloed zijn op het hele systeem, kan dit kritieke problemen veroorzaken.\n" +"bijv. het wijzigen van de afronding kan de voorraadstand verstoren.\n" +"\n" +"Daarom wordt het niet aanbevolen om kerneenheden in een actieve database te wijzigen." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Oppervlakte" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"De berekende hoeveelheid wordt een veelvoud van deze waarde. Gebruik 1.0 " +"voor een maateenheid die niet verder kan worden gesplitst, zoals een stuk." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "De omrekeningsverhouding voor een maateenheid kan niet 0 zijn !" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"De volgende maateenheden worden door het systeem gebruikt en kunnen niet worden verwijderd: %s\n" +"je kunt ze in plaats daarvan archiveren." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" +"De referentie-eenheid moet een omrekeningsverhouding hebben gelijk aan 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "De afrondingsnauwkeurigheid moet altijd positief zijn." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"De maateenheid %s die op de orderregel is gedefinieerd, behoort niet tot " +"dezelfde categorie als de maateenheid %s die op het product is gedefinieerd." +" Corrigeer de maateenheid die op de orderregel of op het product is " +"gedefinieerd, deze moeten tot dezelfde categorie behoren." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "De waarde van de ratio mag niet nul zijn" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Soort" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Schakel het actief veld uit om de maateenheid verborgen zonder deze te " +"verwijderen." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Eenheid" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Maateenheid" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Maateenheidcategorie" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Stuks" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Maateenheden" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Maateenheidcategorieën" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Maateenheidcategorieën" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Maateenheden die behoren tot dezelfde categorie kunnen\n" +"geconverteerd worden naar maateenheden binnen dezelfde categorie. Bijvoorbeeld,\n" +"in de categorie 'Tijd' heb je de maateenheden:\n" +"Uren, dagen." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "Maateenheidcategorie %s moet minstens één referentie-eenheid hebben." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Maateenheidcategorie %s moet een referentie-eenheid hebben." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "Maateenheidcategorie %sheeft slechts één referentie maateenheid." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Maateenheid" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volume" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Waarschuwing voor %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Gewicht" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Werktijd" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Je moet een omrekeningsverhouding definiëren tussen verschillende maateenheden \n" +"van dezelfde categorie." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (USA)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (USA)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/pl.po b/uom/i18n/pl.po new file mode 100644 index 0000000..a22327c --- /dev/null +++ b/uom/i18n/pl.po @@ -0,0 +1,519 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktywne" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Dodanie nowej jednostki miary" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Dodaj nową kategorię jednostki miary" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Zarchiwizowane" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Większy przelicznik" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Większa od jedostki referencyjnej" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Kolor" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Wskaźnik łączony" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Konwersja pomiędzy jednostkami miary (JM) może nastąpić tylko pomiędzy " +"jednostkami z tej samej kategorii. Do konwersji jest stosowany przelicznik." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Utworzył(a)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Data utworzenia" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dni" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nazwa wyświetlana" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Tuzin" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupuj wg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Godziny" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Ile razy ta Jednostka Miary jest większa niż jednostka referencyjna z tej " +"kategorii: 1 * (ta jednostka) = współczynnik * (jednostka referencyjna)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"O ile większa lub mniejsza jest ta jednostka w porównaniu z referencyjną " +"jednostką miary dla tej kategorii: 1 * (jednostka referencyjna) = stosunek *" +" (ta jednostka)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Ostatnio aktualizowane przez" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Data ostatniej aktualizacji" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Długość" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Określ wiele jednostek miary" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Jednostka miary produktu" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategorie JM produktu" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Współczynnik" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referencyjna jednostka miary dla tej kategorii" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referencyjna JM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precyzja zaokrąglania" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Szukaj JM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Wyszukaj kategorię JM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mniejsza niż jednostka referencyjna" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Niektóre krytyczne pola zostały zmodyfikowane na %s.\n" +"Należy pamiętać, że istniejące dane NIE zostaną zaktualizowane przez tę zmianę.\n" +"\n" +"Ponieważ jednostki miary mają wpływ na cały system, może to spowodować krytyczne problemy.\n" +"Np. modyfikacja zaokrąglenia może zakłócić bilans zapasów.\n" +"\n" +"Dlatego zmiana podstawowych jednostek miary w działającej bazie danych nie jest zalecana." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Powierzchnia" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Obliczone ilości będą wielokrotnością tej wartości. Stosuj 1,0 dla " +"jednostek, które nie mogą być podzielne, na przykład dla sztuki." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Współczynnik konwersji jednostki miary nie może być 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Następujące jednostki miary są używane przez system i nie można ich usunąć: %s \n" +"Zamiast tego można je zarchiwizować." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Jednostka referencyjna musi mieć współczynnik konwersji równy 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Precyzja zaokrąglenia musi być ściśle dodatnia." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Jednostka miary %s zdefiniowana w linii zamówienia nie należy do tej samej " +"kategorii co jednostka miary %szdefiniowana w produkcie. Popraw jednostkę " +"miary zdefiniowaną na linii zamówienia lub na produkcie, powinny one należeć" +" do tej samej kategorii." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Wartość współczynnika nie może wynosić zero" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Typ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Usuń zaznaczenie aktywnego pola, aby wyłączyć jednostkę miary bez jej " +"usuwania." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Jednostka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Jednostka miary" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategoria jednostek miary" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Jednostki" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Jednostki miary" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategorie jednostek miary" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategorie jednostek miary" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Jednostki miary należące do tej samej kategorii mogą być\n" +"przeliczane między sobą. Na przykład w kategorii\n" +"\"Czas\" dostępne są następujące jednostki miary:\n" +"Godziny, Dni." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Kategoria JM %s musi mieć co najmniej jedną referencyjną jednostkę miary." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Kategoria JM %s powinna mieć referencyjną jednostkę miary." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Kategoria JM %s powinna mieć tylko jedną referencyjną jednostkę miary." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "JM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Objętość" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Ostrzeżenie do %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Waga" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Czas pracy" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Musisz określić współczynnik konwersji pomiędzy kilkoma Jednostkami\n" +"Miary w tej samej kategorii." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "stopa" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "stóp²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "stóp³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "galon (USA)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "w" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "cal³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "funt" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "uncja" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "jard" diff --git a/uom/i18n/pt.po b/uom/i18n/pt.po new file mode 100644 index 0000000..093e036 --- /dev/null +++ b/uom/i18n/pt.po @@ -0,0 +1,508 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Ativo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Adicionar uma nova unidade de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Adicionar uma nova categoria de unidade de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arquivados" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Maior Proporção" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Maior que a Unidade de Medida de referência" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Cor" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Conversões entre Unidades de Medida só podem ocorrer se pertencerem à mesma " +"categoria. A conversão será feita com base nos coeficientes." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dias" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nome" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dúzias" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Horas" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Quantas vezes esta Unidade de Medida é maior que a Unidade de Medida de " +"referência desta categoria: 1 * (esta unidade) = coeficiente * (unidade de " +"referência)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Quão maior ou menor esta unidade é comparativamente à Unidade de Medida de " +"referência desta categoria: 1 * (unidade de referência) = coeficiente * " +"(esta unidade)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Comprimento / Distância" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gerir Múltiplas Unidades de Medida" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidade de Medida de Artigo" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categorias de UdM de Artigo" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Rácio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unidade de Medida de referência para esta categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precisão do Arredondamento" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Procurar UdM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mais pequena que a Unidade de Medida de referência" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"A quantidade calculada será um múltiplo deste valor. Use 1.0 para uma " +"Unidade de Medida que não pode ser mais fracionada." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "O coeficiente de conversão de uma unidade de medida não pode ser 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "A unidade de referência tem que ter um fator de conversão igual a 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "A precisão de arredondamento deve ser estritamente positiva." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"A unidade de medida %s indicada na linha de ordem de venda não pertence à " +"mesma categoria da unidade de medida %s indicada no artigo. Por favor " +"corrija a unidade de medida indicada na linha de ordem de venda ou no " +"produto, para que correspondam à mesma categoria" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipo" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Desmarcar o campo ativo para desativar a unidade de medida sem a eliminar." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unidade" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unidade de medida" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categoria da Unidade de Medida" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unidades" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unidades de Medida" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categorias de Unidade de Medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorias de unidades de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Unidades de medida que pertençam à mesma categoria podem ser\n" +" convertidas entre si. Por exemplo, na catedoria\n" +" 'Tempo', terá as seguintes unidades de medida:\n" +" Horas, Dias." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volume" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Aviso para %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Peso" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Tempo de Trabalho" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Tem que definir um coeficiente de conversão entre várias\n" +" Unidades de Medida dentro da mesma categoria." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/pt_BR.po b/uom/i18n/pt_BR.po new file mode 100644 index 0000000..dcf3523 --- /dev/null +++ b/uom/i18n/pt_BR.po @@ -0,0 +1,528 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Wil Odoo, 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" ex.: 1 * (unidade de referência) = proporção * (esta unidade)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" ex.: 1 * (esta unidade) = proporção * (unidade de referência)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Ativo" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Adicionar uma nova unidade de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Adicionar uma nova categoria de unidade de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arquivado" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Maior proporção" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Maior do que a unidade de medida de referência" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Cor" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Proporção combinada" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"A conversão entre unidades de medida só pode ocorrer se elas pertencerem à " +"mesma categoria. A conversão será feita com base nas proporções." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dias" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nome exibido" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dúzias" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Agrupar por" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Horas" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Quantas vezes esta unidade de medida é maior do que a unidade de medida de " +"referência nesta categoria: 1 * (esta unidade) = proporção * (unidade de " +"referência)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"O quão maior ou menor esta unidade é comparada à unidade de medida de " +"referência para esta categoria: 1 * (unidade de referência) = proporção * " +"(esta unidade)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Comprimento/distância" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gerenciar várias unidades de medida" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidade de medida do produto" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categorias de UM de produto" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Proporção" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unidade de medida de referência para esta categoria" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "UM de referência" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precisão de arredondamento" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Buscar UM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Buscar categoria de UM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Menor do que a unidade de medida de referência" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Alguns campos críticos foram modificados em %s.\n" +"Observe que os dados existentes NÃO serão atualizados por essa alteração.\n" +"\n" +"Como as unidades de medida afetam todo o sistema, isso pode causar problemas críticos.\n" +"Por exemplo, modificar o arredondamento pode afetar o saldo do seu inventário.\n" +"\n" +"Portanto, alterar as unidades de medida principais em uma base de dados em execução não é recomendado." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Superfície" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"A quantidade calculada será um múltiplo desse valor. Utilize 1,0 para uma " +"unidade de medida que não pode ser dividida ainda mais, como uma peça." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "A taxa de conversão para uma unidade de medida não pode ser 0." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"As seguintes unidades de medida são usadas pelo sistema e não podem ser excluídas: %s\n" +"Em vez disso, você pode arquivá-las." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "A unidade de referência deve ter um fator de conversão igual a 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "A precisão de arredondamento deve ser estritamente positiva." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"A unidade de medida %s definida na linha do pedido não pertence à mesma " +"categoria que a unidade de medida %s definida no produto. Corrija a unidade " +"de medida definida na linha do pedido ou no produto, eles devem pertencer à " +"mesma categoria." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "O valor da proporção não pode ser zero" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tipo" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Desmarque o campo 'ativo' para desativar uma unidade de medida sem excluí-" +"la." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Unidade" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unidade de medida" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categoria de unidade de medida" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Unidades" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unidades de medida" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categorias de unidade de medida" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorias de unidades de medida" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"As unidades de medida pertencentes à mesma categoria podem ser\n" +" convertidas entre si. Por exemplo, na categoria\n" +" 'Tempo', você terá as seguintes unidades de medida:\n" +" horas, dias." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"A categoria de UM %s deve ter pelo menos uma unidade de medida de " +"referência." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "A categoria de UM %s deve ter uma unidade de medida de referência." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"A categoria de UM %s deve ter apenas uma unidade de medida de referência." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "UM" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volume" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Aviso para %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Peso" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Tempo de trabalho" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"É necessário definir uma taxa de conversão entre várias unidades de\n" +" medida dentro de uma mesma categoria." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "pol" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "pol³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/ro.po b/uom/i18n/ro.po new file mode 100644 index 0000000..0ae8ede --- /dev/null +++ b/uom/i18n/ro.po @@ -0,0 +1,514 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Lyall Kindmurr, 2024 +# Fekete Mihai , 2024 +# Dorin Hongu , 2024 +# Martin Trigaux, 2024 +# Cozmin Candea , 2024 +# Foldi Robert , 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: Foldi Robert , 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Activ" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Adăugați o nouă unitate de măsură" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Adăugați o nouă categorie de unitate de măsură" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arhivat" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Raport mărire" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Mai mare decât unitatea de măsură de referință" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Categorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Culoare" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Conversia între Unitățile de Măsura pot avea loc numai dacă ele aparțin " +"aceleiași categorii. Conversia va fi făcută pe baza proporțiilor." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Creat de" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Creat în" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Zile" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Nume afișat" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Duzina" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupează după" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Ore" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Cu cât este mai mare această unitate de măsură decât unitatea de măsură de referință din aceasta categorie:\n" +"1 * (aceasta unitate) = raport * (unitatea de referință)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Cu cât este mai mare sau mică această unitate în comparație cu unitatea de măsură de referință pentru această categorie: \n" +"1 * (unitatea de referință) = raport * (această unitate)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Ultima actualizare făcută de" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Ultima actualizare pe" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Lungime / Distanță" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Gestionați unități de măsură multiple" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unitate de măsură produs" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Categorii unități de măsură produs" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Raport" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Unitatea de măsură de referință pentru această categorie" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Precizia de rotunjire" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Căutare UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mai mică decât unitatea de măsură de referință" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Cantitatea calculată va fi un multiplu al acestei valori. Folosiți 1.0 " +"pentru o unitate de Măsură care nu mai poate fi împărțită, precum este o " +"bucata." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Raportul conversiei pentru o unitate de masura nu poate fi zero!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" +"Unitatea de referință trebuie să aibă un factor de conversie egal cu 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Precizia de rotunjire trebuie să fie strict pozitivă." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Unitatea de măsură %s utilizată pe linia de comandă nu aparține aceleiași " +"categorii ca unitatea de măsură %s definită în produs. Corectați unitatea " +"de măsură utilizată pe linia de comandă sau în produs, acestea ar trebui să " +"aparțină aceleiași categorii." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tip" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Debifați câmpul activ pentru a dezactiva o unitate de măsură fără a o " +"șterge." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "buc" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Unitatea de măsură" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Categorie Unitate de măsură" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Buc" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Unități de măsură" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Categorii Unități de Măsură" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Categorii unități de măsură" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Unitățile de măsură care aparțin aceleiași categorii pot fi convertite între" +" ele. De exemplu, în categoria \"Timp\", veți avea următoarele unități de " +"măsură: Ore, Zile." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Categoria UM %s ar trebui să aibă doar o unitate de măsură de referință." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volum" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Avertizare pentru %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Greutate" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Program de lucru" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Trebuie să definiți o rată de conversie între mai multe unități de măsură " +"din aceeași categorie." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "în" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/ru.po b/uom/i18n/ru.po new file mode 100644 index 0000000..5d4ca25 --- /dev/null +++ b/uom/i18n/ru.po @@ -0,0 +1,532 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Ivan Kropotkin , 2023 +# Диляра Дельтаева , 2023 +# Collex100, 2023 +# Alena Vlasova, 2023 +# Martin Trigaux, 2023 +# Сергей Шебанин , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" например: 1*(эталонная единица)=отношение*(данная единица)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" например: 1*(данная единица измерения)=отношение*(эталонная единица измерения)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Активный" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Добавить новую единицу измерения" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Добавьте новую категорию единиц измерения" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Архивировано" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Большее соотношение" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Больше, чем эталон Единица измерения" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Категория" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Цвет" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Комбинированный коэффициент" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Пересчет между единицами измерения может произойти только в том случае, если" +" они принадлежат к одной и той же категории. Пересчет будет осуществляться " +"на основе коэффициентов." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Создано" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Дней" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Десятки" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Группировать по" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Часов" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Сколько раз эта единица измерения больше, чем эталонная единица измерения в " +"этой категории: 1 * (эта единица) = отношение * (единица измерения)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Насколько больше или меньше эта единица сравнивается с эталонной единицей " +"измерения для этой категории: 1 * (эталонное устройство) = отношение * (это " +"устройство)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Последнее обновление" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Последнее обновление" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Длина / расстояние" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Управление несколькими единицами измерения" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Единица измерения продукта" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Категории продуктов UoM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Соотношение" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Эталонная единица измерения для данной категории" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Ссылка UoM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Точность Округления" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Поиск UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Поиск по категории UoM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Меньше, чем эталон Единица измерения" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Некоторые критические поля были изменены на %s.\n" +"Обратите внимание, что существующие данные не будут обновлены этим изменением.\n" +"\n" +"Поскольку единицы измерения влияют на всю систему, это может привести к критическим проблемам.\n" +"Например, изменение округления может нарушить баланс запасов.\n" +"\n" +"Поэтому не рекомендуется изменять основные единицы измерения в работающей базе данных." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Поверхность" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Вычисленное количество будет кратно этому значению. Используйте 1,0 для " +"единиц измерения, которые нельзя разделить на части, например, для штуки." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Коэффициент пересчета для единицы измерения не может быть равен 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Следующие единицы измерения используются системой и не могут быть удалены: %s\n" +"Вместо этого их можно заархивировать." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Эталонная единица должна иметь коэффициент пересчета, равный 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Точность округления должна быть строго положительной." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Единица измерения %s, определенная в строке заказа, не принадлежит к той же " +"категории, что и единица измерения %s, определенная в товаре. Пожалуйста, " +"исправьте единицу измерения, определенную в строке заказа или в товаре, они " +"должны относиться к одной и той же категории." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Значение коэффициента не может быть нулевым" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Тип" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Снимите флажок активного поля, чтобы отключить единицу измерения, не удаляя " +"ее." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Единица" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Ед. изм" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Единица измерения Категория" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Единицы" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Единицы измерения" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Категории единиц измерения" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Категории единиц измерения" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Единицы измерения, относящиеся к одной и той же категории, могут\n" +"             конвертироваться между собой. Например, в категории\n" +"             'Время', у вас будут следующие единицы измерения:\n" +"             Часы, Дни." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Категория UoM %s должна иметь хотя бы одну эталонную единицу измерения." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Категория UoM %s должна иметь эталонную единицу измерения." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Категория UoM %s должна иметь только одну эталонную единицу измерения." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Uom" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Объем" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Предупреждение для %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Вес" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Рабочее время" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Вы должны определить коэффициент конверсии между несколькими единицами\n" +"             Мера в той же категории." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "см" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "фл унция (США)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "фут" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "фт²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "фут³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "галлон (США)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "в" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "в³ч" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "кг" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "км" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "фунт" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "мили" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "мм" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "м²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "м³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "унция (oz)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (США)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "ярд" diff --git a/uom/i18n/sk.po b/uom/i18n/sk.po new file mode 100644 index 0000000..1d0e6d8 --- /dev/null +++ b/uom/i18n/sk.po @@ -0,0 +1,503 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktívne" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Pridaj novú mernú jednotku." + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Pridaj novú kategóriu mernej jednotky." + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Archivovaný" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Väčší pomer" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Väčšia než referenčná jednotka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategória" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Farba" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Ku konverzii medzi mernými jednotkami môže dôjsť len v prípade, že patria do" +" rovnakej kategórie. Konverzia bude spravená na základe pomerov." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Vytvoril" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Vytvorené" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dni" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Zobrazovaný názov" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Desiatky" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Zoskupiť podľa" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Hodiny" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Koľko ráz je táto merná jednotka väčšia ako referenčná merná jednotka v tejto kategórii:\n" +"1 * (táto jednotka) = pomer * (referenčná jednotka)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"O koľko väčšia alebo menšia je táto jednotka v porovnaní s referenčnou mernou jednotkou pre túto kategóriu:\n" +"1 * (referenčná jednotka) = pomer * (táto jednotka)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Naposledy upravoval" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Naposledy upravované" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Dĺžka / Vzdialenosť" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Spravovať viacero merných jednotiek" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Merná jednotka produktu" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategórie merných jednotiek produktu" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Pomer" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referencia mernej jednotky pre túto kategóriu" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Presnosť zaokrúhľovania" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Hľadať UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Menšie než referencia mernej jednotky" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Vypočítané množstvo bude násobok tejto hodnoty. Použite 1.0 pre mernú " +"jednotku ktorá nemôže byť dalej delená, ako je kus." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Pomer konverzie pre mernú jednotku nemôže byť 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Referenčná jednotka musí mať prepočítavací faktor rovný 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Presnosť zaokrúhľovania musí byť pozitívna." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Typ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Po odškrtnutí aktívneho políčka, môžete skryť mernú jednotku bez jej " +"odstránenia." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Jednotka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Merná jednotka" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategória mernej jednotky" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Jednotky" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Merné jednotky" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategórie merných jednotiek" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategórie merných jendotiek" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Merné jednotky rovnakej kategórie môžu byť prepočítavané medzi sebou. Napríklad v kategórii\n" +" 'Čas', môžete mať nasledovné merné jednotky:\n" +" hodiny, dni." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Kategória mernej jednotky %s môže mať len jednu referenčnú mernú jednotku." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Objem" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Varovanie pre %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Hmotnosť" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Pracovný čas " + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Musíte definovať prepočítavací pomer medzi viacerými mernými\n" +"jednotkami v tej istej kategórii." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "v" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/sl.po b/uom/i18n/sl.po new file mode 100644 index 0000000..34a488d --- /dev/null +++ b/uom/i18n/sl.po @@ -0,0 +1,502 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# laznikd , 2023 +# Vida Potočnik , 2023 +# Matjaz Mozetic , 2023 +# Tomaž Jug , 2023 +# Jasmina Macur , 2023 +# Martin Trigaux, 2023 +# matjaz k , 2023 +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktivno" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Dodajte novo mersko enoto" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Dodajte novo kategorijo merske enote" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arhivirano" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Večje razmerje" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Večje od referenčne enote mere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorija" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Barva" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "Pretvorba med enotami mere je možna samo v isti kategoriji." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Ustvaril" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dni" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Združi po" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Ure" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Dolžina/Razdalja" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Več enot mere" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Merska enota izdelka" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Kategorije EM proizvoda" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Razmerje" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referenčna enota mere za to skupino" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Natančnost zaokroževanja" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Manjše od referenčne enote mere" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Izračunana količina bo multiplikator te vrednosti. Uporabite 1.0 za enote , " +"ki se ne dajo deliti (npr. kos)" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Koeficient pretvorbe ne sme biti 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Odoo uporablja naslednje merske enote. ki jih ni mogoče izbrisati:%s\n" +"Namesto tega jih lahko arhivirate." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Merska enota %s opredeljena v vrstici naročila, ne spada v isto kategorijo " +"kot merska enota %s opredeljena na izdelku. Popravite enoto mere, " +"opredeljeno v vrstici naročila ali na izdelku, saj morata pripadati isti " +"kategoriji enot mer." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tip" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Enota" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Enota mere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategorija merske enote" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Enot" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Merske enote" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategorije enot mere" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategorije enot mere" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "Kategorija enot mere%s mora imeti vsaj eno referenčno mersko enoto." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Prostornina" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Opozorila za %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Masa" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Delovni čas" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/sr.po b/uom/i18n/sr.po new file mode 100644 index 0000000..5ced0a3 --- /dev/null +++ b/uom/i18n/sr.po @@ -0,0 +1,524 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Dragan Vukosavljevic , 2023 +# Martin Trigaux, 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktivno" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Add a new unit of measure" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Add a new unit of measure category" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arhivirano" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Bigger Ratio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Bigger than the reference Unit of Measure" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategorija" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Boja" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Combined Ratio" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Do konverzije između mernih jedinica može doći samo ako pripadaju istoj " +"kategoriji. Konverzija će se izvršiti na osnovu odnosa." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dani" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dozens" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupiši po" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Sati" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Poslednji put ažurirao" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Poslednji put ažurirano" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Duzina / Udaljenost" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Manage Multiple Units of Measure" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Jedinica mere proizvoda" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Product UoM Categories" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Odnos" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Reference Unit of Measure for this category" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Reference UoM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Preciznost zaokruživanja" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Search UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Search UoM Category" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Smaller than the reference Unit of Measure" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Surface" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "The conversion ratio for a unit of measure cannot be 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "The reference unit must have a conversion factor equal to 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "The rounding precision must be strictly positive." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "The value of ratio could not be Zero" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Vrsta" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Uncheck the active field to disable a unit of measure without deleting it." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Jedinica" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Jedinica mere" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Unit of Measure Category" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Kom" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Jedinice mere" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Units of Measure Categories" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Jedinica za merenje kategorija" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "UoM category %s must have at least one reference unit of measure." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "UoM category %s should have a reference unit of measure." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "UoM category %s should only have one reference unit of measure." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Uom" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Obim" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Warning for %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Težina" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Vreme rada" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "in" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/sv.po b/uom/i18n/sv.po new file mode 100644 index 0000000..49f813e --- /dev/null +++ b/uom/i18n/sv.po @@ -0,0 +1,532 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Kristoffer Grundström , 2023 +# Robin Calvin, 2023 +# Chrille Hedberg , 2023 +# Anders Wallenquist , 2023 +# Simon S, 2023 +# Kim Asplund , 2023 +# Martin Trigaux, 2023 +# Lasse L, 2023 +# Mikael Åkerberg , 2023 +# Jakob Krabbe , 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: Jakob Krabbe , 2024\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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" t.ex: 1*(referensenhet)=ratio*(denna enheten)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" t.ex: 1*(denna enheten)=ratio*(referensenhet)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Aktiv" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Lägg till en ny måttenhet" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Lägg till en ny kategori för måttenheter" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arkiverad" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Större ratio" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Större än referensmåttet" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Färg" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Kombinerat nyckeltal" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Omräkning av enheter kan endast ske om de tillhör samma kategori. " +"Omräkningen baseras på ett givet förhållande." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Dagar" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dussin" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Gruppera efter" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Timmar" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Hur många gånger denna måttenhet är större än referensmåttenheten i denna " +"kategori: 1 * (denna enhet) = förhållande * (referensenhet)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Hur mycket större eller mindre denna enhet är jämfört med " +"referensmåttenheten för denna kategori: 1 * (referensenhet) = förhållande * " +"(denna enhet)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Längd / Avstånd" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Administrera flera måttenheter" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produktens måttenhet" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Produktenhetskategorier" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Faktor" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Referensmåttet för denna kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referens UoM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Noggrannhet vid avrundning" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Sök UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Sök UoM Kategori" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Mindre än referensmåttet" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Vissa kritiska fält har ändrats på %s.\n" +"Observera att befintliga data INTE kommer att uppdateras av denna ändring.\n" +"\n" +"Eftersom måttenheter påverkar hela systemet kan detta orsaka kritiska problem.\n" +"Om du t.ex. ändrar avrundningen kan det störa ditt lagersaldo.\n" +"\n" +"Det är därför inte rekommenderat att ändra centrala måttenheter i en databas som körs." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Yta" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Den beräknade kvantiteten kommer att vara en multipel av detta värde. Använd" +" 1.0 för en måttenhet som inte kan delas upp ytterligare, t.ex. en bit." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Omvandlingsfaktorn får inte vara noll!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Följande måttenheter används av systemet och kan inte tas bort: %s\n" +"Du kan arkivera dem istället." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Referensenheten måste ha en omräkningsfaktor som är lika med 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Avrundningsnoggrannheten måste vara strikt positiv." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Måttenheten %s som anges på orderraden tillhör inte samma kategori som " +"måttenheten %s som anges på produkten. Vänligen korrigera måttenheten som " +"definierats på orderraden eller på produkten, de bör tillhöra samma " +"kategori." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Värdet på kvoten kunde inte vara noll" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Typ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Avmarkera det aktiva fältet för att inaktivera en måttenhet utan att ta bort" +" den." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Enhet" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Måttenhet" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Kategori för måttenhet" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Enheter" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Måttenheter" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Kategorier för måttenheter" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Kategorier för måttenheter" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Måttenheter som tillhör samma kategori kan omvandlas\n" +" omvandlas mellan varandra. Till exempel, i kategorin\n" +" 'Tid' har du följande måttenheter:\n" +" Timmar, Dagar." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "UoM-kategorin %s måste ha minst en referensmåttenhet." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "UoM-kategorin %s bör ha en referensmåttenhet." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "UoM-kategorin %s bör endast ha en referensmåttenhet." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Uom" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Volym" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Varning för %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Vikt" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Arbetstid" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Du måste definiera en omvandlingsfrekvens mellan flera måttenheter\n" +" måttenheter inom samma kategori." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "i" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "i³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mile" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/th.po b/uom/i18n/th.po new file mode 100644 index 0000000..6291633 --- /dev/null +++ b/uom/i18n/th.po @@ -0,0 +1,521 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" เช่น : 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" เช่น: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "เปิดใช้งาน" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "เพิ่มหน่วยวัดใหม่" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "เพิ่มหมวดหมู่หน่วยวัดใหม่" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "เก็บถาวรแล้ว" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "อัตราส่วนที่ใหญ่กว่า" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "ใหญ่กว่าหน่วยวัดอ้างอิง" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "หมวดหมู่" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "สี" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "อัตราส่วนรวม" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"การแปลงระหว่างหน่วยวัดจะเกิดขึ้นได้ก็ต่อเมื่ออยู่ในหมวดหมู่เดียวกัน " +"การแปลงจะอิงตามอัตราส่วน" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "สร้างโดย" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "สร้างเมื่อ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "วัน" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "แสดงชื่อ" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "โหล" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "กลุ่มโดย" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "ชั่วโมง" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"หน่วยวัดนี้ใหญ่กว่าหน่วยวัดอ้างอิงในหมวดหมู่นี้กี่ครั้ง: 1 * (หน่วยนี้) = " +"อัตราส่วน * (หน่วยอ้างอิง)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"หน่วยนี้ใหญ่กว่าหรือเล็กกว่ามากเมื่อเทียบกับหน่วยวัดอ้างอิงสำหรับหมวดหมู่นี้:" +" 1 * (หน่วยอ้างอิง) = อัตราส่วน * (หน่วยนี้)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ไอดี" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "อัปเดตครั้งล่าสุดโดย" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "อัปเดตครั้งล่าสุดเมื่อ" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "ความยาว/ระยะทาง" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "จัดการหน่วยวัดหลายหน่วย" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "หน่วยวัดสินค้า" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "หมวดของหน่วยวัดของสินค้า" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "อัตราส่วน" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "หน่วยอ้างอิงสำหรับหมวดหมู่นี้" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "อ้างอิง UoM" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "ความแม่นยำในการปัดเศษ" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "ค้นหา UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "ค้นหาหมวดหมู่ UoM" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "เล็กกว่าหน่วยวัดอ้างอิง" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"ช่องสำคัญบางช่องได้รับการแก้ไขเมื่อ %s\n" +"โปรดทราบว่าข้อมูลที่มีอยู่จะไม่ได้รับการอัปเดตโดยการเปลี่ยนแปลงนี้\n" +"\n" +"เนื่องจากหน่วยวัดส่งผลกระทบต่อทั้งระบบ จึงอาจทำให้เกิดปัญหาร้ายแรงได้\n" +"เช่น การแก้ไขการปัดเศษอาจรบกวนยอดคงเหลือสินค้าคงคลังของคุณ\n" +"\n" +"ดังนั้นจึงไม่แนะนำให้เปลี่ยนหน่วยการวัดหลักในฐานข้อมูลที่ทำงานอยู่" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "พื้นผิว" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"ปริมาณที่คำนวณได้จะเป็นจำนวนทวีคูณของค่านี้ ใช้ 1.0 " +"สำหรับหน่วยวัดที่ไม่สามารถแยกเพิ่มเติมได้ เช่น ชิ้น" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "อัตราการแปลงสำหรับหน่วยวัดไม่สามารถเป็น 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"ระบบใช้หน่วยวัดต่อไปนี้และไม่สามารถลบได้: %s\n" +"คุณสามารถเก็บถาวรแทนได้" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "หน่วยอ้างอิงจะต้องมีปัจจัยการแปลงเท่ากับ 1" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "ความแม่นยำในการปัดเศษต้องเป็นค่าบวกเท่านั้น" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"หน่วยวัด %s ที่กำหนดบนรายการคำสั่งซื้อไม่อยู่ในหมวดหมู่เดียวกันกับหน่วยวัด " +"%s ที่กำหนดบนผลิตภัณฑ์ " +"โปรดแก้ไขหน่วยวัดที่กำหนดไว้ในรายการสั่งซื้อหรือบนผลิตภัณฑ์ " +"ซึ่งควรอยู่ในหมวดหมู่เดียวกัน" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "ค่าของอัตราส่วนไม่สามารถเป็นศูนย์ได้" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "ประเภท" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "ยกเลิกการเลือกช่องที่ใช้งานอยู่เพื่อปิดใช้งานหน่วยวัดโดยไม่ต้องลบ" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "หน่วย" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "หน่วยวัด" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "หมวดหมู่ของหน่วยวัด" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "หน่วย" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "หน่วยวัด" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "หมวดหมู่ของหน่วยวัด" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "หมวดของหน่วยวัด" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"หน่วยวัดที่อยู่ในหมวดหมู่เดียวกันสามารถเป็น\n" +" เปลี่ยนระหว่างกัน ตัวอย่างเช่น ในหมวดหมู่\n" +" 'เวลา'คุณจะมีหน่วยวัดต่อไปนี้:\n" +" ชั่วโมง วัน" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "หมวดหมู่ UoM %s ต้องมีหน่วยวัดอ้างอิงอย่างน้อยหนึ่งหน่วย" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "หมวดหมู่ UoM %s ควรมีหน่วยวัดอ้างอิง" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "หมวดหมู่ UoM %s ควรมีหน่วยอ้างอิงเพียงหนึ่งหน่วยวัดเท่านั้น" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "หน่วยวัด" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "ปริมาตร" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "คำเตือนสำหรับ %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "น้ำหนัก" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "เวลาทำงาน" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"คุณต้องกำหนดอัตราการแปลงระหว่างหน่วยวัดหลายหน่วย\n" +" ในหมวดเดียวกัน" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "ซม." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "ออนซ์ (สหรัฐอเมริกา)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ฟุต" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "แกลลอน (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "นิ้ว" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "กก." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "กม." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "ปอนด์" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "ไมล์" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "มม." + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "ออนซ์" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "จำนวน (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "หลา" diff --git a/uom/i18n/tr.po b/uom/i18n/tr.po new file mode 100644 index 0000000..3cefeb2 --- /dev/null +++ b/uom/i18n/tr.po @@ -0,0 +1,530 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# Translators: +# Ozlem Cikrikci , 2023 +# Levent Karakaş , 2023 +# Umur Akın , 2023 +# Ediz Duman , 2023 +# Murat Kaplan , 2023 +# Ertuğrul Güreş , 2023 +# Martin Trigaux, 2023 +# Nadir Gazioglu , 2023 +# Tugay Hatıl , 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: Tugay Hatıl , 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Etkin" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Yeni bir ölçü birimi ekle" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Yeni bir ölçü birimi kategorisi ekle" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Arşivlendi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Daha büyük Oran" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Referans Ölçü Biriminden daha büyük" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Kategori" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Renk" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Birleşik Oran" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Ölçü Birimleri arası dönüştürme yalnızca aynı kategoriye sahiplerse " +"yapılabilir. Dönüşümler oranlara göre yapılacaktır." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Oluşturulma" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Gün" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Düzine" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Grupla" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Saat" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Bu kategoride bu birim ölçüleri, referans birim ölçülerinden kaç kat daha " +"büyüktür: 1*(bu birim)= oran*(referans birim)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Bu kategoride bu birim referans birim ölçüleri ile kıyaslandığında ne kadar " +"büyük ya da küçük: 1* (referans birim)=oran*(bu birim)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Son Güncelleyen" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Son Güncelleme" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Uzunluk / Mesafe" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Çoklu Ölçü Birim Yönetimi" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Ürün Ölçü Birimi" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Ürün Ölçü Birimi Kategorileri" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Oran" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Bu kategori için Ölçü referans Birimi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Referans Ölçü Birimi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Yuvarlama Hassasiyeti" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Ölçü Birimi Ara" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Ölçü Birimi Kategorisi Ara" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Ölçü referans Biriminden daha küçük" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Bazı kritik alanlar değiştirildi %s.\n" +"Mevcut verilerin bu değişiklikle güncelleştirilmeyeceğini unutmayın.\n" +"\n" +"Ölçü birimleri tüm sistemi etkilediğinden, bu kritik sorunlara neden olabilir.\n" +"Örn. yuvarlamayı değiştirmek envanter bakiyenizi bozabilir.\n" +"\n" +"Bu nedenle, çalışan bir veritabanında temel ölçü birimlerinin değiştirilmesi önerilmez." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Yüzey" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Hesaplanan miktar bu değerin bir çarpanı olacaktır. Daha fazla bölünemeyen, " +"yani bir parça olarak, bir Ölçü Birimi için 1.0 değerini kullanın." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Ölçü birimi çevrimi için çevrim oranı 0 olamaz !" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Aşağıdaki ölçü birimleri sistem tarafından kullanılır ve silinemez: %s\n" +"Bunun yerine onları arşivleyebilirsiniz." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Referans birim 1 eşit bir dönüşüm faktörüne sahip olmalıdır." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Yuvarlama hassasiyeti kesinlikle pozitif olmalıdır." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Sipariş satırında tanımlanan %s ölçü birimi, ürün üzerinde tanımlanan ölçü " +"birimi ile aynı kategoriye ait değildir. Lütfen sipariş satırında veya " +"üründe tanımlanan %s ölçü birimini düzeltiniz, bunlar aynı kategoriye ait " +"olmalıdır." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Tür" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Bir ölçü birimini silmeden devre dışı bırakmak için etkin alanın işaretini " +"kaldırın." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Birim" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Ölçü Birimi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Ölçü Birim Kategorisi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Birim" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Ölçü Birimi" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Ölçü Birimi Kategorileri" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Ölçü Birimi Kategorileri" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Aynı kategoriye ait ölçü birimleri kendi aralarında dönüştürülebilir. \n" +"Örneğin, 'Zaman' kategorisinde şu ölçü birimlerine sahip olacaksınız: \n" +"Saat, Gün." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Ölçü birimi kategorisi %s, en az bir referans ölçü birimine sahip olmalıdır." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "%s Ölçü birimi kategorisinin bir referans ölçü birimi olmalıdır." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "%s UoM kategorisinde sadece bir referans ölçü birimi olmalıdır." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Ölçü Birimi" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Hacim" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "%s için uyarı" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Ağırlık" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Çalışma Süresi" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Aynı kategorideki birkaç Ölçü Birimi arasında bir \n" +"dönüştürme oranı tanımlamanız gerekir." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "sıvı ons (Amerikan)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ayak" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ayak³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "galon (Amerikan)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "inç" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "inç³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "pound" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mil" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "ons" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "çeyrek(Amerikan)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/uk.po b/uom/i18n/uk.po new file mode 100644 index 0000000..a14e716 --- /dev/null +++ b/uom/i18n/uk.po @@ -0,0 +1,528 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" напр: 1*(од. реф.)=спів-я*(цю од.)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" напр.: 1*(цю од.)=спів-я*(реф. од.)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Активно" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Додайте нову одиницю вимірювання" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Додайте нову категорію одиниці вимірювання" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Заархівовано" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Більший коефіцієнт" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Більша за основну одиницю вимірювання" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Категорія" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Колір" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Комбінований коефіцієнт" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Перетворення між одиницями вимірювання може відбуватися лише у тому випадку," +" якщо вони належать до однієї і тієї ж категорії. Конвертація буде " +"здійснюватися на основі співвідношення." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Створив" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Створено" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Дні" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Дюжини" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Групувати за" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Години" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Скільки разів ця одиниця вимірювання більша, ніж основна одиниця виміру в " +"цій категорії: 1 * (ця одиниця) = співвідношення * (контрольна одиниця)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Наскільки більшою чи меншою є ця одиниця, порівняно з основною одиницею " +"виміру для цієї категорії: 1 * (контрольна одиниця) = співвідношення * (ця " +"одиниця)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Востаннє оновив" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Останнє оновлення" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Довжина / Відстань" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Керування різними одиницями вімірювання" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Одиниця вимірювання товару" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Категорії одиниці вимірювання товару" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Співвідношення" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Основна одиниця вимірювання для цієї категорії" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "Од. вим. референсу" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Точність округлення" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Пошук одиниці вимірювання" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Пошук категорії од. вим." + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Менша за основну одиницю вимірювання" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Деякі критичні поля були змінені на %s.\n" +"Зауважте, що наявні дані НЕ оновлюватимуться завдяки цій зміні.\n" +"\n" +"Оскільки одиниці вимірювання впливають на всю систему, це може викликати критичні проблеми.\n" +"Напр. зміна округлення може порушити баланс вашого запасу.\n" +"\n" +"Тому змінювати основні одиниці вимірювання в запущеній базі даних не рекомендується." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Поверхня" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Обчисленої кількості буде кілька цього значення. Використовуйте 1.0 для " +"одиниці вимірювання, яку ще не можна розділити, наприклад, шматок." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Коефіцієнт конверсії одиниці виміру не може бути 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Наступні одиниці вимірювання використовуються системою і не можуть бути видалені: %s\n" +"Натомість ви можете заархівувати їх." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "Основна одиниця повинна мати коефіцієнт перетворення, рівний одиниці." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "Точність округлення повинна бути строго позитивною." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Одиниця вимірювання %s визначена на рядку замовлення не належить до тієї ж " +"категорії, що й одиниця вимірювання %s визначена на товарі. Відредагуйте " +"одиницю вимірювання визначену на рядку замовлення або на товарі, вони " +"повинні належати до тієї ж категорії." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Значення коефіцієнту не може бути нульовим" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Тип" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" +"Зніміть позначку з активного поля, щоби вимкнути одиницю вимірювання, не " +"видаляючи її." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Одиниці" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Одиниця вимірювання" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Категорія одиниць вимірювання" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Одиниці" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Одиниці вимірювання" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Категорії одиниць вимірювання" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Категорії одиниць виміру" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Одиниці вимірювання, що належать до тієї ж категорії, можуть бути\n" +"перетворені між собою. Наприклад, у категорії\n" +"'Час', у вас будуть такі одиниці вимірювання:\n" +"години, дні." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" +"Категорія од. вим. %s повинна містити хоча би один референс одиниці " +"вимірювання." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Категорія од. вим. %s повинна мати опорну одиницю виміру." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" +"Категорія одиниці вимірювання %s повинна мати лише одне посилання одиниці " +"вимірювання." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "Од. вим." + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Об'єм" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Попередження для %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Вага" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Робочий час" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Ви повинні визначити коефіцієнт конверсії між кількома одиницями\n" +"вимірювання в межах однієї категорії." + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "см" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "в" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "кг" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "км" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "миля" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/uom.pot b/uom/i18n/uom.pot new file mode 100644 index 0000000..fced3b0 --- /dev/null +++ b/uom/i18n/uom.pot @@ -0,0 +1,483 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "" diff --git a/uom/i18n/vi.po b/uom/i18n/vi.po new file mode 100644 index 0000000..3e00cee --- /dev/null +++ b/uom/i18n/vi.po @@ -0,0 +1,519 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" VD: 1*(đơn vị tham chiếu)=tỷ lệ*(đơn vị này)\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" VD: 1*(đơn vị này)=tỷ lệ*(đơn vị tham chiếu)\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "Đang hoạt động" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "Add a new unit of measure" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "Add a new unit of measure category" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "Đã lưu trữ" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "Tỷ lệ lớn hơn" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "Lớn hơn đơn vị đo lường gốc" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "Danh mục" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "Màu sắc" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "Tỷ lệ kết hợp" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "" +"Việc chuyển đổi qua lại giữa các Đơn vị tính chỉ có thể khả dụng nếu chúng " +"cùng loại. Việc chuyển đổi sẽ được thực hiện dựa trên tỉ lệ." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "Được tạo bởi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "Được tạo vào" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "Ngày" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "Dozens" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "Nhóm theo" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "Giờ" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "" +"Số Đơn vị Đo lường này lớn hơn Đơn vị Đo lường trong đơn vị này bao nhiêu " +"lần: 1 * (đơn vị này) = tỷ lệ * (đơn vị tham chiếu)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "" +"Đơn vị này lớn hơn hoặc nhỏ hơn bao nhiêu so với Đơn vị đo lường tham chiếu " +"cho danh mục này: 1 * (đơn vị tham chiếu) = tỷ lệ * (đơn vị này)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "Cập nhật lần cuối bởi" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "Chiều dài / Khoảng cách" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "Quản lý Đa đơn vị Đo lường" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Đơn vị tính sản phẩm" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "Danh mục đơn vị tính sản phẩm" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "Tỷ lệ" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "Đơn vị gốc của nhóm này" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "ĐVT tham chiếu" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "Làm tròn chính xác" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "Search UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "Tìm kiếm danh mục ĐVT" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "Nhỏ hơn đơn vị gốc của nhóm này" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"Một số trường quan trọng đã được sửa đổi cho %s.\n" +"Lưu ý rằng thay đổi này KHÔNG cập nhật dữ liệu hiện tại.\n" +"\n" +"Vì đơn vị tính ảnh hưởng đến toàn bộ hệ thống, nên điều này có thể gây ra các vấn đề nghiêm trọng.\n" +"VD: việc sửa đổi cách làm tròn có thể làm đảo lộn số dư tồn kho của bạn.\n" +"\n" +"Do đó, không nên thay đổi các đơn vị tính chính trong cơ sở dữ liệu đang chạy." + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "Bề mặt" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "" +"Số lượng được tính toán sẽ là bội số (số chia hết) của giá trị này. Sử dụng " +"1.0 cho một đơn vị đo lường mà không thể được chia nhỏ nữa, ví du như đơn vị" +" là một miếng (một mảnh)." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "Tỷ lệ chuyển đổi cho một đơn vị đo lương không thể = 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"Không thể xóa các đơn vị tính sau đây vì hệ thống đang sử dụng chúng: %s\n" +"Thay vào đó, bạn có thể lưu trữ chúng." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "The reference unit must have a conversion factor equal to 1." + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "The rounding precision must be strictly positive." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "" +"Đơn vị tính %s được xác định trên dòng đơn hàng không cùng loại với đơn vị " +"tính %s được xác định trên sản phẩm. Vui lòng sửa lại đơn vị tính trên dòng " +"đơn hàng hoặc trên sản phẩm cho cùng loại." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "Giá trị của tỷ lệ không thể bằng 0" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "Loại" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "Bỏ chọn trường Kích hoạt để vô hiệu hóa đơn vị đo mà không xóa nó" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "Đơn vị" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "Đơn vị tính" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "Unit of Measure Category" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "Đơn vị" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "Đơn vị tính" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "Danh mục đơn vị tính" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "Nhóm Đơn vị Đo lường" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"Các đơn vị đo lường trong cùng một nhóm có thể được chuyển đối qua\n" +" lại lẫn nhau. Ví dụ, trong nhóm 'Thời gian', bạn sẽ có các đơn vị đo lường như: giờ, ngày, phút.\n" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "Danh mục ĐVT %s phải có ít nhất một đơn vị tính tham chiếu." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "Danh mục ĐVT %s nên có một đơn vị tính tham chiếu." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "UoM category %s should only have one reference unit of measure." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "ĐVT" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "Thể tích" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "Cảnh báo cho %s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "Khối lượng" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "Thời gian làm việc" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"Bạn phải định nghĩa một tỉ lệ chuyển đổi giữa các Đơn vị\n" +" Đo lường trong cùng một Nhóm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "trong" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "km" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "mi" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/zh_CN.po b/uom/i18n/zh_CN.po new file mode 100644 index 0000000..90c62dd --- /dev/null +++ b/uom/i18n/zh_CN.po @@ -0,0 +1,507 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" 例如:1*(参照单位)=比率*(本单位)。\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" 例如:1*(本单位)=比率*(参照单位)。\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "已启用" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "计量单位" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "计量单位类别" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "已存档" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "更大比率" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "大于参照单位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "类别" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "颜色" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "综合比率" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "仅同类别的计量单位可以互相转换。根据比例进行转换。" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "创建日期" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "天" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "打" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "分组方式" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "小时" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "本类别计量单位和参照计量单位相比,大或者小的倍数。1 * (参照单位)=比率 * (本单位)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "本类别计量单位和参照计量单位相比,大或者小的倍数。1 * (参照单位)=比率 * (本单位)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "ID" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "最后更新人" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "上次更新日期" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "长度或距离" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "管理多个计量单位" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "产品计量单位" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "产品计量单位 类别" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "比例" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "这个类别的参照计量单位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "参照 计量单位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "舍入精度" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "搜索单位" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "搜索 计量单位 类别" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "小于参照计量单位" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"一些关键字段在%s上被修改。\n" +"请注意,现有的数据不会被这个变化所更新。\n" +"\n" +"由于计量单位影响到整个系统,这可能会导致关键问题。\n" +"例如,修改四舍五入可能会干扰您的库存平衡。\n" +"\n" +"因此,不建议在一个正在运行的数据库中改变核心计量单位。" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "表面" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "计算的数量将是这个值的倍数。 不能进一步分割的单位,比如 1 片,使用1.0 。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "计量单位的转换比率不能为 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"下列计量单位被系统使用,不能被删除。%s\n" +"您可以将它们存档,而不是。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "参照单位的转换系数必须是1。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "小数点的精度必须为正数。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "订单行上定义的计量单位%s与产品上定义的计量单位%s不属于同一类别。请纠正在订单行或产品上定义的计量单位,它们应该属于同一类别。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "比率值不能为零" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "类型" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "取消选中启用字段以禁用计量单位,而不删除它。" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "单位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "计量单位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "计量单位类别" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "件" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "计量单位" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "计量单位类别" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "计量单位类别" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"属于相同类别的计量单位可以在彼此之间转换。\n" +"例如,在类别'Time'中,\n" +"您将有以下计量单位:小时,天。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "计量单位类别%s必须至少有一个参照计量单位。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "计量单位类别%s应该有一个参照计量单位。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "计量单位类别%s应该有一个参照计量单位。" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "单位" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "体积" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "警告%s" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "重量" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "工时" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"您必须在几个单位之间定义转换率\n" +"在同一类别内测量。" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "cm" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "fl oz (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "ft" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "ft²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "ft³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "gal (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "在" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "in³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "kg" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "千米" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "lb" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "英里" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "mm" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "m²" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "m³" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "oz" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "qt (US)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "yd" diff --git a/uom/i18n/zh_TW.po b/uom/i18n/zh_TW.po new file mode 100644 index 0000000..ca71de3 --- /dev/null +++ b/uom/i18n/zh_TW.po @@ -0,0 +1,508 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * uom +# +# 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: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(reference unit)=ratio*(this unit)\n" +" " +msgstr "" +"\n" +" 例: 1 × 參考單位 = 比例 × 本單位\n" +" " + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +msgid "" +"\n" +" e.g: 1*(this unit)=ratio*(reference unit)\n" +" " +msgstr "" +"\n" +" 例: 1 × 本單位 = 比例 × 參考單位\n" +" " + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__active +msgid "Active" +msgstr "啟用" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "Add a new unit of measure" +msgstr "新增量度單位" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "Add a new unit of measure category" +msgstr "新增量度單位類別" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Archived" +msgstr "已封存" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor_inv +msgid "Bigger Ratio" +msgstr "更大比率" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__bigger +msgid "Bigger than the reference Unit of Measure" +msgstr "大於參考單位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__category_id +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Category" +msgstr "類別" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__color +msgid "Color" +msgstr "顏色" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__ratio +msgid "Combined Ratio" +msgstr "綜合比率" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__category_id +msgid "" +"Conversion between Units of Measure can only occur if they belong to the " +"same category. The conversion will be made based on the ratios." +msgstr "計量單位轉換只能在同一個類型之間進行。轉換根據比例." + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_uid +msgid "Created by" +msgstr "建立人員" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__create_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__create_date +msgid "Created on" +msgstr "建立於" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_day +msgid "Days" +msgstr "天" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__display_name +#: model:ir.model.fields,field_description:uom.field_uom_uom__display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_dozen +msgid "Dozens" +msgstr "打" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Group By" +msgstr "分組依據" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_hour +msgid "Hours" +msgstr "小時" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor_inv +msgid "" +"How many times this Unit of Measure is bigger than the reference Unit of " +"Measure in this category: 1 * (this unit) = ratio * (reference unit)" +msgstr "這個度量單位的數量大於此類別中的參考度量單位:1 *(本單位)=比率*(參考單位)" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__factor +msgid "" +"How much bigger or smaller this unit is compared to the reference Unit of " +"Measure for this category: 1 * (reference unit) = ratio * (this unit)" +msgstr "本類別計量單位和參考計量單位相比,大或者小的倍數。1 * (參考單位)=比率 * (本單位)" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__id +#: model:ir.model.fields,field_description:uom.field_uom_uom__id +msgid "ID" +msgstr "識別號" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_uid +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_uid +msgid "Last Updated by" +msgstr "最後更新者" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__write_date +#: model:ir.model.fields,field_description:uom.field_uom_uom__write_date +msgid "Last Updated on" +msgstr "最後更新於" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_length +msgid "Length / Distance" +msgstr "長度或距離" + +#. module: uom +#: model:res.groups,name:uom.group_uom +msgid "Manage Multiple Units of Measure" +msgstr "管理多個計量單位" + +#. module: uom +#: model:ir.model,name:uom.model_uom_uom +msgid "Product Unit of Measure" +msgstr "產品測量單位" + +#. module: uom +#: model:ir.model,name:uom.model_uom_category +msgid "Product UoM Categories" +msgstr "產品計量單位類別" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__factor +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +msgid "Ratio" +msgstr "比例" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__reference +msgid "Reference Unit of Measure for this category" +msgstr "這個類別的參考計量單位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__reference_uom_id +msgid "Reference UoM" +msgstr "參考計量單位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__rounding +msgid "Rounding Precision" +msgstr "捨入精度" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_uom_view_search +msgid "Search UOM" +msgstr "搜尋 UOM" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.uom_categ_view_search +msgid "Search UoM Category" +msgstr "搜尋計量單位類別" + +#. module: uom +#: model:ir.model.fields.selection,name:uom.selection__uom_uom__uom_type__smaller +msgid "Smaller than the reference Unit of Measure" +msgstr "小於參考計量單位" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"Some critical fields have been modified on %s.\n" +"Note that existing data WON'T be updated by this change.\n" +"\n" +"As units of measure impact the whole system, this may cause critical issues.\n" +"E.g. modifying the rounding could disturb your inventory balance.\n" +"\n" +"Therefore, changing core units of measure in a running database is not recommended." +msgstr "" +"在 %s 上修改了一些關鍵欄位。\n" +"請注意,此更改不會更新現有資料。\n" +"\n" +"由於度量單位會影響整個系統,這可能會導致嚴重問題。\n" +"例如。修改四捨五入可能會擾亂您的庫存平衡。\n" +"\n" +"因此,不建議更改正在運行的資料庫中的核心度量單位。" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_surface +msgid "Surface" +msgstr "表面" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__rounding +msgid "" +"The computed quantity will be a multiple of this value. Use 1.0 for a Unit " +"of Measure that cannot be further split, such as a piece." +msgstr "計算的數量將是這個值的倍數。 不能進一步分割的單位,比如 1 片,使用1.0 。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_gt_zero +msgid "The conversion ratio for a unit of measure cannot be 0!" +msgstr "計量單位的轉換比率不能為 0!" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The following units of measure are used by the system and cannot be deleted: %s\n" +"You can archive them instead." +msgstr "" +"以下計量單位由系統使用且無法刪除:%s\n" +"您可以改為存檔它們。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_factor_reference_is_one +msgid "The reference unit must have a conversion factor equal to 1." +msgstr "參考單位的轉換係數必須是1。" + +#. module: uom +#: model:ir.model.constraint,message:uom.constraint_uom_uom_rounding_gt_zero +msgid "The rounding precision must be strictly positive." +msgstr "小數點的精度必須為正數。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "" +"The unit of measure %s defined on the order line doesn't belong to the same " +"category as the unit of measure %s defined on the product. Please correct " +"the unit of measure defined on the order line or on the product, they should" +" belong to the same category." +msgstr "訂單行上定義的計量單位 %s 與產品上定義的計量單位 %s 不屬於同一類別。請更正訂單行或產品上定義的計量單位,它們應屬於同一類別。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "The value of ratio could not be Zero" +msgstr "比率數值不可為零" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__uom_type +msgid "Type" +msgstr "類型" + +#. module: uom +#: model:ir.model.fields,help:uom.field_uom_uom__active +msgid "" +"Uncheck the active field to disable a unit of measure without deleting it." +msgstr "取消勾選有效欄位以停用度量單位,而不刪除它。" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_unit +msgid "Unit" +msgstr "單位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_uom__name +msgid "Unit of Measure" +msgstr "量度單位" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__name +msgid "Unit of Measure Category" +msgstr "計量單位類別" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_unit +msgid "Units" +msgstr "件" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_form_action +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_tree_view +msgid "Units of Measure" +msgstr "量度單位" + +#. module: uom +#: model:ir.actions.act_window,name:uom.product_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "量度單位類型" + +#. module: uom +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_form_view +#: model_terms:ir.ui.view,arch_db:uom.product_uom_categ_tree_view +msgid "Units of Measure categories" +msgstr "量度單位類型" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_categ_form_action +msgid "" +"Units of measure belonging to the same category can be\n" +" converted between each others. For example, in the category\n" +" 'Time', you will have the following units of measure:\n" +" Hours, Days." +msgstr "" +"屬於相同類別的測量單位可以在彼此之間轉換。\n" +"例如,在類別'Time'中,\n" +"您將有以下計量單位:小時,天。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s must have at least one reference unit of measure." +msgstr "UoM 類別 %s 必須至少有一個參考計量單位." + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should have a reference unit of measure." +msgstr "計量單位類別 %s 應具有參考計量單位。" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "UoM category %s should only have one reference unit of measure." +msgstr "計量單位類別%s應該有一個參考計量單位。" + +#. module: uom +#: model:ir.model.fields,field_description:uom.field_uom_category__uom_ids +msgid "Uom" +msgstr "計量單位" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_vol +msgid "Volume" +msgstr "容量 / 體積" + +#. module: uom +#. odoo-python +#: code:addons/uom/models/uom_uom.py:0 +#, python-format +msgid "Warning for %s" +msgstr "%s 的警告" + +#. module: uom +#: model:uom.category,name:uom.product_uom_categ_kgm +msgid "Weight" +msgstr "重量" + +#. module: uom +#: model:uom.category,name:uom.uom_categ_wtime +msgid "Working Time" +msgstr "工作時間" + +#. module: uom +#: model_terms:ir.actions.act_window,help:uom.product_uom_form_action +msgid "" +"You must define a conversion rate between several Units of\n" +" Measure within the same category." +msgstr "" +"若同一類別內有多種量度單位,\n" +" 你必須設定單位之間的換算比例。" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cm +msgid "cm" +msgstr "厘米" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_floz +msgid "fl oz (US)" +msgstr "液安士(美制)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_foot +msgid "ft" +msgstr "英尺" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_foot +msgid "ft²" +msgstr "平方英尺" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_foot +msgid "ft³" +msgstr "立方英尺" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_gal +msgid "gal (US)" +msgstr "加侖(美制)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_inch +msgid "in" +msgstr "英寸" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_inch +msgid "in³" +msgstr "立方英寸" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_kgm +msgid "kg" +msgstr "公斤" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_km +msgid "km" +msgstr "公里" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_lb +msgid "lb" +msgstr "磅" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_mile +msgid "mi" +msgstr "英里" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_millimeter +msgid "mm" +msgstr "毫米" + +#. module: uom +#: model:uom.uom,name:uom.uom_square_meter +msgid "m²" +msgstr "平方米" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_cubic_meter +msgid "m³" +msgstr "立方米" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_oz +msgid "oz" +msgstr "安士" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_qt +msgid "qt (US)" +msgstr "夸脫(美制)" + +#. module: uom +#: model:uom.uom,name:uom.product_uom_yard +msgid "yd" +msgstr "碼" diff --git a/uom/models/__init__.py b/uom/models/__init__.py new file mode 100644 index 0000000..357b041 --- /dev/null +++ b/uom/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import uom_uom diff --git a/uom/models/uom_uom.py b/uom/models/uom_uom.py new file mode 100644 index 0000000..c4762e8 --- /dev/null +++ b/uom/models/uom_uom.py @@ -0,0 +1,265 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from collections import defaultdict +from datetime import timedelta + +from odoo import api, fields, tools, models, _ +from odoo.exceptions import UserError, ValidationError + + +class UoMCategory(models.Model): + _name = 'uom.category' + _description = 'Product UoM Categories' + + name = fields.Char('Unit of Measure Category', required=True, translate=True) + + uom_ids = fields.One2many('uom.uom', 'category_id') + reference_uom_id = fields.Many2one('uom.uom', "Reference UoM", store=False) # Dummy field to keep track of reference uom change + + @api.onchange('uom_ids') + def _onchange_uom_ids(self): + if len(self.uom_ids) == 1: + self.uom_ids[0].uom_type = 'reference' + self.uom_ids[0].factor = 1 + else: + reference_count = sum(uom.uom_type == 'reference' for uom in self.uom_ids) + if reference_count == 0 and self._origin.id: + raise UserError(_('UoM category %s must have at least one reference unit of measure.', self.name)) + if self.reference_uom_id: + new_reference = self.uom_ids.filtered(lambda o: o.uom_type == 'reference' and o._origin.id != self.reference_uom_id.id) + else: + new_reference = self.uom_ids.filtered(lambda o: o.uom_type == 'reference' and o._origin.uom_type != 'reference') + if new_reference: + other_uoms = self.uom_ids.filtered(lambda u: u._origin.id) - new_reference + for uom in other_uoms: + uom.factor = uom._origin.factor / (new_reference._origin.factor or 1) + if uom.factor > 1: + uom.uom_type = 'smaller' + else: + uom.uom_type = 'bigger' + self.reference_uom_id = new_reference._origin.id + + +class UoM(models.Model): + _name = 'uom.uom' + _description = 'Product Unit of Measure' + _order = "factor DESC, id" + + def _unprotected_uom_xml_ids(self): + return [ + "product_uom_hour", # NOTE: this uom is protected when hr_timesheet is installed. + "product_uom_dozen", + ] + + name = fields.Char('Unit of Measure', required=True, translate=True) + category_id = fields.Many2one( + 'uom.category', 'Category', required=True, ondelete='restrict', + help="Conversion between Units of Measure can only occur if they belong to the same category. The conversion will be made based on the ratios.") + factor = fields.Float( + 'Ratio', default=1.0, digits=0, required=True, # force NUMERIC with unlimited precision + help='How much bigger or smaller this unit is compared to the reference Unit of Measure for this category: 1 * (reference unit) = ratio * (this unit)') + factor_inv = fields.Float( + 'Bigger Ratio', compute='_compute_factor_inv', digits=0, # force NUMERIC with unlimited precision + readonly=True, required=True, + help='How many times this Unit of Measure is bigger than the reference Unit of Measure in this category: 1 * (this unit) = ratio * (reference unit)') + rounding = fields.Float( + 'Rounding Precision', default=0.01, digits=0, required=True, + help="The computed quantity will be a multiple of this value. " + "Use 1.0 for a Unit of Measure that cannot be further split, such as a piece.") + active = fields.Boolean('Active', default=True, help="Uncheck the active field to disable a unit of measure without deleting it.") + uom_type = fields.Selection([ + ('bigger', 'Bigger than the reference Unit of Measure'), + ('reference', 'Reference Unit of Measure for this category'), + ('smaller', 'Smaller than the reference Unit of Measure')], 'Type', + default='reference', required=True) + ratio = fields.Float('Combined Ratio', compute='_compute_ratio', inverse='_set_ratio', store=False) + color = fields.Integer('Color', compute='_compute_color') + + _sql_constraints = [ + ('factor_gt_zero', 'CHECK (factor!=0)', 'The conversion ratio for a unit of measure cannot be 0!'), + ('rounding_gt_zero', 'CHECK (rounding>0)', 'The rounding precision must be strictly positive.'), + ('factor_reference_is_one', "CHECK((uom_type = 'reference' AND factor = 1.0) OR (uom_type != 'reference'))", "The reference unit must have a conversion factor equal to 1.") + ] + + def _check_category_reference_uniqueness(self): + categ_res = self.read_group( + [("category_id", "in", self.category_id.ids)], + ["category_id", "uom_type"], + ["category_id", "uom_type"], + lazy=False, + ) + uom_by_category = defaultdict(int) + ref_by_category = {} + for res in categ_res: + uom_by_category[res["category_id"][0]] += res["__count"] + if res["uom_type"] == "reference": + ref_by_category[res["category_id"][0]] = res["__count"] + + for category in self.category_id: + reference_count = ref_by_category.get(category.id, 0) + if reference_count > 1: + raise ValidationError(_("UoM category %s should only have one reference unit of measure.", category.name)) + elif reference_count == 0 and uom_by_category.get(category.id, 0) > 0: + raise ValidationError(_("UoM category %s should have a reference unit of measure.", category.name)) + + @api.depends('factor') + def _compute_factor_inv(self): + for uom in self: + uom.factor_inv = uom.factor and (1.0 / uom.factor) or 0.0 + + @api.depends('uom_type', 'factor') + def _compute_ratio(self): + for uom in self: + if uom.uom_type == 'reference': + uom.ratio = 1 + elif uom.uom_type == 'bigger': + uom.ratio = uom.factor_inv + else: + uom.ratio = uom.factor + + def _set_ratio(self): + if self.ratio == 0: + raise ValidationError(_("The value of ratio could not be Zero")) + if self.uom_type == 'reference': + self.factor = 1 + elif self.uom_type == 'bigger': + self.factor = 1 / self.ratio + else: + self.factor = self.ratio + + @api.depends('uom_type') + def _compute_color(self): + for uom in self: + if uom.uom_type == 'reference': + uom.color = 7 + else: + uom.color = 0 + + @api.onchange('uom_type') + def _onchange_uom_type(self): + if self.uom_type == 'reference': + self.factor = 1 + + @api.onchange('factor', 'factor_inv', 'uom_type', 'rounding', 'category_id') + def _onchange_critical_fields(self): + if self._filter_protected_uoms() and self.create_date < (fields.Datetime.now() - timedelta(days=1)): + return { + 'warning': { + 'title': _("Warning for %s", self.name), + 'message': _( + "Some critical fields have been modified on %s.\n" + "Note that existing data WON'T be updated by this change.\n\n" + "As units of measure impact the whole system, this may cause critical issues.\n" + "E.g. modifying the rounding could disturb your inventory balance.\n\n" + "Therefore, changing core units of measure in a running database is not recommended.", + self.name, + ) + } + } + + @api.model_create_multi + def create(self, vals_list): + for values in vals_list: + if 'factor_inv' in values: + factor_inv = values.pop('factor_inv') + values['factor'] = factor_inv and (1.0 / factor_inv) or 0.0 + res = super(UoM, self).create(vals_list) + res._check_category_reference_uniqueness() + return res + + def write(self, values): + if 'factor_inv' in values: + factor_inv = values.pop('factor_inv') + values['factor'] = factor_inv and (1.0 / factor_inv) or 0.0 + + res = super(UoM, self).write(values) + if ('uom_type' not in values or values['uom_type'] != 'reference') and\ + not self.env.context.get('allow_to_change_reference'): + self._check_category_reference_uniqueness() + return res + + @api.ondelete(at_uninstall=False) + def _unlink_except_master_data(self): + locked_uoms = self._filter_protected_uoms() + if locked_uoms: + raise UserError(_( + "The following units of measure are used by the system and cannot be deleted: %s\nYou can archive them instead.", + ", ".join(locked_uoms.mapped('name')), + )) + + @api.model + def name_create(self, name): + """ The UoM category and factor are required, so we'll have to add temporary values + for imported UoMs """ + values = { + self._rec_name: name, + 'factor': 1 + } + # look for the category based on the english name, i.e. no context on purpose! + # TODO: should find a way to have it translated but not created until actually used + if not self._context.get('default_category_id'): + EnglishUoMCateg = self.env['uom.category'].with_context({}) + misc_category = EnglishUoMCateg.search([('name', '=', 'Unsorted/Imported Units')]) + if misc_category: + values['category_id'] = misc_category.id + else: + values['category_id'] = EnglishUoMCateg.name_create('Unsorted/Imported Units')[0] + new_uom = self.create(values) + return new_uom.id, new_uom.display_name + + def _compute_quantity(self, qty, to_unit, round=True, rounding_method='UP', raise_if_failure=True): + """ Convert the given quantity from the current UoM `self` into a given one + :param qty: the quantity to convert + :param to_unit: the destination UoM record (uom.uom) + :param raise_if_failure: only if the conversion is not possible + - if true, raise an exception if the conversion is not possible (different UoM category), + - otherwise, return the initial quantity + """ + if not self or not qty: + return qty + self.ensure_one() + + if self != to_unit and self.category_id.id != to_unit.category_id.id: + if raise_if_failure: + raise UserError(_( + 'The unit of measure %s defined on the order line doesn\'t belong to the same category as the unit of measure %s defined on the product. Please correct the unit of measure defined on the order line or on the product, they should belong to the same category.', + self.name, to_unit.name)) + else: + return qty + + if self == to_unit: + amount = qty + else: + amount = qty / self.factor + if to_unit: + amount = amount * to_unit.factor + + if to_unit and round: + amount = tools.float_round(amount, precision_rounding=to_unit.rounding, rounding_method=rounding_method) + + return amount + + def _compute_price(self, price, to_unit): + self.ensure_one() + if not self or not price or not to_unit or self == to_unit: + return price + if self.category_id.id != to_unit.category_id.id: + return price + amount = price * self.factor + if to_unit: + amount = amount / to_unit.factor + return amount + + def _filter_protected_uoms(self): + """Verifies self does not contain protected uoms.""" + linked_model_data = self.env['ir.model.data'].sudo().search([ + ('model', '=', self._name), + ('res_id', 'in', self.ids), + ('module', '=', 'uom'), + ('name', 'not in', self._unprotected_uom_xml_ids()), + ]) + if not linked_model_data: + return self.browse() + else: + return self.browse(set(linked_model_data.mapped('res_id'))) diff --git a/uom/security/ir.model.access.csv b/uom/security/ir.model.access.csv new file mode 100644 index 0000000..777ea84 --- /dev/null +++ b/uom/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_uom_category_manager,uom.category.manager,model_uom_category,base.group_system,1,1,1,1 +access_uom_category_user,uom.category.user,model_uom_category,base.group_user,1,0,0,0 +access_uom_uom_manager,uom.uom.manager,model_uom_uom,base.group_system,1,1,1,1 +access_uom_uom_user,uom.uom.user,model_uom_uom,base.group_user,1,0,0,0 diff --git a/uom/security/uom_security.xml b/uom/security/uom_security.xml new file mode 100644 index 0000000..ebfe3e1 --- /dev/null +++ b/uom/security/uom_security.xml @@ -0,0 +1,9 @@ + + + + + Manage Multiple Units of Measure + + + + diff --git a/uom/tests/__init__.py b/uom/tests/__init__.py new file mode 100644 index 0000000..0274013 --- /dev/null +++ b/uom/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_uom diff --git a/uom/tests/common.py b/uom/tests/common.py new file mode 100644 index 0000000..435cf8e --- /dev/null +++ b/uom/tests/common.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import TransactionCase + + +class UomCommon(TransactionCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.uom_gram = cls.env.ref('uom.product_uom_gram') + cls.uom_kgm = cls.env.ref('uom.product_uom_kgm') + cls.uom_ton = cls.env.ref('uom.product_uom_ton') + cls.uom_unit = cls.env.ref('uom.product_uom_unit') + cls.uom_dozen = cls.env.ref('uom.product_uom_dozen') + + cls.group_uom = cls.env.ref('uom.group_uom') + + @classmethod + def _enable_uom(cls): + cls.env.user.groups_id += cls.group_uom + + @classmethod + def _disable_uom(cls): + cls.env.user.groups_id -= cls.group_uom diff --git a/uom/tests/test_uom.py b/uom/tests/test_uom.py new file mode 100644 index 0000000..55260ae --- /dev/null +++ b/uom/tests/test_uom.py @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.exceptions import ValidationError + +from odoo.addons.uom.tests.common import UomCommon + + +class TestUom(UomCommon): + + def test_10_conversion(self): + qty = self.uom_gram._compute_quantity(1020000, self.uom_ton) + self.assertEqual(qty, 1.02, "Converted quantity does not correspond.") + + price = self.uom_gram._compute_price(2, self.uom_ton) + self.assertEqual(price, 2000000.0, "Converted price does not correspond.") + + # If the conversion factor for Dozens (1/12) is not stored with sufficient precision, + # the conversion of 1 Dozen into Units will give e.g. 12.00000000000047 Units + # and the Unit rounding will round that up to 13. + # This is a partial regression test for rev. 311c77bb, which is further improved + # by rev. fa2f7b86. + qty = self.uom_dozen._compute_quantity(1, self.uom_unit) + self.assertEqual(qty, 12.0, "Converted quantity does not correspond.") + + # Regression test for side-effect of commit 311c77bb - converting 1234 Grams + # into Kilograms should work even if grams are rounded to 1. + self.uom_gram.write({'rounding': 1}) + qty = self.uom_gram._compute_quantity(1234, self.uom_kgm) + self.assertEqual(qty, 1.24, "Converted quantity does not correspond.") + + def test_20_rounding(self): + product_uom = self.env['uom.uom'].create({ + 'name': 'Score', + 'factor_inv': 20, + 'uom_type': 'bigger', + 'rounding': 1.0, + 'category_id': self.env.ref('uom.product_uom_categ_unit').id + }) + + qty = self.uom_unit._compute_quantity(2, product_uom) + self.assertEqual(qty, 1, "Converted quantity should be rounded up.") + + def test_30_reference_uniqueness(self): + """ Check the uniqueness of the reference UoM in a category """ + time_category = self.env.ref('uom.product_uom_categ_unit') + + with self.assertRaises(ValidationError): + self.env['uom.uom'].create({ + 'name': 'Second Time Reference', + 'factor_inv': 1, + 'uom_type': 'reference', + 'rounding': 1.0, + 'category_id': time_category.id + }) + + def test_40_custom_uom(self): + """ A custom UoM is an UoM in a category without measurement type. It should behave like a normal UoM """ + category = self.env['uom.category'].create({ + 'name': 'Custom UoM category', + }) + + # at first we can not create a non reference in custom category + with self.assertRaises(ValidationError): + self.env['uom.uom'].create({ + 'name': 'Bigger UoM of my category', + 'factor_inv': 42, + 'uom_type': 'bigger', + 'rounding': 0.5, + 'category_id': category.id + }) + + # create the reference + self.env['uom.uom'].create({ + 'name': 'Reference UoM of my category', + 'factor_inv': 1, + 'uom_type': 'reference', + 'rounding': 1.0, + 'category_id': category.id + }) + + # we can create another UoM now + self.env['uom.uom'].create({ + 'name': 'Bigger UoM of my category', + 'factor_inv': 42, + 'uom_type': 'bigger', + 'rounding': 0.5, + 'category_id': category.id + }) + + # we can not create a second reference in custom category + with self.assertRaises(ValidationError): + self.env['uom.uom'].create({ + 'name': 'Second Time Reference', + 'factor_inv': 1, + 'uom_type': 'reference', + 'rounding': 1.0, + 'category_id': category.id + }) + + def test_50_check_ratio(self): + with self.assertRaises(ValidationError): + self.env['uom.uom'].create({ + 'name': 'Custom UoM', + 'uom_type': 'bigger', + 'ratio': 0, + 'category_id': self.env.ref('uom.product_uom_categ_unit').id + }) diff --git a/uom/views/uom_uom_views.xml b/uom/views/uom_uom_views.xml new file mode 100644 index 0000000..2f83f0a --- /dev/null +++ b/uom/views/uom_uom_views.xml @@ -0,0 +1,155 @@ + + + + uom.uom.tree + uom.uom + + + + + + + + + + + uom.uom.form + uom.uom + +
+ + + + + + + + + + + + + +
+
+
+ + + uom.uom.view.search + uom.uom + + + + + + + + + + + + + + Units of Measure + uom.uom + + + +

+ Add a new unit of measure +

+ You must define a conversion rate between several Units of + Measure within the same category. +

+
+
+ + + uom.category.form + uom.category + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + uom.category.tree + uom.category + + + + + + + + + + uom.category.view.search + uom.category + + + + + + + + + + Units of Measure Categories + uom.category + tree,form + {'allow_to_change_reference': 1} + +

+ Add a new unit of measure category +

+ Units of measure belonging to the same category can be + converted between each others. For example, in the category + 'Time', you will have the following units of measure: + Hours, Days. +

+
+
+
From 0d9e44b6380a71f995056e0da499de67e9e78661 Mon Sep 17 00:00:00 2001 From: ljmwkx <1340053001@qq.com> Date: Mon, 30 Dec 2024 11:37:32 +0800 Subject: [PATCH 6/8] 1 --- stock_barcode/__init__.py | 5 + stock_barcode/__manifest__.py | 51 + stock_barcode/controllers/__init__.py | 4 + stock_barcode/controllers/stock_barcode.py | 356 ++ stock_barcode/data/data.xml | 24 + stock_barcode/data/demo.xml | 119 + stock_barcode/i18n/af.po | 1616 ++++++ stock_barcode/i18n/am.po | 1612 ++++++ stock_barcode/i18n/ar.po | 1810 +++++++ stock_barcode/i18n/az.po | 1617 ++++++ stock_barcode/i18n/bg.po | 1779 +++++++ stock_barcode/i18n/bs.po | 1618 ++++++ stock_barcode/i18n/ca.po | 1834 +++++++ stock_barcode/i18n/cs.po | 1782 +++++++ stock_barcode/i18n/da.po | 1787 +++++++ stock_barcode/i18n/de.po | 1835 +++++++ stock_barcode/i18n/el.po | 1620 ++++++ stock_barcode/i18n/es.po | 1840 +++++++ stock_barcode/i18n/es_419.po | 1842 +++++++ stock_barcode/i18n/es_CL.po | 1615 ++++++ stock_barcode/i18n/et.po | 1825 +++++++ stock_barcode/i18n/eu.po | 1616 ++++++ stock_barcode/i18n/fa.po | 1778 +++++++ stock_barcode/i18n/fi.po | 1826 +++++++ stock_barcode/i18n/fo.po | 1615 ++++++ stock_barcode/i18n/fr.po | 1846 +++++++ stock_barcode/i18n/fr_CA.po | 1615 ++++++ stock_barcode/i18n/gl.po | 1615 ++++++ stock_barcode/i18n/gu.po | 1618 ++++++ stock_barcode/i18n/he.po | 1781 +++++++ stock_barcode/i18n/hr.po | 1627 ++++++ stock_barcode/i18n/hu.po | 1777 +++++++ stock_barcode/i18n/hy.po | 1764 +++++++ stock_barcode/i18n/id.po | 1823 +++++++ stock_barcode/i18n/is.po | 1770 +++++++ stock_barcode/i18n/it.po | 1849 +++++++ stock_barcode/i18n/ja.po | 1783 +++++++ stock_barcode/i18n/ka.po | 1616 ++++++ stock_barcode/i18n/kab.po | 1615 ++++++ stock_barcode/i18n/km.po | 1617 ++++++ stock_barcode/i18n/ko.po | 1784 +++++++ stock_barcode/i18n/lb.po | 1612 ++++++ stock_barcode/i18n/lo.po | 1615 ++++++ stock_barcode/i18n/lt.po | 1784 +++++++ stock_barcode/i18n/lv.po | 1777 +++++++ stock_barcode/i18n/mk.po | 1615 ++++++ stock_barcode/i18n/mn.po | 1626 ++++++ stock_barcode/i18n/my.po | 1615 ++++++ stock_barcode/i18n/nb.po | 1776 +++++++ stock_barcode/i18n/ne.po | 1616 ++++++ stock_barcode/i18n/nl.po | 1834 +++++++ stock_barcode/i18n/nl_BE.po | 1615 ++++++ stock_barcode/i18n/pl.po | 1818 +++++++ stock_barcode/i18n/pt.po | 1773 +++++++ stock_barcode/i18n/pt_BR.po | 1835 +++++++ stock_barcode/i18n/ro.po | 1821 +++++++ stock_barcode/i18n/ru.po | 1839 +++++++ stock_barcode/i18n/sk.po | 1783 +++++++ stock_barcode/i18n/sl.po | 1785 +++++++ stock_barcode/i18n/sq.po | 1615 ++++++ stock_barcode/i18n/sr.po | 1808 +++++++ stock_barcode/i18n/sr@latin.po | 1618 ++++++ stock_barcode/i18n/stock_barcode.pot | 1764 +++++++ stock_barcode/i18n/sv.po | 1817 +++++++ stock_barcode/i18n/th.po | 1808 +++++++ stock_barcode/i18n/tr.po | 1789 +++++++ stock_barcode/i18n/uk.po | 1838 +++++++ stock_barcode/i18n/vi.po | 1829 +++++++ stock_barcode/i18n/zh_CN.po | 1782 +++++++ stock_barcode/i18n/zh_TW.po | 1773 +++++++ stock_barcode/models/__init__.py | 17 + stock_barcode/models/product_packaging.py | 20 + stock_barcode/models/product_product.py | 53 + stock_barcode/models/res_config_settings.py | 20 + stock_barcode/models/res_partner.py | 12 + stock_barcode/models/stock_location.py | 18 + stock_barcode/models/stock_lot.py | 26 + stock_barcode/models/stock_move.py | 49 + stock_barcode/models/stock_move_line.py | 100 + stock_barcode/models/stock_package_type.py | 12 + stock_barcode/models/stock_picking.py | 375 ++ stock_barcode/models/stock_quant.py | 143 + stock_barcode/models/stock_quant_package.py | 40 + stock_barcode/models/stock_scrap.py | 29 + stock_barcode/models/stock_warehouse.py | 24 + stock_barcode/models/uom_uom.py | 16 + stock_barcode/security/ir.model.access.csv | 2 + stock_barcode/static/description/icon.png | Bin 0 -> 535 bytes stock_barcode/static/description/icon.svg | 1 + stock_barcode/static/img/barcode.svg | 20 + stock_barcode/static/img/barcode_white.png | Bin 0 -> 2476 bytes stock_barcode/static/img/barcodes_actions.pdf | Bin 0 -> 7901 bytes stock_barcode/static/img/barcodes_demo.pdf | Bin 0 -> 64016 bytes stock_barcode/static/img/make_barcodes.py | 117 + stock_barcode/static/img/make_barcodes.sh | 194 + stock_barcode/static/src/audio/error.mp3 | Bin 0 -> 33600 bytes stock_barcode/static/src/audio/error.ogg | Bin 0 -> 11657 bytes .../static/src/components/backorder_dialog.js | 26 + .../src/components/backorder_dialog.xml | 39 + .../static/src/components/grouped_line.js | 21 + .../static/src/components/grouped_line.scss | 40 + .../static/src/components/grouped_line.xml | 27 + stock_barcode/static/src/components/line.js | 126 + stock_barcode/static/src/components/line.scss | 129 + stock_barcode/static/src/components/line.xml | 142 + stock_barcode/static/src/components/main.js | 399 ++ stock_barcode/static/src/components/main.scss | 198 + stock_barcode/static/src/components/main.xml | 125 + .../static/src/components/manual_barcode.js | 63 + .../static/src/components/manual_barcode.xml | 26 + .../static/src/components/package_line.js | 34 + .../static/src/components/package_line.xml | 27 + .../kanban/stock_barcode_kanban_controller.js | 57 + .../kanban/stock_barcode_kanban_renderer.js | 37 + .../kanban/stock_barcode_kanban_renderer.xml | 14 + .../src/kanban/stock_barcode_kanban_view.js | 12 + .../static/src/lazy_barcode_cache.js | 228 + stock_barcode/static/src/main_menu.js | 86 + stock_barcode/static/src/main_menu.xml | 57 + .../static/src/models/barcode_model.js | 1526 ++++++ .../src/models/barcode_picking_model.js | 1671 ++++++ .../static/src/models/barcode_quant_model.js | 650 +++ stock_barcode/static/src/scss/form_view.scss | 7 + .../static/src/scss/stock_barcode.dark.scss | 15 + .../static/src/scss/stock_barcode.scss | 146 + stock_barcode/static/src/widgets/digipad.js | 120 + stock_barcode/static/src/widgets/digipad.scss | 46 + stock_barcode/static/src/widgets/digipad.xml | 36 + .../static/src/widgets/image_preview.js | 35 + .../static/src/widgets/image_preview.xml | 26 + .../src/widgets/set_reserved_qty_button.js | 42 + .../src/widgets/set_reserved_qty_button.scss | 5 + .../src/widgets/set_reserved_qty_button.xml | 14 + .../tests/tours/running_tour_action_helper.js | 10 + .../tests/tours/tour_helper_stock_barcode.js | 327 ++ .../static/tests/tours/tour_step_utils.js | 38 + .../tour_test_barcode_flows_inventory.js | 1003 ++++ .../tours/tour_test_barcode_flows_picking.js | 4516 +++++++++++++++++ .../tests/tours/tour_test_barcode_gs1.js | 1422 ++++++ .../stock_mobile_picking_barcode_tests.js | 73 + .../units/stock_picking_barcode_tests.js | 63 + stock_barcode/tests/__init__.py | 7 + stock_barcode/tests/test_barcode.py | 246 + .../tests/test_barcode_client_action.py | 117 + .../test_barcode_client_action_inventory.py | 559 ++ .../test_barcode_client_action_picking.py | 3426 +++++++++++++ stock_barcode/tests/test_controller.py | 70 + .../views/res_config_settings_views.xml | 38 + stock_barcode/views/stock_barcode_views.xml | 132 + stock_barcode/views/stock_inventory_views.xml | 94 + stock_barcode/views/stock_location_views.xml | 13 + stock_barcode/views/stock_move_line_views.xml | 207 + stock_barcode/views/stock_picking_views.xml | 164 + stock_barcode/views/stock_scrap_views.xml | 34 + stock_barcode/wizard/__init__.py | 2 + .../wizard/stock_backorder_confirmation.py | 16 + .../stock_backorder_confirmation_views.xml | 28 + .../wizard/stock_barcode_cancel_operation.py | 16 + .../wizard/stock_barcode_cancel_operation.xml | 22 + web_tour/__init__.py | 4 + web_tour/__manifest__.py | 33 + web_tour/i18n/ar.po | 187 + web_tour/i18n/az.po | 178 + web_tour/i18n/bg.po | 194 + web_tour/i18n/bs.po | 178 + web_tour/i18n/ca.po | 196 + web_tour/i18n/cs.po | 190 + web_tour/i18n/da.po | 189 + web_tour/i18n/de.po | 191 + web_tour/i18n/el.po | 178 + web_tour/i18n/es.po | 193 + web_tour/i18n/es_419.po | 193 + web_tour/i18n/et.po | 196 + web_tour/i18n/fa.po | 192 + web_tour/i18n/fi.po | 197 + web_tour/i18n/fr.po | 192 + web_tour/i18n/gu.po | 177 + web_tour/i18n/he.po | 192 + web_tour/i18n/hr.po | 182 + web_tour/i18n/hu.po | 192 + web_tour/i18n/hy.po | 183 + web_tour/i18n/id.po | 189 + web_tour/i18n/is.po | 187 + web_tour/i18n/it.po | 189 + web_tour/i18n/ja.po | 188 + web_tour/i18n/km.po | 176 + web_tour/i18n/ko.po | 188 + web_tour/i18n/lb.po | 173 + web_tour/i18n/lt.po | 194 + web_tour/i18n/lv.po | 191 + web_tour/i18n/mn.po | 181 + web_tour/i18n/nb.po | 190 + web_tour/i18n/nl.po | 189 + web_tour/i18n/pl.po | 189 + web_tour/i18n/pt.po | 187 + web_tour/i18n/pt_BR.po | 191 + web_tour/i18n/ro.po | 191 + web_tour/i18n/ru.po | 194 + web_tour/i18n/sk.po | 189 + web_tour/i18n/sl.po | 193 + web_tour/i18n/sr.po | 191 + web_tour/i18n/sr@latin.po | 177 + web_tour/i18n/sv.po | 194 + web_tour/i18n/th.po | 188 + web_tour/i18n/tr.po | 196 + web_tour/i18n/uk.po | 189 + web_tour/i18n/vi.po | 190 + web_tour/i18n/web_tour.pot | 183 + web_tour/i18n/zh_CN.po | 188 + web_tour/i18n/zh_TW.po | 188 + web_tour/models/__init__.py | 5 + web_tour/models/ir_http.py | 16 + web_tour/models/tour.py | 30 + web_tour/security/ir.model.access.csv | 3 + web_tour/security/ir.rule.csv | 2 + web_tour/static/src/debug/debug_manager.js | 49 + .../static/src/debug/tour_dialog_component.js | 43 + .../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 ++ .../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 +++ web_tour/static/tests/debug_manager_tests.js | 87 + web_tour/static/tests/tour_service_tests.js | 742 +++ web_tour/views/tour_views.xml | 46 + 229 files changed, 144211 insertions(+) create mode 100644 stock_barcode/__init__.py create mode 100644 stock_barcode/__manifest__.py create mode 100644 stock_barcode/controllers/__init__.py create mode 100644 stock_barcode/controllers/stock_barcode.py create mode 100644 stock_barcode/data/data.xml create mode 100644 stock_barcode/data/demo.xml create mode 100644 stock_barcode/i18n/af.po create mode 100644 stock_barcode/i18n/am.po create mode 100644 stock_barcode/i18n/ar.po create mode 100644 stock_barcode/i18n/az.po create mode 100644 stock_barcode/i18n/bg.po create mode 100644 stock_barcode/i18n/bs.po create mode 100644 stock_barcode/i18n/ca.po create mode 100644 stock_barcode/i18n/cs.po create mode 100644 stock_barcode/i18n/da.po create mode 100644 stock_barcode/i18n/de.po create mode 100644 stock_barcode/i18n/el.po create mode 100644 stock_barcode/i18n/es.po create mode 100644 stock_barcode/i18n/es_419.po create mode 100644 stock_barcode/i18n/es_CL.po create mode 100644 stock_barcode/i18n/et.po create mode 100644 stock_barcode/i18n/eu.po create mode 100644 stock_barcode/i18n/fa.po create mode 100644 stock_barcode/i18n/fi.po create mode 100644 stock_barcode/i18n/fo.po create mode 100644 stock_barcode/i18n/fr.po create mode 100644 stock_barcode/i18n/fr_CA.po create mode 100644 stock_barcode/i18n/gl.po create mode 100644 stock_barcode/i18n/gu.po create mode 100644 stock_barcode/i18n/he.po create mode 100644 stock_barcode/i18n/hr.po create mode 100644 stock_barcode/i18n/hu.po create mode 100644 stock_barcode/i18n/hy.po create mode 100644 stock_barcode/i18n/id.po create mode 100644 stock_barcode/i18n/is.po create mode 100644 stock_barcode/i18n/it.po create mode 100644 stock_barcode/i18n/ja.po create mode 100644 stock_barcode/i18n/ka.po create mode 100644 stock_barcode/i18n/kab.po create mode 100644 stock_barcode/i18n/km.po create mode 100644 stock_barcode/i18n/ko.po create mode 100644 stock_barcode/i18n/lb.po create mode 100644 stock_barcode/i18n/lo.po create mode 100644 stock_barcode/i18n/lt.po create mode 100644 stock_barcode/i18n/lv.po create mode 100644 stock_barcode/i18n/mk.po create mode 100644 stock_barcode/i18n/mn.po create mode 100644 stock_barcode/i18n/my.po create mode 100644 stock_barcode/i18n/nb.po create mode 100644 stock_barcode/i18n/ne.po create mode 100644 stock_barcode/i18n/nl.po create mode 100644 stock_barcode/i18n/nl_BE.po create mode 100644 stock_barcode/i18n/pl.po create mode 100644 stock_barcode/i18n/pt.po create mode 100644 stock_barcode/i18n/pt_BR.po create mode 100644 stock_barcode/i18n/ro.po create mode 100644 stock_barcode/i18n/ru.po create mode 100644 stock_barcode/i18n/sk.po create mode 100644 stock_barcode/i18n/sl.po create mode 100644 stock_barcode/i18n/sq.po create mode 100644 stock_barcode/i18n/sr.po create mode 100644 stock_barcode/i18n/sr@latin.po create mode 100644 stock_barcode/i18n/stock_barcode.pot create mode 100644 stock_barcode/i18n/sv.po create mode 100644 stock_barcode/i18n/th.po create mode 100644 stock_barcode/i18n/tr.po create mode 100644 stock_barcode/i18n/uk.po create mode 100644 stock_barcode/i18n/vi.po create mode 100644 stock_barcode/i18n/zh_CN.po create mode 100644 stock_barcode/i18n/zh_TW.po create mode 100644 stock_barcode/models/__init__.py create mode 100644 stock_barcode/models/product_packaging.py create mode 100644 stock_barcode/models/product_product.py create mode 100644 stock_barcode/models/res_config_settings.py create mode 100644 stock_barcode/models/res_partner.py create mode 100644 stock_barcode/models/stock_location.py create mode 100644 stock_barcode/models/stock_lot.py create mode 100644 stock_barcode/models/stock_move.py create mode 100644 stock_barcode/models/stock_move_line.py create mode 100644 stock_barcode/models/stock_package_type.py create mode 100644 stock_barcode/models/stock_picking.py create mode 100644 stock_barcode/models/stock_quant.py create mode 100644 stock_barcode/models/stock_quant_package.py create mode 100644 stock_barcode/models/stock_scrap.py create mode 100644 stock_barcode/models/stock_warehouse.py create mode 100644 stock_barcode/models/uom_uom.py create mode 100644 stock_barcode/security/ir.model.access.csv create mode 100644 stock_barcode/static/description/icon.png create mode 100644 stock_barcode/static/description/icon.svg create mode 100644 stock_barcode/static/img/barcode.svg create mode 100644 stock_barcode/static/img/barcode_white.png create mode 100644 stock_barcode/static/img/barcodes_actions.pdf create mode 100644 stock_barcode/static/img/barcodes_demo.pdf create mode 100644 stock_barcode/static/img/make_barcodes.py create mode 100644 stock_barcode/static/img/make_barcodes.sh create mode 100644 stock_barcode/static/src/audio/error.mp3 create mode 100644 stock_barcode/static/src/audio/error.ogg create mode 100644 stock_barcode/static/src/components/backorder_dialog.js create mode 100644 stock_barcode/static/src/components/backorder_dialog.xml create mode 100644 stock_barcode/static/src/components/grouped_line.js create mode 100644 stock_barcode/static/src/components/grouped_line.scss create mode 100644 stock_barcode/static/src/components/grouped_line.xml create mode 100644 stock_barcode/static/src/components/line.js create mode 100644 stock_barcode/static/src/components/line.scss create mode 100644 stock_barcode/static/src/components/line.xml create mode 100644 stock_barcode/static/src/components/main.js create mode 100644 stock_barcode/static/src/components/main.scss create mode 100644 stock_barcode/static/src/components/main.xml create mode 100644 stock_barcode/static/src/components/manual_barcode.js create mode 100644 stock_barcode/static/src/components/manual_barcode.xml create mode 100644 stock_barcode/static/src/components/package_line.js create mode 100644 stock_barcode/static/src/components/package_line.xml create mode 100644 stock_barcode/static/src/kanban/stock_barcode_kanban_controller.js create mode 100644 stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js create mode 100644 stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml create mode 100644 stock_barcode/static/src/kanban/stock_barcode_kanban_view.js create mode 100644 stock_barcode/static/src/lazy_barcode_cache.js create mode 100644 stock_barcode/static/src/main_menu.js create mode 100644 stock_barcode/static/src/main_menu.xml create mode 100644 stock_barcode/static/src/models/barcode_model.js create mode 100644 stock_barcode/static/src/models/barcode_picking_model.js create mode 100644 stock_barcode/static/src/models/barcode_quant_model.js create mode 100644 stock_barcode/static/src/scss/form_view.scss create mode 100644 stock_barcode/static/src/scss/stock_barcode.dark.scss create mode 100644 stock_barcode/static/src/scss/stock_barcode.scss create mode 100644 stock_barcode/static/src/widgets/digipad.js create mode 100644 stock_barcode/static/src/widgets/digipad.scss create mode 100644 stock_barcode/static/src/widgets/digipad.xml create mode 100644 stock_barcode/static/src/widgets/image_preview.js create mode 100644 stock_barcode/static/src/widgets/image_preview.xml create mode 100644 stock_barcode/static/src/widgets/set_reserved_qty_button.js create mode 100644 stock_barcode/static/src/widgets/set_reserved_qty_button.scss create mode 100644 stock_barcode/static/src/widgets/set_reserved_qty_button.xml create mode 100644 stock_barcode/static/tests/tours/running_tour_action_helper.js create mode 100644 stock_barcode/static/tests/tours/tour_helper_stock_barcode.js create mode 100644 stock_barcode/static/tests/tours/tour_step_utils.js create mode 100644 stock_barcode/static/tests/tours/tour_test_barcode_flows_inventory.js create mode 100644 stock_barcode/static/tests/tours/tour_test_barcode_flows_picking.js create mode 100644 stock_barcode/static/tests/tours/tour_test_barcode_gs1.js create mode 100644 stock_barcode/static/tests/units/stock_mobile_picking_barcode_tests.js create mode 100644 stock_barcode/static/tests/units/stock_picking_barcode_tests.js create mode 100644 stock_barcode/tests/__init__.py create mode 100644 stock_barcode/tests/test_barcode.py create mode 100644 stock_barcode/tests/test_barcode_client_action.py create mode 100644 stock_barcode/tests/test_barcode_client_action_inventory.py create mode 100644 stock_barcode/tests/test_barcode_client_action_picking.py create mode 100644 stock_barcode/tests/test_controller.py create mode 100644 stock_barcode/views/res_config_settings_views.xml create mode 100644 stock_barcode/views/stock_barcode_views.xml create mode 100644 stock_barcode/views/stock_inventory_views.xml create mode 100644 stock_barcode/views/stock_location_views.xml create mode 100644 stock_barcode/views/stock_move_line_views.xml create mode 100644 stock_barcode/views/stock_picking_views.xml create mode 100644 stock_barcode/views/stock_scrap_views.xml create mode 100644 stock_barcode/wizard/__init__.py create mode 100644 stock_barcode/wizard/stock_backorder_confirmation.py create mode 100644 stock_barcode/wizard/stock_backorder_confirmation_views.xml create mode 100644 stock_barcode/wizard/stock_barcode_cancel_operation.py create mode 100644 stock_barcode/wizard/stock_barcode_cancel_operation.xml create mode 100644 web_tour/__init__.py create mode 100644 web_tour/__manifest__.py create mode 100644 web_tour/i18n/ar.po create mode 100644 web_tour/i18n/az.po create mode 100644 web_tour/i18n/bg.po create mode 100644 web_tour/i18n/bs.po create mode 100644 web_tour/i18n/ca.po create mode 100644 web_tour/i18n/cs.po create mode 100644 web_tour/i18n/da.po create mode 100644 web_tour/i18n/de.po create mode 100644 web_tour/i18n/el.po create mode 100644 web_tour/i18n/es.po create mode 100644 web_tour/i18n/es_419.po create mode 100644 web_tour/i18n/et.po create mode 100644 web_tour/i18n/fa.po create mode 100644 web_tour/i18n/fi.po create mode 100644 web_tour/i18n/fr.po create mode 100644 web_tour/i18n/gu.po create mode 100644 web_tour/i18n/he.po create mode 100644 web_tour/i18n/hr.po create mode 100644 web_tour/i18n/hu.po create mode 100644 web_tour/i18n/hy.po create mode 100644 web_tour/i18n/id.po create mode 100644 web_tour/i18n/is.po create mode 100644 web_tour/i18n/it.po create mode 100644 web_tour/i18n/ja.po create mode 100644 web_tour/i18n/km.po create mode 100644 web_tour/i18n/ko.po create mode 100644 web_tour/i18n/lb.po create mode 100644 web_tour/i18n/lt.po create mode 100644 web_tour/i18n/lv.po create mode 100644 web_tour/i18n/mn.po create mode 100644 web_tour/i18n/nb.po create mode 100644 web_tour/i18n/nl.po create mode 100644 web_tour/i18n/pl.po create mode 100644 web_tour/i18n/pt.po create mode 100644 web_tour/i18n/pt_BR.po create mode 100644 web_tour/i18n/ro.po create mode 100644 web_tour/i18n/ru.po create mode 100644 web_tour/i18n/sk.po create mode 100644 web_tour/i18n/sl.po create mode 100644 web_tour/i18n/sr.po create mode 100644 web_tour/i18n/sr@latin.po create mode 100644 web_tour/i18n/sv.po create mode 100644 web_tour/i18n/th.po create mode 100644 web_tour/i18n/tr.po create mode 100644 web_tour/i18n/uk.po create mode 100644 web_tour/i18n/vi.po create mode 100644 web_tour/i18n/web_tour.pot create mode 100644 web_tour/i18n/zh_CN.po create mode 100644 web_tour/i18n/zh_TW.po create mode 100644 web_tour/models/__init__.py create mode 100644 web_tour/models/ir_http.py create mode 100644 web_tour/models/tour.py create mode 100644 web_tour/security/ir.model.access.csv create mode 100644 web_tour/security/ir.rule.csv create mode 100644 web_tour/static/src/debug/debug_manager.js create mode 100644 web_tour/static/src/debug/tour_dialog_component.js create mode 100644 web_tour/static/src/debug/tour_dialog_component.xml create mode 100644 web_tour/static/src/tour_pointer/tour_pointer.js create mode 100644 web_tour/static/src/tour_pointer/tour_pointer.scss create mode 100644 web_tour/static/src/tour_pointer/tour_pointer.xml create mode 100644 web_tour/static/src/tour_service/tour_compilers.js create mode 100644 web_tour/static/src/tour_service/tour_pointer_state.js create mode 100644 web_tour/static/src/tour_service/tour_service.js create mode 100644 web_tour/static/src/tour_service/tour_state.js create mode 100644 web_tour/static/src/tour_service/tour_utils.js create mode 100644 web_tour/static/tests/debug_manager_tests.js create mode 100644 web_tour/static/tests/tour_service_tests.js create mode 100644 web_tour/views/tour_views.xml diff --git a/stock_barcode/__init__.py b/stock_barcode/__init__.py new file mode 100644 index 0000000..bbc5580 --- /dev/null +++ b/stock_barcode/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- + +from . import controllers +from . import models +from . import wizard diff --git a/stock_barcode/__manifest__.py b/stock_barcode/__manifest__.py new file mode 100644 index 0000000..4e3a01f --- /dev/null +++ b/stock_barcode/__manifest__.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- + +{ + 'name': "Barcode", + 'summary': "Use barcode scanners to process logistics operations", + 'description': """ +This module enables the barcode scanning feature for the warehouse management system. + """, + 'category': 'Inventory/Inventory', + 'sequence': 255, + 'version': '1.0', + 'depends': ['stock', 'web_tour', 'web_mobile'], + 'data': [ + 'security/ir.model.access.csv', + 'views/stock_inventory_views.xml', + 'views/stock_picking_views.xml', + 'views/stock_move_line_views.xml', + 'views/stock_barcode_views.xml', + 'views/res_config_settings_views.xml', + 'views/stock_scrap_views.xml', + 'views/stock_location_views.xml', + 'wizard/stock_barcode_cancel_operation.xml', + 'wizard/stock_backorder_confirmation_views.xml', + 'data/data.xml', + ], + 'demo': [ + 'data/demo.xml', + ], + 'installable': True, + 'application': True, + 'license': 'OEEL-1', + 'assets': { + 'web.assets_backend': [ + 'stock_barcode/static/src/**/*.js', + 'stock_barcode/static/src/**/*.scss', + 'stock_barcode/static/src/**/*.xml', + + # Don't include dark mode files in light mode + ('remove', 'stock_barcode/static/src/**/*.dark.scss'), + ], + "web.assets_web_dark": [ + 'stock_barcode/static/src/**/*.dark.scss', + ], + 'web.qunit_suite_tests': [ + 'stock_barcode/static/tests/units/**/*', + ], + 'web.assets_tests': [ + 'stock_barcode/static/tests/tours/**/*', + ], + } +} diff --git a/stock_barcode/controllers/__init__.py b/stock_barcode/controllers/__init__.py new file mode 100644 index 0000000..295f949 --- /dev/null +++ b/stock_barcode/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import stock_barcode diff --git a/stock_barcode/controllers/stock_barcode.py b/stock_barcode/controllers/stock_barcode.py new file mode 100644 index 0000000..8003027 --- /dev/null +++ b/stock_barcode/controllers/stock_barcode.py @@ -0,0 +1,356 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from collections import defaultdict + +from odoo import http, _ +from odoo.http import request +from odoo.exceptions import UserError +from odoo.osv import expression +from odoo.tools import pdf, split_every +from odoo.tools.misc import file_open + + +class StockBarcodeController(http.Controller): + + @http.route('/stock_barcode/scan_from_main_menu', type='json', auth='user') + def main_menu(self, barcode): + """ Receive a barcode scanned from the main menu and return the appropriate + action (open an existing / new picking) or warning. + """ + barcode_type = None + nomenclature = request.env.company.nomenclature_id + if nomenclature.is_gs1_nomenclature: + parsed_results = nomenclature.parse_barcode(barcode) + if parsed_results: + # search with the last feasible rule + for result in parsed_results[::-1]: + if result['rule'].type in ['product', 'package', 'location', 'dest_location']: + barcode_type = result['rule'].type + break + + if not barcode_type: + ret_open_picking = self._try_open_picking(barcode) + if ret_open_picking: + return ret_open_picking + + ret_open_picking_type = self._try_open_picking_type(barcode) + if ret_open_picking_type: + return ret_open_picking_type + + if request.env.user.has_group('stock.group_stock_multi_locations') and \ + (not barcode_type or barcode_type in ['location', 'dest_location']): + ret_new_internal_picking = self._try_new_internal_picking(barcode) + if ret_new_internal_picking: + return ret_new_internal_picking + + if not barcode_type or barcode_type == 'product': + ret_open_product_location = self._try_open_product_location(barcode) + if ret_open_product_location: + return ret_open_product_location + + if not barcode_type or barcode_type == 'lot': + ret_open_lot_location = self._try_open_lot_location(barcode) + if ret_open_lot_location: + return ret_open_lot_location + + if request.env.user.has_group('stock.group_tracking_lot') and \ + (not barcode_type or barcode_type == 'package'): + ret_open_package = self._try_open_package(barcode) + if ret_open_package: + return ret_open_package + + if request.env.user.has_group('stock.group_stock_multi_locations'): + return {'warning': _('No picking or location or product corresponding to barcode %(barcode)s', barcode=barcode)} + else: + return {'warning': _('No picking or product corresponding to barcode %(barcode)s', barcode=barcode)} + + @http.route('/stock_barcode/save_barcode_data', type='json', auth='user') + def save_barcode_data(self, model, res_id, write_field, write_vals): + if not res_id: + return request.env[model].barcode_write(write_vals) + target_record = request.env[model].browse(res_id) + target_record.write({write_field: write_vals}) + return target_record._get_stock_barcode_data() + + @http.route('/stock_barcode/get_barcode_data', type='json', auth='user') + def get_barcode_data(self, model, res_id): + """ Returns a dict with values used by the barcode client: + { + "data": {'records' : {'model': [{}, ... ]}, 'other_infos':...}, _get_barcode_data_prefetch + "groups": , self._get_groups_data + } + """ + if not res_id: + target_record = request.env[model].with_context(allowed_company_ids=self._get_allowed_company_ids()) + else: + target_record = request.env[model].browse(res_id).with_context(allowed_company_ids=self._get_allowed_company_ids()) + data = target_record._get_stock_barcode_data() + data['records'].update(self._get_barcode_nomenclature()) + data['precision'] = request.env['decimal.precision'].precision_get('Product Unit of Measure') + mute_sound = request.env['ir.config_parameter'].sudo().get_param('stock_barcode.mute_sound_notifications') + config = {'play_sound': bool(not mute_sound or mute_sound == "False")} + return { + 'data': data, + 'groups': self._get_groups_data(), + 'config': config, + } + + @http.route('/stock_barcode/get_specific_barcode_data', type='json', auth='user') + def get_specific_barcode_data(self, barcode, model_name, domains_by_model=False): + nomenclature = request.env.company.nomenclature_id + # Adapts the search parameters for GS1 specifications. + operator = '=' + limit = None if nomenclature.is_gs1_nomenclature else 1 + if nomenclature.is_gs1_nomenclature: + try: + # If barcode is digits only, cut off the padding to keep the original barcode only. + barcode = str(int(barcode)) + operator = 'ilike' + except ValueError: + pass # Barcode isn't digits only. + + domains_by_model = domains_by_model or {} + barcode_field_by_model = self._get_barcode_field_by_model() + result = defaultdict(list) + model_names = model_name and [model_name] or list(barcode_field_by_model.keys()) + universal_domain = domains_by_model.get('all') + for model in model_names: + domain = [ + (barcode_field_by_model[model], operator, barcode), + ] + domain_for_this_model = domains_by_model.get(model) + if domain_for_this_model: + domain = expression.AND([domain, domain_for_this_model]) + if universal_domain: + domain = expression.AND([domain, universal_domain]) + record = request.env[model].with_context(display_default_code=False).search(domain, limit=limit) + if record: + result[model] += record.read(request.env[model]._get_fields_stock_barcode(), load=False) + if hasattr(record, '_get_stock_barcode_specific_data'): + additional_result = record._get_stock_barcode_specific_data() + for key in additional_result: + result[key] += additional_result[key] + return result + + @http.route('/stock_barcode/rid_of_message_demo_barcodes', type='json', auth='user') + def rid_of_message_demo_barcodes(self, **kw): + """ Edit the main_menu client action so that it doesn't display the 'print demo barcodes sheet' message """ + if not request.env.user.has_group('stock.group_stock_user'): + return request.not_found() + action = request.env.ref('stock_barcode.stock_barcode_action_main_menu') + action and action.sudo().write({'params': {'message_demo_barcodes': False}}) + + @http.route('/stock_barcode/print_inventory_commands', type='http', auth='user') + def print_inventory_commands(self, barcode_type=False): + if not request.env.user.has_group('stock.group_stock_user'): + return request.not_found() + + # make sure we use the selected company if possible + allowed_company_ids = self._get_allowed_company_ids() + + # same domain conditions for picking types and locations + domain = self._get_picking_type_domain(barcode_type, allowed_company_ids) + + # get fixed command barcodes + barcode_pdfs = self._get_barcode_pdfs(barcode_type, domain) + + if not barcode_pdfs: + raise UserError(_("Barcodes are not available.")) + merged_pdf = pdf.merge_pdf(barcode_pdfs) + + pdfhttpheaders = [ + ('Content-Type', 'application/pdf'), + ('Content-Length', len(merged_pdf)) + ] + + return request.make_response(merged_pdf, headers=pdfhttpheaders) + + def _try_open_lot_location(self, barcode): + """ If barcode represent a lot, open a list/kanban view to show all + the locations of this lot. + """ + result = request.env['stock.lot'].search_read([ + ('name', '=', barcode), + ], ['id', 'display_name'], limit=1) + if result: + tree_view_id = request.env.ref('stock.view_stock_quant_tree').id + kanban_view_id = request.env.ref('stock_barcode.stock_quant_barcode_kanban_2').id + return { + 'action': { + 'name': result[0]['display_name'], + 'res_model': 'stock.quant', + 'views': [(tree_view_id, 'list'), (kanban_view_id, 'kanban')], + 'type': 'ir.actions.act_window', + 'domain': [('lot_id', '=', result[0]['id'])], + 'context': { + 'search_default_internal_loc': True, + }, + }, + } + + def _try_open_product_location(self, barcode): + """ If barcode represent a product, open a list/kanban view to show all + the locations of this product. + """ + result = request.env['product.product'].search_read([ + ('barcode', '=', barcode), + ], ['id', 'display_name'], limit=1) + if result: + tree_view_id = request.env.ref('stock.view_stock_quant_tree').id + kanban_view_id = request.env.ref('stock_barcode.stock_quant_barcode_kanban_2').id + return { + 'action': { + 'name': result[0]['display_name'], + 'res_model': 'stock.quant', + 'views': [(tree_view_id, 'list'), (kanban_view_id, 'kanban')], + 'type': 'ir.actions.act_window', + 'domain': [('product_id', '=', result[0]['id'])], + 'context': { + 'search_default_internal_loc': True, + }, + } + } + + def _try_open_picking_type(self, barcode): + """ If barcode represent a picking type, open a new + picking with this type + """ + picking_type = request.env['stock.picking.type'].search([ + ('barcode', '=', barcode), + ('company_id', 'in', [False, *self._get_allowed_company_ids()]), + ], limit=1) + if picking_type: + picking = request.env['stock.picking']._create_new_picking(picking_type) + return picking._get_client_action() + return False + + def _try_open_picking(self, barcode): + """ If barcode represents a picking, open it + """ + corresponding_picking = request.env['stock.picking'].search([ + ('name', '=', barcode), + ], limit=1) + if corresponding_picking: + action = corresponding_picking.action_open_picking_client_action() + return {'action': action} + return False + + def _try_open_package(self, barcode): + """ If barcode represents a package, open it. + """ + package = request.env['stock.quant.package'].search([('name', '=', barcode)], limit=1) + if package: + view_id = request.env.ref('stock.view_quant_package_form').id + return { + 'action': { + 'name': 'Open package', + 'res_model': 'stock.quant.package', + 'views': [(view_id, 'form')], + 'type': 'ir.actions.act_window', + 'res_id': package.id, + 'context': {'active_id': package.id} + } + } + return False + + def _try_new_internal_picking(self, barcode): + """ If barcode represents a location, open a new picking from this location + """ + corresponding_location = request.env['stock.location'].search([ + ('barcode', '=', barcode), + ('usage', '=', 'internal') + ], limit=1) + if corresponding_location: + internal_picking_type = request.env['stock.picking.type'].search([('code', '=', 'internal')]) + warehouse = corresponding_location.warehouse_id + if warehouse: + internal_picking_type = internal_picking_type.filtered(lambda r: r.warehouse_id == warehouse) + dest_loc = corresponding_location + while dest_loc.location_id and dest_loc.location_id.usage == 'internal': + dest_loc = dest_loc.location_id + if internal_picking_type: + # Create and confirm an internal picking + picking = request.env['stock.picking'].create({ + 'picking_type_id': internal_picking_type[0].id, + 'user_id': False, + 'location_id': corresponding_location.id, + 'location_dest_id': dest_loc.id, + }) + picking.action_confirm() + + return picking._get_client_action() + else: + return {'warning': _('No internal operation type. Please configure one in warehouse settings.')} + return False + + def _get_allowed_company_ids(self): + """ Return the allowed_company_ids based on cookies. + + Currently request.env.company returns the current user's company when called within a controller + rather than the selected company in the company switcher and request.env.companies lists the + current user's allowed companies rather than the selected companies. + + :returns: List of active companies. The first company id in the returned list is the selected company. + """ + cids = request.httprequest.cookies.get('cids', str(request.env.user.company_id.id)) + return [int(cid) for cid in cids.split(',')] + + def _get_picking_type_domain(self, barcode_type, allowed_company_ids): + return [ + ('active', '=', 'True'), + ('barcode', '!=', ''), + ('company_id', 'in', allowed_company_ids) + ] + + def _get_barcode_pdfs(self, barcode_type, domain): + barcode_pdfs = [] + if barcode_type == 'barcode_commands_and_operation_types': + with file_open('stock_barcode/static/img/barcodes_actions.pdf', "rb") as commands_file: + barcode_pdfs.append(commands_file.read()) + + if 'operation_types' in barcode_type: + # get picking types barcodes + picking_type_ids = request.env['stock.picking.type'].search(domain) + for picking_type_batch in split_every(112, picking_type_ids.ids): + picking_types_pdf, _content_type = request.env['ir.actions.report']._render_qweb_pdf('stock.action_report_picking_type_label', picking_type_batch) + if picking_types_pdf: + barcode_pdfs.append(picking_types_pdf) + + # get locations barcodes + if barcode_type == 'locations' and request.env.user.has_group('stock.group_stock_multi_locations'): + locations_ids = request.env['stock.location'].search(domain) + for location_ids_batch in split_every(112, locations_ids.ids): + locations_pdf, _content_type = request.env['ir.actions.report']._render_qweb_pdf('stock.action_report_location_barcode', location_ids_batch) + if locations_pdf: + barcode_pdfs.append(locations_pdf) + return barcode_pdfs + + def _get_groups_data(self): + return { + 'group_stock_multi_locations': request.env.user.has_group('stock.group_stock_multi_locations'), + 'group_tracking_owner': request.env.user.has_group('stock.group_tracking_owner'), + 'group_tracking_lot': request.env.user.has_group('stock.group_tracking_lot'), + 'group_production_lot': request.env.user.has_group('stock.group_production_lot'), + 'group_uom': request.env.user.has_group('uom.group_uom'), + 'group_stock_packaging': request.env.user.has_group('product.group_stock_packaging'), + } + + def _get_barcode_nomenclature(self): + company = request.env['res.company'].browse(self._get_allowed_company_ids()[0]) + nomenclature = company.nomenclature_id + return { + "barcode.nomenclature": nomenclature.read(load=False), + "barcode.rule": nomenclature.rule_ids.read(load=False) + } + + def _get_barcode_field_by_model(self): + list_model = [ + 'stock.location', + 'product.product', + 'product.packaging', + 'stock.picking', + 'stock.lot', + 'stock.quant.package', + ] + return {model: request.env[model]._barcode_field for model in list_model if hasattr(request.env[model], '_barcode_field')} diff --git a/stock_barcode/data/data.xml b/stock_barcode/data/data.xml new file mode 100644 index 0000000..f147438 --- /dev/null +++ b/stock_barcode/data/data.xml @@ -0,0 +1,24 @@ + + + Barcode Picking Client Action + stock_barcode_client_action + stock.picking + + + + Barcode Inventory Client Action + stock_barcode_client_action + stock.quant + + + + + + + + + + diff --git a/stock_barcode/data/demo.xml b/stock_barcode/data/demo.xml new file mode 100644 index 0000000..49238f7 --- /dev/null +++ b/stock_barcode/data/demo.xml @@ -0,0 +1,119 @@ + + + + + + 601647855638 + + + 601647855631 + + + 601647855634 + + + 601647855635 + + + 601647855636 + + + 601647855637 + + + 601647855640 + + + 601647855641 + + + 601647855642 + + + 601647855643 + + + 601647855644 + + + 601647855645 + + + 601647855648 + + + 601647855649 + + + 601647855650 + + + 601647855651 + + + 601647855652 + + + 601647855653 + + + + + + 0000000000017 + + + + + + + + + FURN_5800 + Cable Management Box + product + 0.01 + + 120.0 + 90.0 + 1.1 + lot + + + + 06016478556677 + + + Customized Cabinet (USA) + + 175.50 + 200 + product + 2 + + + E-COM99 + + 06016478559999 + + + Customized Cabinet (Metric) + + 190.50 + 210 + product + 2 + + + E-COM98 + + 06016478559982 + + + + 06016478556332 + + + + + diff --git a/stock_barcode/i18n/af.po b/stock_barcode/i18n/af.po new file mode 100644 index 0000000..600f6c7 --- /dev/null +++ b/stock_barcode/i18n/af.po @@ -0,0 +1,1616 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Martin Trigaux, 2022\n" +"Language-Team: Afrikaans (https://www.transifex.com/odoo/teams/41243/af/)\n" +"Language: af\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Gekanselleer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontak" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Geskep deur" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Geskep op" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Vertoningsnaam" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Laas Opgedateer deur" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Laas Opgedateer op" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Eienaar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produk" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/am.po b/stock_barcode/i18n/am.po new file mode 100644 index 0000000..7eeb379 --- /dev/null +++ b/stock_barcode/i18n/am.po @@ -0,0 +1,1612 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Language-Team: Amharic (https://app.transifex.com/odoo/teams/41243/am/)\n" +"Language: am\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "መሰረዝ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "ፈጣሪው" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "የተፈጠረበት" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "እቃ" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/ar.po b/stock_barcode/i18n/ar.po new file mode 100644 index 0000000..d1a9766 --- /dev/null +++ b/stock_barcode/i18n/ar.po @@ -0,0 +1,1810 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2023 +# Malaz Abuidris , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"لا يمكن وضع %s في المخزون. وحدها المنتجات القابلة للتخزين يمكن وضعها في " +"المخزون. " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " طباعة أوامر الباركود وأنواع العمليات " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " طباعة ورقة الباركود التجريبية " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " طباعة مواقع التخزين " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"لا يمكن أن يكون لمنتج متتبع بواسطة أرقام تسلسلية عدة كميات لذات الرقم " +"التسلسلي. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "إضافة منتج" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "إضافة منتج إضافي؟ " + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "بعد كل منتج " + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "بعد مجموعة من المنتجات " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "لقد تم إرجاع كافة المنتجات بالفعل " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "كافة المنتجات تحتاج إلى تغليفها " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "التخصيص " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "السماح بالتصديق الكامل لعملية الانتقاء " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"السماح بتصديق عملية انتقاء حتى وإن لم يتم مسح أي شيء ضوئياً بعد (وبالتالي، " +"القيام بالنقل فوراً) " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "لقد تم مسح نوع طرد غير موجود. لا يمكن معالجة هذا الجزء من الباركود. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "تطبيق" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "هل أنت متأكد من أنك ترغب في إلغاء هذه العملية؟ " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "الطلبات المتأخرة " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "تأكيد الطلبات المتأخرة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "باركود" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "تطبيق الباركود " + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "إجراء عميل باركود المخزون " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "الإدخال اليدوي للباركود " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "تسمية الباركود" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "إجراء عميل باركود الانتقاء " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "الباركود الممسوح ضوئيًا" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "مسح الباركود" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "مسح الباركود مبهم لعدة نماذج: %s. استخدم الأرجح بينها. " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "الباركودات غير متاحة. " + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "صندوق تنظيم الأسلاك الكهربائية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "إلغاء" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "إلغاء العملية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "إلغاء الشحنة " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "إلغاء العملية " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "إلغاء هذه العملية؟ " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "إغلاق" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "تهيئة الإعدادات " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "تهيئة باركود المنتج" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "تأكيد" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "جهة الاتصال" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "الكمية المحسوبة " + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "إنشاء شحنة جديدة " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "خزانة مخصصة (متري) " + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "خزانة مخصصة (الولايات المتحدة الأمريكية) " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "حذف" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "البيانات التجريبية النشطة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "الموقع الوجهة " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "طرد الوجهة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "يجب مسح موقع الوجهة ضوئياً " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "إهمال " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "اسم العرض " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"هل أنت متأكد من أنك ترغب في إزالة هذه الرسالة بشكل نهائي؟ لن تظهر مجدداً، " +"لذا تأكد من أنك لا تحتاج إلى صفحة الباركود أو أنك تملك نسخة منها. " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"هل على القائم بانتقاء المنتجات وضع المنتجات الممسوحة ضوئياً في طرد؟ إذا كانت" +" الإجابة نعم، فبأي وتيرة يجب القيام بذلك؟ " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"هل على القائم بانتقاء المنتجات مسح الوجهة ضوئياً؟ إذا كانت الإجابة نعم، فبأي" +" وتيرة يجب القيام بذلك؟ " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "عدم الإلغاء " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "لا تقم بإظهار هذه الرسالة مجدداً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "انتهى / " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "تنزيل " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "وهمي" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "عدد الحركات الفارغة " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "التصديق النهائي " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "تم إنشاء الطلب المتأخر التالي: " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "تم إنشاء الطلبات المتأخرة التالية: " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "فرض مسح موقع الوجهة ضوئياً؟ " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "فرض المسح الضوئي لرقم المجموعة/الرقم التسلسلي؟ " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "فرض مسح المنتج ضوئياً؟ " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "فرض مسح موقع المصدر ضوئياً؟ " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "فرض وجهة لكافة المنتجات " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "فرض تعبئة كافة المنتجات " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "فرض التعبئة؟ " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "إخفاء المجموعة " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "إخفاء اسم المجموعة " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "المُعرف" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"إذا كان لابد من مسح موقع المصدر ضوئياً، يجب أن أن يتم مسح موقع الوجهة ضوئياً" +" إما بعد كل منتج أو لا يتم مسحه ضوئياً على الإطلاق. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"إذا قمت بتصديق الطلب الآن، ستتم إضافة بقية المنتجات إلى الطلب المتأخر. " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "صورة" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "في #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "نقل غير مكتمل " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "رقم المادة الدولي المستخدم للتعرف على المنتج." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "تعديل المخزون " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "تعديلات المخزون (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "مواقع المخزون" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "نوع عملية الانتقاء بواسطة الباركود " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "اتركه" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "يجب أن يتم مسح منتج البند ضوئياً قبل أن تتمكن من تحرير البند " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "الموقع " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "تمت معالجة الموقع" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "رقم الدفعة/الرقم التسلسلي " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "موقع وجهة إلزامي " + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "مسح ضوئي إلزامي " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "موقع مصدري إلزامي " + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "لا" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "لا توجد %(picking_type)s جاهزة لـ %(barcode_type)s " + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "بلا مسح ضوئي " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "لا يوجد نوع عمليات داخلي. يرجى تهيئة واحد في إعدادات المستودع. " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "لا توجد عملية انتقاء أو موقع أو منتج مقابل للباركود %(barcode)s " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "لا توجد عملية انتقاء أو منتج مقابل للباركود %(barcode)s " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "لم يتم العثور على منتج أو مجموعة أو طرد للباركود %s " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "تسمية" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "ليست عملية المسح الضوئي المتوقعة " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "فتح عملية الانتقاء " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "فتح استمارة الانتقاء " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "العمليات" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "المسح الضوئي الاختياري " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "المالك" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "الطرد " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "تم تطبيق نوع الطرد %s بشكل صحيح على الطرد %s " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "الطرود " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "التعبئة" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "كمية التعبئة " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "الموقع الرئيسي " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "وجهة الموقع الأصلي " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "عدد الحركات الجزئية " + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "الانتقاء " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "تفاصيل الانتقاء " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "نوع الانتقاء " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "يرجى مسح موقع الوجهة ضوئياً لـ %s قبل مسح منتج آخر ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "يرجى المسح مجدداً! " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "اضغط على تصديق أو قم بمسح منتج آخر ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "طباعة الباركودات " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "طباعة إيصال التوصيل" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "طباعة المخزون" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "طباعة الطرود " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "طباعة عمليات الانتقاء " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "المنتج" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "باركودات المنتجات " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "تحركات المنتج (بنود حركة المخزون)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "تعبئة المنتج" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "كود مرجع المنتج " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "سجل كميات مخزون المنتج " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "وحدة قياس المنتج" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "متغير المنتج " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "وضعه في الطرد " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "تغليف في طرد " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "الكمية المنتهية" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "الكمية" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "الكمية المنتهية" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr " كمية الطرود في قائمة المواد في بند حركة المخزون. " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "سجلات الكميات " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "إزالة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "إرجاع المنتجات " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"يمكن إنشاء عمليات الإرجاع فقط لعمليات الانتقاء المنتهية، يرجى التصديق أولاً." +" " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "مسح" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "مسح موقع ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "مسح رقم مجموعة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "مسح رقم مجموعة ضوئياً أو الطرود، ثم موقع الوجهة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "مسح رقم مجموعة ضوئياً، ثم موقع الوجهة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "مسح طرد ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "مسح طرد ضوئياً أو وضع في طرد " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "مسح طرد ضوئياً أو مسح موقع الوجهة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "مسح طرد ضوئياً أو مسح موقع الوجهة أو منتج آخر " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "مسح منتج " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "قم بمسح منتج ضوئياً قبل مسح رقم تتبع " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "مسح منتج ضوئياً من %s " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "مسح منتج ضوئياً في %s أو مسح موقع آخر " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "مسح منتج أو طرد ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "مسح منتج أو طرد آخر ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "مسح منتج أو موقع الوجهة ضوئياً. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "قم بمسح منتج ضوئياً ثم موقع الوجهة " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "قم بمسح منتج أو رقم مجموعة/رقم تسلسلي أو طرد لتصفية الشحنات. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "قم بمسح منتح أو طرد أو موقع الوجهة ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "قم بمسح منتح أو طرد أو موقع الوجهة ضوئياً. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "مسح رقم تسلسلي ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "مسح رقم تسلسلي أو طرد ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "مسح رقم تسلسلي ضوئياً أو الطرود، ثم موقع الوجهة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "مسح رقم تسلسلي ضوئياً، ثم موقع الوجهة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "قم بمسح شحنة أو منتج ضوئياً لتصفية سجلاتك " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "قم بمسح شحنة أو طرد ضوئياً لتصفية سجلاتك " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "مسح" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "مسح رقم تسلسلي آخر ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "مسح أرقام المجموعات ضوئياً للمنتج %s لتغيير الكمية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "مسح المزيد من أرقام المجموعات ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "مسح المزيد من أرقام المجموعات أو طرد ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "مسح المزيد من المنتجات ضوئياً في %s أو مسح موقع آخر " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "مسح المزيد من المنتجات ضوئياً أو طرد " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "مسح المزيد من المنتجات، أو مسح موقع مصدر جديد" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "مسح الأرقام التسلسلية ضوئياً للمنتج %s لتغيير الكمية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "مسح موقع الوجهة ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "مسح الطرد %s ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "مسح الموقع المصدر" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "مسح موقع المصدر أو طرد ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"تستخدم الكمية الممسوحة %s كوحدة قياس، ولكن وحدة القياس هذه غير متوافقة مع " +"البند (%s). " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"تستخدم الكميات الممسوحة %s كوحدة القياس، ولكن وحدة القياس هذه غير متوافقة مع" +" وحدة المنتج (%s). " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "مسح الطرد ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "مخلفات التصنيع " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "تحديد منتج " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "الرقم التسلسلي/رقم الدفعة " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "إظهار تسميات الباركود " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "إظهار التصديق عن طريق الباركود " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "الموقع المصدري " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "الطرد المصدري " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "البقاء في الشحنة " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "حركة المخزون" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "نوع طرود المخزون " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "انقر للمسح " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"حقل تقني يشير إلى ما إذا كان يجب استخدامه في تطبيق الباركود واستخدامه للتحكم" +" في الظهور في واجهة المستخدم ذات الصلة. " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"حقل تقني يُستخدم لاحتساب ما إذا كان يجب عرض مجموعة \"التصديق النهائي\" أم " +"لا، مما يحل مسألة تعقيد المجموعات المجمعة/المخفية. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "تم تصديق تعديل المخزون " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "لا تنتمي الوجهة التي تم مسحها ضوئياً إلى وجهة هذه العملية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "لا تنتمي الوجهة التي تم مسحها ضوئياً إلى موقع هذه العملية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "الرقم التسلسلي الممسوح مستخدم بالفعل. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "لقد تم إلغاء الشحنة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "لقد تم تصديق الشحنة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "لا يوجد ما يمكن تطبيقه في هذه الصفحة. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "لا يوجد ما يمكن طباعته في هذه الصفحة. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "تم مسح هذه الحزمة بالفعل. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "عملية الانتقاء هذه منتهية بالفعل " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "تم إلغاء عملية الانتقاء " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "الرقم التسلسلي مستخدم بالفعل. " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "للمعالجة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "المهام المراد تنفيذها" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "لاستخدام الطرود، قم بتمكين \"الطرود\" في الإعدادات " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "تحويل " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "اسم الشحنة " + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "تتيح لك الشحنات نقل البضائع من موقع إلى آخر. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "اكتب الباركود الذي ترغب في مسحه هنا " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "وحدة القياس" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "وحدة القياس" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "استخدم الكاميرا للمسح " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "تصديق " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "قيمة آخر باركود ممسوح ضوئيًا." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "العارض" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "المستودع " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"لقد أنشأنا بعض البيانات التجريبية مع باركودات حتى تستخدمها لاستكشاف الخصائص." +" قم بطباعة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "وحدة القياس غير صحيحة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"أنت على وشك أخذ المنتج %(productName)s من الموقع %(locationName)s ولكن هذا المنتج غير محجوز في ذلك الموقع.\n" +"قم بمسح الموقع الحالي لتأكيد ذلك. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"من المتوقع أن تقوم بمسح منتج واحد أو أكثر أو طرد متوفر في موقع الانتقاء " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "من المتوقع أن تقوم بمسح منتج واحد أو أكثر." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "من المفترض أن تقوم بمسح %s ضوئياً أو موقع مصدري آخر " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "لا يمكنك تطبيق نوع طرد. قم بمسح منتج أولاً أو تحديد بند " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "لا يمكنك تسجيل مخلفات التصنيع في هذه المرحلة من العملية " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"لقد قمت بمسح %s عنصر/عناصر بالفعل من هذا الطرد. هل ترغب في مسح الطرد بأكمله؟" +" " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "لقد قمت بمعالجة عدد من المنتجات أقل من الطلب المبدأي: " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "عليك مسح طرد ضوئياً أو وضعه ضمن حزمة " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "عليك مسح منتج ضوئياً " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "الأوامر وأنواع العمليات " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "مستند" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "الموقع " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "نوع العملية" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "طرد " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "المنتج" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "منتجات لم تتم معالجتها على الإطلاق. " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "منتجات قد تمت معالجتها جزئياً. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "ورقة باركودات المخزون " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "لرؤية ما بوسع هذا التطبيق القيام به! يمكنك أيضاً طباعة الباركود " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "لإنشاء شحنة جديدة من هذا الموقع. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "لإنشاء شحنة جديدة. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "لمعرفة محتواه. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "لفتحه." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "لإظهار الموقع والكمية. " diff --git a/stock_barcode/i18n/az.po b/stock_barcode/i18n/az.po new file mode 100644 index 0000000..2d6a22c --- /dev/null +++ b/stock_barcode/i18n/az.po @@ -0,0 +1,1617 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Jumshud Sultanov , 2022 +# erpgo translator , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "Məhsul əlavə et" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Məzuniyyət payı" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Tətbiq edin" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barkod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Barkod Nomenklaturası" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Ləğv edin" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "Bağlayın" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Parametrləri Konfiqurasiya edin" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Təsdiq edin" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Tərəfindən yaradılıb" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Tarixdə yaradıldı" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "Silin" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "Təyinat Məkanı" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Ləğv edin" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Ekran Adı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Yüklə" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "Ümumi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "#{kanban_getcolorname(record.color.raw_value)}-də" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Son Yeniləyən" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Son Yenilənmə tarixi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Məkan" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Partiya/ Seriya" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Tapılmayanlar" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Əməliyyatlar" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Sahibi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Bağlama" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Seçim Növü " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Məhsul" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Məhsul Hərəkətləri (Ehtiyat Keçid Xətti)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Məhsulun Ölçü Vahidi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Məhsul Çeşidi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Miqdar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "İstifadəyə yararsız" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Mənbə Yeri" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "İşləmək Üçün" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Köçürmə" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Ölçü Vahidi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Ölçü Vahidi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Təsdiqləyin" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Anbar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "sənəd" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "Məhsul" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/bg.po b/stock_barcode/i18n/bg.po new file mode 100644 index 0000000..4489f0a --- /dev/null +++ b/stock_barcode/i18n/bg.po @@ -0,0 +1,1779 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Anton Vassilev, 2023 +# Ивайло Малинов , 2023 +# Kaloyan Naumov , 2023 +# Весел Карастоянов , 2023 +# KeyVillage, 2023 +# aleksandar ivanov, 2023 +# Albena Mincheva , 2023 +# Igor Sheludko , 2023 +# Martin Trigaux, 2023 +# Maria Boyadjieva , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Maria Boyadjieva , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Разпределяне" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Приложи" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Потрърждение на компенсираща поръчка" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Баркод" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Баркодова номенклатура " + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Сканиран баркод " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Сканиране на баркодове " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Отказ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Затвори" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Настройки" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Конфигурирайте продуктови баркодове" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Потвърждение" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Контакт" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Създадено от" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Създадено на" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Изтриване" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Локация на местонахождение" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Пакет за местоназначение" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Отхвърлете" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Име за Показване" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Не показвайте това съобщение отново." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Изтеглете от системата" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Фиктивен" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Последно потвърждаване" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Изображение" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Международен номер на артикула, използван за идентификация на продукта." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ревизия на инвентара" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Локации на инвентар" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Последно актуализирано от" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Последно актуализирано на" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Оставете го" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Локация" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Партиден/сериен" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Не" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Операции" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Собственик" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Пакет" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Пакети" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Опаковане" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Основна локация" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Пикинг" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Вид пикинг" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Продукт" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Продуктови баркодове" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Продуктово опаковане" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Продуктова мерна единица" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Продуктов вариант" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Поставяне в опаковка" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Количество" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Извършено количество" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Количества" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Отстранете го" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Върнете продукти" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Скрап" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Сериен/партиден номер " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Локация на източник" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Пакет на източник" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Движение в склада" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Докоснете, за да сканирате" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "За обработка" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "За извършване" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Прехвърлете" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Мерна единица" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Мерна единица" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Валидирай" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Стойност на последния сканиран баркод" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Склад" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "документ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "локация" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "Списък със складови баркодове" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"за да проверите какво може да направи този модул! Може и да отпечата баркод" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/bs.po b/stock_barcode/i18n/bs.po new file mode 100644 index 0000000..7513b0c --- /dev/null +++ b/stock_barcode/i18n/bs.po @@ -0,0 +1,1618 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2018 +# Boško Stojaković , 2018 +# Bole , 2018 +# Malik K, 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2018-10-02 10:32+0000\n" +"Last-Translator: Malik K, 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barkod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Otkaži" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Portvrdi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Odbaci" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Preuzimanje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Prazno" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Internacionalni broj artikla koji se koristi za identifikaciju proizvoda." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "Inventure" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lokacije zalihe" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacije" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Prikupljanje proizvoda" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tip prikupljanja" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Proizvod" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Količina" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Otpis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Prenos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Jedinica mjere" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Odobri" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/ca.po b/stock_barcode/i18n/ca.po new file mode 100644 index 0000000..189f228 --- /dev/null +++ b/stock_barcode/i18n/ca.po @@ -0,0 +1,1834 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Jonatan Gk, 2023 +# jabiri7, 2023 +# Albert Parera, 2023 +# Josep Anton Belchi, 2023 +# Martin Trigaux, 2023 +# Harcogourmet, 2023 +# RGB Consulting , 2023 +# Marc Tormo i Bochaca , 2023 +# Sandra Franch , 2023 +# Arnau Ros, 2023 +# Quim - eccit , 2023 +# marcescu, 2023 +# Ivan Espinola, 2023 +# Óscar Fonseca , 2024 +# Manel Fernandez Ramirez , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Manel Fernandez Ramirez , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s no poden ser inventariats. Només es poden inventariar els productes " +"inventariats." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Imprimeix el full de prova del codi de barres" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Un producte rastrejat per números de sèrie no pot tenir diverses quantitats " +"per al mateix número de sèrie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Afegeix un producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Voleu afegir un producte addicional?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Després de cada producte" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Després del grup de productes" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Cal empaquetar tots els productes" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Assignació" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Permet la validació de selecció completa" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Permet validar una selecció fins i tot si encara no s'ha escanejat res (i " +"així, fer una transferència immediata)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Es va escanejar un tipus de paquet inexistent. Aquesta part del codi de " +"barres no es pot processar." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Aplica" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmació d'entrega parcial" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Codi de barres" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplicació de codi de barres" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Acció del client d'inventari de codis de barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura del codi de barres" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Acció del client de selecció de codi de barres" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Codi de barres escanejat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Escaneig de codis de barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"L'exploració de codi de barres és ambigua amb diversos models:%s. Utilitza " +"el més probable." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Caixa de gestió de cables" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancel·la" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Cancel·la L'operació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Cancel·la l'operació" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Tancar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Paràmetres de configuració" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configura els codis de barres del producte" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contacte" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Quantitat recomptada" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Crear una nova transferència" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Gabinet personalitzat (mètric)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Gabinet personalitzat (EUA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Eliminar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Dades de prova actives" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Ubicació destí" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Destí del paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "La ubicació de destinació s'ha d'escanejar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Descartar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nom mostrat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Ha de posar el comprador en un paquet els productes escanejats? Si és així, " +"a quin ritme?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "El selector ha d'escanejar la destinació? Si és així, a quin ritme?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "No cancel·lis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "No tornis a mostrar aquest missatge" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Descarregar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Fictici" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Nombre de moviments buit" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validació final" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Força l'escaneig de la ubicació de destinació?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Voleu forçar l'escaneig de punts/sèrie?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Forçar l'escaneig del producte?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Forçar l'escaneig de la ubicació d'origen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Força una destinació a tots els productes" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Força que tots els productes estiguin empaquetats" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Forçar la càrrega?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Si s'ha d'escanejar la ubicació d'origen, llavors la ubicació de destinació " +"s'ha d'escanejar després de cada producte o no s'ha d'escanejar en absolut." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Imatge" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "En #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Número d'article internacional utilitzat per la identificació de producte." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajust d'inventari" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Ubicacions d'inventari" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última actualització el" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Deixa-ho" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"El producte de la línia s'ha d'escanejar abans que es pugui editar la línia" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Ubicació" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Ubicació processada" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/núm. de sèrie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Ubicació de destinació obligatòria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Escaneig obligatori" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Ubicació de l'origen obligatòria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "No" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "No hi ha cap %(picking_type)s preparat per a aquest %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Sense escaneig" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"No hi ha cap tipus d'operació interna. Si us plau configureu-ne un a la " +"configuració del magatzem." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"No hi ha cap selecció ni ubicació o producte corresponent al codi de barres " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"No hi ha cap selecció o producte corresponent al codi de barres %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "No és l'escaneig esperat" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Recollida oberta" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Obre el formulari de selecció" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacions" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Escaneig opcional" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Propietari" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Tipus de paquet%s s'ha aplicat correctament al paquet %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Paquets" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Empaquetament" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Quantitat d'embalatge" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Ubicació pare" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Comptador de moviments parcials" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Albarà" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detalls de la recollida" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipus de picking " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Si us plau, escanegeu la ubicació de destinació per a %s abans d'escanejar " +"un altre producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Premeu Valida o escanegeu un altre producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Imprimir l'albarà d'entrega" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Imprimeix l'inventari" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Imprimeix els paquets" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Imprimeix les operacions de Picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Producte" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Codi de barres de productes" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Moviment del producte (línia de moviment d'estoc)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Embalatge de productes" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Quantitat d'estoc del producte" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unitat de mesura del producte" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variant de producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Posa en un paquet" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Col·locar al paquet" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Qty Fet" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Quantitat" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Quantitat feta" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Quantitat de l'embalatge a l'UoM de la línia de moviment d'estoc." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quants" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Suprimeix" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Retorna productes" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Escaneja un" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Explora una ubicació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Escaneja un número de lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Escaneja un número de lot o un paquet i després la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Escaneja un número de lot i després la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Explora un paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Escaneja un paquet o posa'l al paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Escaneja un paquet o la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Escaneja un paquet, la ubicació de destinació o un altre producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Escaneja un producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Escaneja un producte abans d'escanejar un número de seguiment" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Escaneja un producte de %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Escanegeu un producte a %s o escanegeu una altra ubicació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Escaneja un producte o un paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Escaneja un producte o un altre paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Escaneja un producte o la ubicació de destinació." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Escaneja un producte i després la ubicació de destinació" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Escaneja un producte, un paquet o la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Escaneja un producte, un paquet o la ubicació de destinació." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Escaneja un número de sèrie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Escaneja un número de sèrie o un paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Escaneja un número de sèrie o un paquet i després la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Escaneja un número de sèrie i després la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" +"Escanegeu una transferència o un producte per filtrar els vostres registres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Escanegeu una transferència, un producte o un paquet per filtrar els vostres" +" registres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Escanejar un" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Explora un altre número de sèrie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" +"Escaneja números de lot per al producte %s per canviar la seva quantitat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Escaneja més números de lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Escaneja més números de lot o un paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Explora més productes a %s o escaneja una altra ubicació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Explora més productes o un paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Escaneja més productes, o escaneja una nova ubicació d'origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Escanegeu números de sèrie per al producte %s per canviar la seva quantitat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Explora la ubicació de destinació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Escaneja el paquet %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Explora la ubicació de l'origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Explora la ubicació de la font o un paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Utilitzacions de quantitat escanejades %s com a Unitat de mesura, però " +"aquest UoM no és compatible amb el de la línia (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Utilitzacions de quantitat escanejades %s com a Unitat de mesura, però " +"aquest UoM no és compatible amb el producte (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Deixalla" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Seleccioneu un producte" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Número de sèrie / lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Mostra la nomenclatura del codi de barres" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Mostra la validació del codi de barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Ubicació origen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Paquet font" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Moviment d'estoc" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tipus de paquet principal" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toca per escanejar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Camp tècnic utilitzat per calcular si s'ha de mostrar el grup de validació " +"final, resolent grups combinats/complexitat invisible." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "S'ha validat l'ajust de l'inventari" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "El número de sèrie escanejat ja s'utilitza." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "La transferència s'ha cancel·lat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "La transferència s'ha validat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "No hi ha res a aplicar en aquesta pàgina." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "No hi ha res a imprimir en aquesta pàgina." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Aquest paquet ja està escanejat." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Aquesta selecció ja està acabada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Aquesta selecció s'ha cancel·lat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Aquest número de sèrie ja s'utilitza." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Per processar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Per executar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Per utilitzar paquets, habilitar 'Packages' a la configuració" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transferència" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nom de la transferència" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Les transferències us permeten moure productes des d'una ubicació a una " +"altra." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unitat de mesura" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UdM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor de l'últim codi de barres escanejat." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visor" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Magatzem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Hem creat unes quantes dades de prova amb codis de barres per explorar les " +"característiques. Imprimeix la" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Unitat de mesura errònia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"S'espera que escanegeu un o més productes o un paquet disponible a la " +"ubicació de selecció" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "S'espera que escanegis un o més productes." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Se suposa que heu d'escanejar %s o una altra ubicació d'origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"No pots aplicar un tipus de paquet. Primer, escanejar un producte o " +"seleccionar una línia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Heu processat menys productes que la demanda inicial:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Heu d'escanejar un paquet o posar-lo al paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Heu d'escanejar un producte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "document" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "ubicació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tipus d'operació" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "paquet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "producte" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "Els productes no es processaven en absolut." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "Els productes es processaven parcialment." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "fulla de codis de barres en estoc" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"per comprovar què pot fer aquest mòdul! També podeu imprimir el codi de " +"barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "per crear una transferència nova des d'aquesta ubicació." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "per crear una nova transferència." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "conèixer el seu contingut." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "per obrir-lo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "per mostrar la seva ubicació i quantitat." diff --git a/stock_barcode/i18n/cs.po b/stock_barcode/i18n/cs.po new file mode 100644 index 0000000..ef30c0d --- /dev/null +++ b/stock_barcode/i18n/cs.po @@ -0,0 +1,1782 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Ivana Bartonkova, 2023 +# Tomáš Píšek, 2023 +# Aleš Fiala , 2024 +# Katerina Horylova, 2024 +# Jakub Smolka, 2024 +# Wil Odoo, 2024 +# MatejJurista, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: MatejJurista, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Přidat produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Přidělení" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Použít" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Doobjednávka" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Potvrzení doobjednávky" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Čárové kódy" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura čárového kódu" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Naskenovaný čárový kód" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Skenování čárových kódů" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Box pro správu kabelů" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Zrušit" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Zrušení přesunu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Zavřít" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurační nastavení" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigurace čárových kódů produktu" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Potvrdit" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Započítané množství" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Vytvořit nový přenos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Vytvořeno uživatelem" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Vytvořeno dne" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Smazat" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Cílové umístění" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Cílový balíček" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Zrušit" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Zobrazovací název" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Chcete tuto zprávu trvale odebrat ? Už se neobjeví, takže se ujistěte, že " +"nepotřebujete list s čárovými kódy nebo kopii." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Tuto zprávu znovu nezobrazovat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Stáhnout" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Prázdný" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Závěrečné ověření" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Obrázek" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "V #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Mezinárodní číslo položky použité pro identifikaci výrobku." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Úprava inventáře" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Skladové lokace" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Naposledy upraveno uživatelem" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Naposledy upraveno dne" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Nechat jak je" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Místo" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Místo bylo zpracováno" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Šarže/sériové číslo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ne" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "Žádný typ interní operace. Zkontrolujte, prosím, v nastavení skladu." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Systém pojmenování" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Otevčít formulář výdeje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operace" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Majitel" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Balení" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Balení" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Balení" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Množství balení" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Nadřazené umístění" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Dodání" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detaily výdeje" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Typ skladové operace" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Prosím, nasnímejte znovu!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Stiskněte Potvrdit nebo naskenujte další produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Tisk dodacího listu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Čárové kódy produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Pohyby produktu (položka pohybu zásob)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produktové balení" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Skladové množství produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produktová měrná jednotka" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Produktová varianta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Vložit do balení" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Množství" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Hotové množství" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kvanty" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Odebrat to" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Vrátit výrobky" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Naskenujte produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Naskenujte produkt z %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Naskenujte pohyb, produkt nebo balení pro filtrování záznamů" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Skenovat více produktů nebo skenovat nové umístění zdroje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Naskenujte cílové umístění" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Naskenujte balení %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Naskenovat umístění zdroje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Skenování balení" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Vyřazení zásob" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Vybrat produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Seriové číslo / šarže" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Zdrojové umístění" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Zdrojový balík" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Pohyb zásob" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Typ balení" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Klepnutím skenovat" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Úprava zásob byla ověřena" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Naskenované sériové číslo je již používáno." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Převod byl zrušen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Tento balík je již naskenován." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Toto vyzvednutí je již hotové" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Zpracovat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "K vyřízení" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Převod" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Převody umožňují přesouvat produkty z jednoho místa na druhé." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Měrná jednotka" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "MJ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Potvrdit" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Hodnota posledního naskenovaného čárového kódu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Prohlížeč" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Sklad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Vytvořili jsme několik demonstračních dat s čárovými kódy, abyste mohli " +"prozkoumat funkce. Tiskněte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Očakáva sa, že naskenujete jeden alebo viac produktov alebo balík dostupných" +" na mieste odberu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Očakáva sa, že naskenujete jeden alebo viacero produktov." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "V tomto stavu operace nemůžete registrovat vyřazení" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Již jste naskenovali %s položek tohoto balíčku. Chcete naskenovat celý " +"balíček?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "lokace" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "typ operace" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "balení" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "k vytvoření nového přenosu z tohoto místa." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "k vytvoření nového převodu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "zobrazit jeho umístění a množství." diff --git a/stock_barcode/i18n/da.po b/stock_barcode/i18n/da.po new file mode 100644 index 0000000..282bb6b --- /dev/null +++ b/stock_barcode/i18n/da.po @@ -0,0 +1,1787 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Ejner Sønniksen , 2023 +# lhmflexerp , 2023 +# Mads Søndergaard, 2023 +# Mads Søndergaard, 2023 +# Sanne Kristensen , 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Martin Trigaux, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Print stregkode eksempel ark" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Tilføj produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Tildeling" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Anvend" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Restordre bekræftelse" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Stregkode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Stregkode plan" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Strejkode pluk klient handling" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Scannet stregkode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Stregkodescanning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kabelføring boks" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Annullér" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Luk" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurer opsætning" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigurér produktstregkoder" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Bekræft" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Talt kvantitet" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Opret en ny overførsel" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Oprettet af" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Oprettet den" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Slet" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Demo Data Aktiv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Destinations lokation" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Destinations pakke" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Kassér" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Vis ikke denne besked igen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Download" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Attrap" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Endelig bekræftelse" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Billede" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "I #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Internationalt varenummer til brug ved vareidentifikation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Lagerjustering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lager lokationer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Sidst opdateret af" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Sidst opdateret den" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Efterlad den" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Adresse" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Lokation behandlet" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/serienummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nej" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Ingen interne operations typer. Vær venlig at konfigurere en i varehus " +"indstillinger." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklature" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Åben Pluk" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Åbn pluk fra" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operationer" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Ejer" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Pakke" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakker" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Emballering" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Pakke Antal" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Hoved lokation" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Plukning" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Pluk detaljer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Pluk type" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Venligst, scan igen!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Udprint leverings seddel" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Udprint inventar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Udprint pluk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Produkt stregkoder" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Produkt bevægelser (Lagerbevægelse linje)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produkt indpakning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Vareenhed" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Varevariant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Læg i pakke" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Put i pakke" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Kvantitet fuldført" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Antal" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Kvantitet færdig" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kvantum" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Fjern den" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Returner produkter" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scan en" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scan en" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Scan flere produkter, eller scan en ny kilde lokation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scan kilde lokationen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Skrot" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Vælg et produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serie/lot nummer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Kilde placering" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Kildeforpakning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Lagerflytning" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Tryk for at scanne" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Inventar justeringen er blevet godkendt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Det scannede serienummer bruges allerede." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Overførslen er blevet annulleret" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Overførslen er blevet godkendt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Denne pakning er allerede scannet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Dette pluk er allerede fuldført" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Dette serienummer bruges allerede." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "At behandle" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "To do" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Overfør" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Overførsler gør det muligt for dig at flytte produkter fra en lokation til " +"en anden." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Enhed" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Enhed" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validér" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Værdi af den sidst scannede stregkode." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Viser" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Lagerstyring" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Vi har oprettet et far demo data med stregkoder for, at du kan udforske " +"funktionerne. Print" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Forkert måleenhed" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Det forventes at du scanner ét eller flere produkter." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "lokation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "operationstype" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "lager stregkoder seddel" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "for at tjekke hvad dette modul kan! Du kan også printe stregkoden" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "for at oprette en ny overførsel fra denne lokation." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "for at oprette en ny overførsel." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "for at åbne den." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/de.po b/stock_barcode/i18n/de.po new file mode 100644 index 0000000..d134644 --- /dev/null +++ b/stock_barcode/i18n/de.po @@ -0,0 +1,1835 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2023 +# Larissa Manderfeld, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s kann nicht inventarisiert werden. Nur lagerfähige Produkte können " +"inventarisiert werden." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " Barcode-Befehle und Vorgangsarten drucken" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Barcode-Demoblatt drucken" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Lagerorte drucken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Ein Produkt, das nach Seriennummern verfolgt wird, kann nicht mehrere Mengen" +" für dieselbe Seriennummer haben." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Produkt hinzufügen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Zusätzliches Produkt hinzufügen?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Nach jedem Produkt" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Nach Gruppe von Produkten" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Es wurden bereits alle Produkte zurückgegeben" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Alle Produkte müssen verpackt werden" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Zuteilung" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Vollständige Kommissionierungsvalidierung erlauben" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Ermöglicht die Validierung einer Kommissionierung, auch wenn noch nichts " +"gescannt wurde (und damit einen sofortigen Transfer)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Ein nicht vorhandener Pakettyp wurde gescannt. Dieser Teil des Barcodes kann" +" nicht verarbeitet werden." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Anwenden" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Sind Sie sicher, dass Sie diesen Vorgang abbrechen möchten?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Lieferrückstand" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Rückstandsbestätigung" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Barcode-App" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Client-Aktion für Barcode-Inventarisierung" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Manueller Barcodeeintrag" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Barcode-Nomenklatur" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Client-Aktion für Barcode-Kommissionierung" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode gescannt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Barcode scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Der Barcode-Scan ist bei mehreren Modellen mehrdeutig: %s. Verwenden Sie das" +" wahrscheinlichste." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Barcodes sind nicht verfügbar" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kabelverwaltungsbox" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Abbrechen" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Vorgang abbrechen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Transfer abbrechen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Vorgang abbrechen" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Diesen Vorgang abbrechen?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Schließen" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurationseinstellungen " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Produktbarcodes konfigurieren" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Bestätigen" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Gezählte Menge" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Neuen Transfer erzeugen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Erstellt am" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Maßgefertigter Schrank (Metrik)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Maßgefertigter Schrank (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Löschen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Demodaten aktiv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Ziellagerort" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Zielpaket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Zielort muss gescannt werden" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Verwerfen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Möchten Sie diese Meldung dauerhaft entfernen? Sie wird nicht mehr " +"erscheinen. Vergewissern Sie sich also, dass Sie das Barcodeblatt nicht " +"benötigen oder eine Kopie davon haben." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Muss der Kommissionierer die gescannten Produkte in ein Paket packen? Wenn " +"ja, in welchem Umfang?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Muss der Kommissionierer den Zielort scannen? Wenn ja, in welchem Rhythmus?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Nicht abbrechen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Diese Meldung nicht mehr anzeigen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Erledigt /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Herunterladen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Dummy" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Anzahl leerer Bewegungen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Endgültige Validierung" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Folgender Lieferrückstand wurde erstellt:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Folgende Lieferrückstände wurden erstellt:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Scannen des Zielorts erzwingen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Los/Serien-Scan erzwingen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Produkt-Scan erzwingen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Scanne des Quellstandorts erzwingen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Erzwingen eines Ziels für alle Produkte" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Alle Produkte müssen verpackt werden" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Verpacken erzwingen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Los ausblenden" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Losname ausblenden" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Wenn der Quellstandort gescannt werden muss, dann muss der Zielstandort " +"entweder nach jedem Produkt oder überhaupt nicht gescannt werden." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Wenn Sie nun validieren, werden die verbleibenden Produkte zu einem " +"Lieferrückstand hinzugefügt." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Bild" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Unvollständiger Transfer" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Internationale Artikelnummer zur Produktidentifikation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Bestandsaufnahme" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Bestandsaufnahmen (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lagerorte" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Ist Barcode Kommissionierungstyp" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Verwerfen" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"Das Produkt der Zeile muss zuerst gescannt werden, damit die Zeile " +"bearbeitet werden kann" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Standort" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Standort verarbeitet" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Los/Serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Obligatorischer Zielort" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Obligatorischer Scan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Obligatorischer Quelllagerort" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nein" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Es sind keine %(picking_type)s für diesen %(barcode_type)s bereit" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Kein Scan" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Keine interne Vorgangsart. Konfigurieren Sie eine in den Lager-" +"Einstellungen." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Keine Kommissionierung oder kein Lagerort oder Produkt, das dem Barcode " +"%(barcode)s entspricht" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"Keine Kommissionierung oder kein Produkt, das dem Barcode %(barcode)s " +"entspricht" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Es wurde kein Los oder Paket für den Barcode %s gefunden" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatur" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "NIcht der erwartete Scan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Kommissionierung öffnen" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Kommissionierformular öffnen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Vorgänge" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Optionaler Scan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Besitzer" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Pakettyp %s wurde korrekt auf das Paket %s angewendet" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakete" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Verpackung" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Verpackungsmenge" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Übergeordneter Lagerort" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Übergeordneter Zielort" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Anzahl Teilbewegungen" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Kommissionierung" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Details der Kommissionierung" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Kommissionierart" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Bitte Zielort für %s scannen, bevor Sie andere Produkte scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Bitte erneut scannen!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Auf „Validieren“ klicken oder weiteres Produkt scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Barcodes drucken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Lieferschein drucken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Bestand drucken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Pakete drucken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Kommissioniervorgänge drucken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkte" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Produktbarcodes" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Produktbewegungen (Lagerbuchung)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produktverpackung" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Produktreferenzcode" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Produktbestandsquant" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Maßeinheit des Produkts" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Produktvariante" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Verpacken" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Verpacken" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Bearbeitete Menge" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Menge" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Erledigte Menge" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Menge der Verpackungen in der Maßeinheit der Lagerbuchungszeile." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quanten" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Entfernen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Produkte retournieren" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Retouren können nur für erledigte Kommissionierungen erstellt werden, bitte " +"zuerst validieren." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scannen Sie ein(en)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Einen Standort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Eine Losnummer scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Eine Losnummer oder ein Paket scannen, dann den Zielort" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Eine Losnummer scannen, dann den Zielort" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Ein Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Ein Paket scannen oder verpacken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Ein Paket oder den Zielort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Ein Paket, den Zielort oder ein anderes Produkt scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Ein Produkt scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Ein Produkt scannen, bevor eine Sendungsnummer gescannt wird" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Ein Produkt von %s scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Ein Produkt in %s scannen oder einen anderen Standort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Ein Produkt oder ein Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Ein Produkt oder ein anderes Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Ein Produkt oder den Zielort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Ein Produkt scannen, dann den Zielort" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Ein Produkt, eine Los-/Seriennummer oder ein Paket scannen, um die Transfers" +" zu filtern" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Ein Produkt, ein Paket oder den Zielort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Ein Produkt, ein Paket oder den Zielort scannen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Eine Seriennummer scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Eine Seriennummer oder ein Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Eine Seriennummer oder ein Paket scannen, dann den Zielort" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Eine Seriennummer scannen, dann den Zielort" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Einen Transfer oder ein Produkt scannen, um Ihre Einträge zu filtern." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Einen Transfer, ein Produkt oder ein Paket scannen, um Ihre Einträge zu " +"filtern." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scannen Sie eine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Weitere Seriennummer scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Losnummern für Produkt %s scannen, um ihre Menge zu ändern" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Weitere Losnummern scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Weitere Losnummern oder ein Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Weitere Produkte in %s scannen oder einen anderen Standort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Weitere Produkte oder ein Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Weitere Produkte oder einen neuen Quelllagerort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Serienummern für Produkt %s scannen, um ihre Menge zu ändern" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Den Zielort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Das Paket %s scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Den Quelllagerort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Den Quellstandort oder ein Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Gescannte Menge verwendet %s als Maßeinheit, aber diese Maßeinheit ist nicht" +" kompatibel mit der Maßeinheit der Zeile (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Gescannte Menge verwendet %s als Maßeinheit, aber diese Maßeinheit ist nicht" +" mit der des Produkts kompatibel (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Paket scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Ausschuss melden" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Ein Produkt auswählen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serien-/Losnummer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Barcode-Nomenklatur anzeigen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Barcodevalidierung anzeigen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Quelllagerort" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Quellpaket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Bei Transfer bleiben" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Lagerbuchung" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Typ des Lagerpakets" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Zum Scannen tippen" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Technisches Feld, das angibt, ob es in der Barcode-App verwendet werden soll" +" und zur Steuerung der Sichtbarkeit in der zugehörigen Benutzeroberfläche " +"dient." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Technisches Feld, mit dem berechnet wird, ob die Gruppe „Endgültige " +"Validierung“ angezeigt werden soll, um kombinierte Gruppen/unsichtbare " +"Komplexität zu lösen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Die Bestandsaufnahme wurde validiert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "Der gescannte Lagerort gehört nicht zum Ziel dieses Vorgangs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Der gescannte Lagerort gehört nicht zum Lagerort dieses Vorgangs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Die gescannte Seriennummer wird bereits verwendet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Der Transfer wurde abgebrochen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Der Transfer wurde validiert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Auf dieser Seite gibt es nichts anzuwenden." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Auf dieser Seite gibt es nichts zu drucken." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Dieses Paket wurde bereits gescannt." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Diese Kommissionierung ist bereits abgeschlossen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Diese Kommissionierung wird storniert." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Diese Seriennummer wird bereits verwendet." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Zu verarbeiten" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "To-do" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Um Pakete zu verwenden, aktivieren Sie „Pakete“ in den Einstellungen" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Transfername" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Transfers erlauben es Ihnen, Produkte von einem zum anderen Lagerort zu " +"bewegen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Geben Sie hier den Barcode ein, den Sie scannen möchten" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Maßeinheit" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Maßeinheit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Zum Scannen Kamera verwenden" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validieren" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Wert des zuletzt gelesenen Barcodes." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Betrachter" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Lagerhaus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Wir haben ein paar Demodaten mit Barcodes für Sie erstellt, damit Sie die " +"Funktionen erkunden können. Drucken Sie die" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Falsche Maßeinheit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Sie sind im Begriff das Produkt %(productName)s aus dem Lagerort %(locationName)s zu nehmen, aber dieses Produkt ist nicht an diesem Lagerort reserviert.\n" +"Scannen Sie den aktuellen Standort, um dies zu bestätigen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Es wird erwartet, dass Sie ein oder mehrere Produkte oder ein Paket scannen," +" das am Kommissionierort verfügbar ist." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Es wird erwartet, dass Sie ein oder mehrere Produkte scannen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Sie müssen %s oder einen anderen Quellstandort scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Sie können keinen Pakettyp anwenden. Scannen Sie zunächst ein Produkt oder " +"wählen Sie eine Zeile" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "In diesem Stadium des Vorgangs können Sie keinen Ausschuss melden." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Sie haben bereits %s Artikel dieses Pakets gescannt. Möchten Sie das gesamte" +" Paket scannen?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Sie haben weniger Produkte verarbeitet als ursprünglich angefragt:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Sie müssen ein Paket scannen oder verpacken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Sie müssen ein Produkt scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "Befehle und Vorgangsarten" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "Dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "Ort" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "Vorgangsart" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "Produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "Produkt(e) wurde(n) überhaupt nicht verarbeitet." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "Produkt(e) wurde(n) teilweise verarbeitet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "Dokument für Bestandsbarcodes" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +", um herauszufinden, was dieses Modul kann! Hier erhalten Sie außerdem die" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr ", um einen neuen Transfer von diesem Lagerort zu erstellen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr ", um einen neuen Transfer zu erstellen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr ", um den Inhalt zu kennen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr ", um es zu öffnen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr ", um Lagerort und -menge zu ermitteln." diff --git a/stock_barcode/i18n/el.po b/stock_barcode/i18n/el.po new file mode 100644 index 0000000..08b6f4a --- /dev/null +++ b/stock_barcode/i18n/el.po @@ -0,0 +1,1620 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Giota Dandidou , 2019 +# Martin Trigaux, 2019 +# Kostas Goutoudis , 2019 +# Stefanos Nikou , 2019 +# George Tarasidis , 2019 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.2+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2016-08-05 13:32+0000\n" +"Last-Translator: George Tarasidis , 2019\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Ονοματολογίες Barcode" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode Σαρώθηκε" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Ακύρωση" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "Κλείσιμο" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Διαμόρφωση των Barcodes του Είδους" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Επιβεβαίωση" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Δημιουργήθηκε από" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Απόρριψη" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Εμφάνιση Ονόματος" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Να μην εμφανιστεί ξανά αυτό το μήνυμα" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Λήψη" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Εικονικό" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "Κωδικός" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Διεθνής Αριθμός Είδους που χρησιμοποιείται για την αναγνώριση προϊόντος" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "Τροποποιήσεις Αποθεμάτων" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Τοποθεσίες Αποθέματος" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Τελευταία Ενημέρωση από" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Τελευταία Ενημέρωση στις" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Αφήστε το" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Λειτουργίες" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Συλλογή" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Τύπος Διαλογής" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Είδος" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Barcodes Είδους" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Ποσότητα" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Ολοκληρωμένη Ποσότητα" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Αφαιρέστε το" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Άχρηστα" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Μεταφορά" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Μονάδα Μέτρησης" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Επικύρωση" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Τιμή του τελευταίου barcode που σαρώθηκε." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "εγγραφή" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/es.po b/stock_barcode/i18n/es.po new file mode 100644 index 0000000..8d1b6fb --- /dev/null +++ b/stock_barcode/i18n/es.po @@ -0,0 +1,1840 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Francisco Santos, 2023 +# Larissa Manderfeld, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"No se puede inventariar %s Sólo los productos almacenables pueden ser " +"inventariados." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Imprimir comandos del código de barras y tipos de" +" operación" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" +"Imprimir hoja de demostración de códigos de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Imprimir ubicaciones de almacenamiento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Un producto rastreado por números de series no puede tener múltiples " +"cantidades para el mismo número de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Agregar producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "¿Agregar producto adicional?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Después de cada producto" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Después de un grupo de productos" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Ya se han devuelto todos los productos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Todos los productos deben estar empaquetados." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Asignación" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Permitir validación de albarán completo" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Permitir validar un albarán incluso si no se ha escaneado nada aún (así se " +"realizará un traslado inmediato)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Se escaneó un tipo de paquete que no existe. No se puede procesar esta parte" +" del código de barras." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Aplicar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "¿Está seguro de que desea cancelar esta operación?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Entrega parcial" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmación de entrega parcial" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Código de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplicación de Código de barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Acción del cliente de código de barras de inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Ingreso manual del código de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de código de barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Acción del cliente de selección de código de barras" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de barras escaneado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Escaneo de código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"El escaneo del código de barras es ambiguo con varios modelos: %s. Utilice " +"el más probable." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Los códigos de barras no están disponibles. " + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Caja de administración de cables" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Cancelar la operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Cancelar traslado" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Cancelar operación" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "¿Cancelar esta operación?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configurar códigos de barras de productos" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Cantidad contada" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Crear un nuevo traslado" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Armario personalizado (Métrico)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Armario personalizado (Estados Unidos)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Eliminar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Datos de demostración activos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Ubicación de destino" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Paquete de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Hay que escanear la ubicación de destino" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Descartar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"¿Desea eliminar permanentemente este mensaje? No aparecerá más, así que " +"asegúrese de que no necesita la hoja de códigos de barras o de que tiene una" +" copia." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"¿El recolector debe empaquetar los productos escaneados? Si es así, ¿con qué" +" tarifa?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "¿El recolector debe escanear el destino? Si es así, ¿con qué tarifa?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "No cancelar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "No mostrar este mensaje de nuevo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Hecho /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Descargar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Prueba" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Número de movimientos vacíos" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validación final" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Se creó la siguiente entrega parcial:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Se crearon las siguientes entregas parciales:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "¿Forzar el escaneo de ubicación de destino?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "¿Forzar el escaneo de número de serie o de lote?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "¿Forzar el escaneo del producto?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "¿Forzar el escaneo de la ubicación de origen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forzar un destino en todos los productos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forzar el empaquetado de todos los productos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "¿Forzar „Poner en paquete\"?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Ocultar lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Ocultar nombre del lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Si la ubicación de origen se debe escanear, entonces la ubicación de destino" +" se debe escanear después de cada producto o no se debe escanear." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Si valide ahora, los productos restantes se añadirán a la entrega parcial" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Imagen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "En #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Traslado incompleto" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Número de artículo internacional usado para la identificación de producto." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajuste de inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Ajustes de inventario (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Ubicaciones de inventario" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Es un tipo de código de barras para albarán" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Déjelo" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"El producto de la línea debe ser escaneado antes de que la línea pueda ser " +"editada" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Ubicación" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Ubicación procesada" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lote/serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Ubicación de destino obligatoria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Escaneo obligatorio" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Ubicación de origen obligatoria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "No" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "No hay %(picking_type)s listo para este %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Sin escaneo" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"No hay tipo de operación interna. Configure una en los ajustes del almacén." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"No hay albarán, ubicación o producto que corresponda con el código de barras" +" %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"No hay albarán o producto que corresponda con el código de barras " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" +"No se encontró ningún producto, lote o paquete para el código de barras %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "No fue el escaneo esperado" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Abrir albarán" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Abrir formulario de albarán" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operaciones" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Escaneo opcional" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Propietario" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "El tipo de paquete %s se aplicó correctamente al paquete %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Paquetes" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Empaquetado" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Cantidad de empaquetado" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Ubicación padre" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Destino padre de la ubicación " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Número de movimientos parciales" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Albarán" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detalle del albarán" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipo de albarán" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Por favor, escanee la ubicación de destino de %s antes de escanear otro " +"producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "¡Escanee de nuevo!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Presione Validar o escanee otro producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Imprimir códigos de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Imprimir albarán de entrega" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Imprimir inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Imprimir paquetes" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Imprimir operaciones de picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Producto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Códigos de barras de productos" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de producto (línea de movimiento de stock)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Empaquetado del producto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Código de referencia de producto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Cuanto de stock del producto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidad de medida del producto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Poner en paquete" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Poner en paquete" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Cantidad hecha" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Cantidad" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Cantidad hecha" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" +"Cantidad del empaquetado en la UdM de la línea de movimiento de stock." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Cuantos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Eliminar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Devolver productos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Las devoluciones solo se pueden crear para los pickings ya hechos, valídelos" +" primero. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Escanee" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Escanear una ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Escanear un número de lote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Escanee un número de lote o un paquete y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Escanee un número de lote y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Escanear un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Escanear un paquete o poner en paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Escanear un paquete o la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Escanear un paquete, la ubicación de destino u otro producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Escanear un producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Escanee un producto antes de escanear un número de rastreo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Escanee un producto de %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Escanee un producto en %s o escanee otra ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Escanee un producto o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Escanee un producto u otro paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Escanee un producto o la ubicación de destino." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Escanee un producto y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Escanee un producto, un número de lote/serie o paquete para filtrar los " +"traslados." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Escanee un producto, un paquete o la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Escanee un producto, un paquete o la ubicación de destino." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Escanear un número de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Escanear un número de serie o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Escanear un número de serie o un paquete y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Escanear un número de serie y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Escanee un traslado o un producto para filtrar sus registros" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Escanee un traslado, un producto o un paquete para filtrar sus registros" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Escanee" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Escanear otro número de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Escanee números de lote para el producto %s para cambiar su cantidad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Escanear más números de lote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Escanear más números de lote o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Escanee más productos en %s o escanee otra ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Escanear más productos o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Escanear más productos o escanear una nueva ubicación de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Escanee números de serie para el producto %s para cambiar su cantidad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Escanear la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Escanear el paquete %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Escanear la ubicación origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Escanee la ubicación de origen o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"La cantidad escaneada utiliza %s como Unidad de Medida, pero esta UdM no es " +"compatible con la de la línea (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"La cantidad escaneada utiliza %s como unidad de medida, pero esta UdM no es " +"compatible con la del producto (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Escaneando el paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Desechar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Seleccione un producto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Número de serie/lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Mostrar nomenclatura de código de barras" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Mostrar validación de código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Ubicación de origen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Paquete de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Quedarse en el traslado" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de stock" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tipo de paquete de stock" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Presione para escanear" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Campo técnico que indica si se debe usar en la aplicación Código de barras y" +" se usa para controlar la visibilidad en la interfaz del usuario " +"relacionada." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Campo técnico que se utiliza para calcular si se debe mostrar el grupo " +"\"Validación final\", resolviendo los grupos combinados y la complejidad " +"invisible." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "El ajuste de inventario ha sido validado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "La ubicación escaneada no pertenece al destino de esta operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "La ubicación escaneada no pertenece a la ubicación de esta operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "El número de serie escaneado ya está en uso." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Se ha cancelado el traslado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Se ha validado el traslado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "No hay nada que aplicar en esta página." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "No hay nada que imprimir en esta página." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Este paquete ya ha sido escaneado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Ya se ha hecho este picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Este albarán de picking está cancelado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Este número de serie ya está en uso." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "A procesar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Pendiente" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Habilite \"paquetes\" en los ajustes para utilizar paquetes." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Traslado" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nombre del traslado" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Los traslados le permiten mover productos de una ubicación a otra." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Ingrese el código de barras que quiera escánear aquí " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unidad de medida" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UdM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Usar cámara para escánear " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor del último código de barras escaneado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visor" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Almacén" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Hemos creado algunos datos de demostración con códigos de barras para que " +"pueda explorar las funciones. Imprime la" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Unidad de medida equivocada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Está a punto de tomar el producto %(productName)s de la ubicación %(locationName)s, sin embargo, este producto no está reservado en esta ubicación.\n" +"Escanee la ubicación actual para confirmarlo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Debe escanear uno o más productos o un paquete disponible en la ubicación " +"del picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Debe escanear uno o más productos." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Debe escanear %s u otra ubicación de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"No puede aplicar un tipo de paquete. Primero, escanee un producto o " +"seleccione una línea" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "No puede registrar desechos en este estado de la operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Ya ha escaneado %s artículos de este paquete. ¿Desea escanear todo el " +"paquete?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Ha procesado menos productos que la demanda inicial:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Debe escanear un paquete o poner en paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Debe escanear un producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "los comandos y tipos de operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "un documento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "una ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "un tipo de operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "un producto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "productos no se procesaron en absoluto." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "productos se procesaron parcialmente." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "hoja de códigos de barras de stock" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"para ver lo que este módulo puede hacer. También puede imprimir el código de" +" barras para" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "para crear un nuevo traslado desde esta ubicación." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "para crear un nuevo traslado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "para conocer su contenido." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "para abrirlo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "para mostrar su ubicación y cantidad." diff --git a/stock_barcode/i18n/es_419.po b/stock_barcode/i18n/es_419.po new file mode 100644 index 0000000..d5cc375 --- /dev/null +++ b/stock_barcode/i18n/es_419.po @@ -0,0 +1,1842 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Lucia Pacheco, 2023 +# Patricia Gutiérrez Capetillo , 2023 +# Iran Villalobos López, 2023 +# Fernanda Alvarez, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s no se puede incluir en el inventario. Solo se pueden incluir productos " +"almacenables." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Imprimir comandos del código de barras y tipos de" +" operación" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" +" Imprimir hoja de demostración de códigos de " +"barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Imprimir ubicaciones de almacenaje " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Un producto rastreado por números de serie no puede tener múltiples " +"cantidades para el mismo número de serie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Agregar producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "¿Agregar producto adicional?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Después de cada producto" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Después de un grupo de productos" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Ya se han devuelto todos los productos " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Todos los productos deben empacarse" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Asignación" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Permitir validación de recolección completa" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Permitir validar una recolección incluso si no se ha escaneado nada aún (y " +"luego realizar un traslado inmediato)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Escaneó un tipo de paquete que no existe. No es posible procesar esta parte " +"del código de barras." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Aplicar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "¿Está seguro de que quiere cancelar esta operación? " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Orden parcial " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmación de orden parcial" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Código de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplicación Código de barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Acción del cliente de código de barras de inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Ingreso manual del código de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura del código de barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Acción del cliente de recolección de código de barras" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de barras escaneado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Escaneo de código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"El escaneo del código de barras es ambiguo con varios modelos: %s. Utilice " +"el más probable." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Los códigos de barras no están disponibles. " + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Caja de organización para cables" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Cancelar la operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Cancelar traslado" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Cancelar operación" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "¿Cancelar esta operación?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configurar códigos de barras de productos" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Cantidades contadas" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Crear un nuevo traslado" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Gabinete personalizado (Métrico)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Gabinete personalizado (Estados Unidos)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Eliminar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Datos de prueba activos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Ubicación de destino" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Paquete de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "La ubicación de destino se debe escanear" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Descartar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nombre en pantalla" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"¿Desea eliminar este mensaje de forma permanente? No volverá a aparecer, " +"asegúrese de que no necesita la hoja de códigos de barras o de tener una " +"copia." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"¿El recolector debe empaquetar los productos escaneados? Si es así, ¿con qué" +" tarifa?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "¿El recolector debe escanear el destino? Si es así, ¿con qué tarifa?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "No cancelar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "No volver a mostrar este mensaje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Hecho /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Descargar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Prueba" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Número de movimientos vacíos" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validación final" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Se creó la siguiente orden parcial: " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Se crearon las siguientes ordenes parciales: " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "¿Forzar el escaneo de ubicación de destino?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "¿Forzar el escaneo de número de serie o de lote?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "¿Forzar el escaneo del producto?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "¿Forzar el escaneo de la ubicación de origen?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forzar un destino en todos los productos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forzar el empaquetado de todos los productos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "¿Forzar empaquetado?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Ocultar lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Ocultar nombre del lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Si la ubicación de origen se debe escanear, entonces la ubicación de destino" +" se debe escanear después de cada producto o no se debe escanear." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Si valida ahora, los productos restantes se agregarán a la orden parcial." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Imagen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "En #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Traslado incompleto" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Número de artículo internacional usado para identificar el producto." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajuste de inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Ajustes de inventario (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Ubicaciones de inventario" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Es un tipo de código de barras de recolección" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Conservar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"El producto de la línea se debe escanear antes de que se pueda editar la " +"línea" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Ubicación" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Ubicación procesada" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Número de lote/serie " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Ubicación de destino obligatoria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Escaneo obligatorio" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Ubicación de origen obligatoria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "No" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "No hay %(picking_type)s preparado para este %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Sin escaneo" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"No hay ningún tipo de operación interna. Configure uno en los ajustes del " +"almacén." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"No hay recolección, ubicación o producto que corresponda con el código de " +"barras %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"No hay recolección o producto que corresponda con el código de barras " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "No se encontró un producto, lote o paquete en el código de barras %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "No fue el escaneo esperado" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Abrir recolección" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Formulario de recolección abierta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operaciones" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Escaneo opcional" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Propietario" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "El tipo de paquete %s se aplicó correctamente al paquete %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Paquetes" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Embalaje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Cantidad de embalaje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Ubicación principal" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Destino principal de la ubicación " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Número de movimientos parciales" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Recolección" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detalles de recolección" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipo de recolección" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Escanee la ubicación de destino de %s antes de escanear otro producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "¡Escanee de nuevo!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Presione Validar o escanee otro producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Imprimir código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Imprimir recibo de entrega" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Imprimir inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Imprimir paquetes" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Imprimir operaciones de recolección" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Producto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Códigos de barras de productos" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimientos de producto (línea de movimiento de inventario)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Embalaje del producto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Código de referencia de producto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Cantidad de existencias del producto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidad de medida del producto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variante del producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Incluir en el paquete" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Incluir en el paquete" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Cantidad hecha" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Cantidad" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Cantidad hecha" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" +"Cantidad del empaquetado en la UdM de la línea de movimiento de existencias." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Cantidades" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Eliminarlo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Devolver productos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Las devoluciones solo se pueden crear para las recolecciones ya hechas, " +"valídela primero. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Escanear " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Escanear una ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Escanear un número de lote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Escanee un número de lote o un paquete y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Escanee un número de lote y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Escanear un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Escanear un paquete o poner en paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Escanee un paquete o la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Escanear un paquete, la ubicación de destino u otro producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Escanear producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Escanee un producto antes de escanear un número de rastreo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Escanear un producto de %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Escanear un producto en %s o escanear otra ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Escanee un producto o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Escanee un producto u otro paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Escanee un producto o la ubicación de destino." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Escanee un producto y después la ubicación de destino." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Escanee un producto, un número de serie, de lote o un paquete para filtrar " +"los traslados." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Escanee un producto, un paquete o la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Escanee un producto, un paquete o la ubicación de destino." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Escanee un número de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Escanee un número de serie o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Escanee un número de serie o un paquete y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Escanee un número de serie y después la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Escanee un traslado o un producto para filtrar sus registros" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Escanee un traslado, un producto o un paquete para filtrar sus registros" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Escanear" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Escanear otro número de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Escanee números de lote para el producto %s para cambiar su cantidad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Escanear más números de lote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Escanee más números de lote o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Escanee más productos en %s o escanee otra ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Escanee más productos o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Escanee más productos o escanee una nueva ubicación de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Escanee números de serie para el producto %s para cambiar su cantidad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Escanee la ubicación de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Escanee el paquete %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Escanee la ubicación de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Escanee la ubicación de origen o un paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"La cantidad escaneada utiliza %s como unidad de medida, pero esta UdM no es " +"compatible con la de la línea (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"La cantidad escaneada utiliza %s como unidad de medida, pero esta UdM no es " +"compatible con la del producto (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Escaneando el paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Desechar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Seleccione un producto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Número de serie/lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Mostrar la nomenclatura del código de barras" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Mostrar validación de código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Ubicación de origen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Paquete de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Mantener en el traslado" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Movimiento de existencias" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tipo de paquete de existencias" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toque para escanear" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Campo técnico que indica si se debe usar en la aplicación Código de barras y" +" se usa para controlar la visibilidad en la interfaz del usuario " +"relacionada." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Campo técnico que se utiliza para calcular si debe aparecer el grupo " +"\"Validación final\", resolviendo los grupos combinados y la complejidad " +"invisible." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Se validó el ajuste de inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "La ubicación escaneada no pertenece al destino de esta operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "La ubicación escaneada no pertenece a la ubicación de esta operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "El número de serie escaneado ya está en uso." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Se canceló el traslado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Se validó el traslado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "No hay nada que aplicar en esta página." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "No hay nada para imprimir en esta página." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Ya se escaneó este paquete." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Ya se ha hecho esta recolección" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Está recolección está cancelada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Este número de serie ya está en uso." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Por procesar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Por realizar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Active la función Paquetes en los ajustes para utilizarlos." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Trasladar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nombre del traslado" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Los traslados le permiten mover productos de una ubicación a otra." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Ingrese el código de barras que quiera escánear aquí " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unidad de medida" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UdM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Use la cámara para escanear" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validar " + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor del último código de barras escaneado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visor" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Almacén" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Creamos algunos datos de demostración con códigos de barras para que conozca" +" las funciones. Imprima la" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Unidad de medida errónea" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Está a punto de tomar el producto %(productName)s de la ubicación %(locationName)s, pero este producto no está reservado allí.\n" +"Escanee la ubicación actual para confirmarlo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Debe escanear uno o más productos o un paquete disponible en la ubicación de" +" la recolección" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Debe escanear uno o más productos." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Debe escanear %s u otra ubicación de origen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"No puede aplicar un tipo de paquete. Primero, escanee un producto o " +"seleccione una línea" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "No puede registrar desechos en este estado de la operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Ya escaneó %s artículos de este paquete. ¿Confirma que desea escanear todo " +"el paquete?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Procesó menos productos que la demanda inicial:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Debe escanear un paquete o empaquetar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Debe escanear un producto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "comandos y tipos de operación " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "documento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "ubicación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tipo de operación" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "paquete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "producto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "productos no se procesaron." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "productos se procesaron parcialmente." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "hoja de códigos de barras de existencias" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"para ver lo que este módulo puede hacer. También puede imprimir el código de" +" barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "para crear un nuevo traslado desde esta ubicación." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "para crear un nuevo traslado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "para conocer su contenido." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "para abrirlo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "para mostrar su ubicación y cantidad." diff --git a/stock_barcode/i18n/es_CL.po b/stock_barcode/i18n/es_CL.po new file mode 100644 index 0000000..952e301 --- /dev/null +++ b/stock_barcode/i18n/es_CL.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Spanish (Chile) (https://www.transifex.com/odoo/teams/41243/es_CL/)\n" +"Language: es_CL\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Producto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/et.po b/stock_barcode/i18n/et.po new file mode 100644 index 0000000..e039865 --- /dev/null +++ b/stock_barcode/i18n/et.po @@ -0,0 +1,1825 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Algo Kärp , 2023 +# Egon Raamat , 2023 +# Eneli Õigus , 2023 +# Rivo Zängov , 2023 +# Piia Paurson , 2023 +# Patrick-Jordan Kiudorv, 2023 +# Martin Trigaux, 2023 +# JanaAvalah, 2023 +# Triine Aavik , 2023 +# Katrin Kampura, 2023 +# Leaanika Randmets, 2023 +# Anna, 2024 +# Stevin Lilla, 2024 +# Martin Aavastik , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Martin Aavastik , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s ei saa inventeerida. Inventeerida saab ainult ladustatavaid tooteid." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "Prindi triipkoodi käsid ja operatsiooni tüübid" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Prindi triipkoodi demoleht" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "Prindi laoasukohad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Seerianumbriga jälgitavatel toodetel ei saa olla ühe seerianumbri all mitu " +"toodet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Lisa toode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Lisa lisa-toode?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Peale igat toodet" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Peale toodete gruppi" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Kõik tooted on juba tagastatud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Kõik tooted peavad olema pakitud" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Toodete eraldamine" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Luba kogu korje kinnitamine" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Lubage valimist kinnitada isegi siis, kui midagi pole veel skannitud (tehke " +"kohe ülekanne)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Skanneeriti olematut pakenditüüpi. Seda osa vöötkoodist ei saa töödelda." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Kinnita" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Kas oled kindel, et soovid selle tehingu tühistada?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Järeltellimus" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Järelsaatelehe kinnitus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Triipkood" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Triipkoodi rakendus" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Lao triipkoodi kliendi toiming" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Triipkoodi manuaalne sisestamine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Triipkoodi nomenklatuur" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Triipkoodi valimise kliendi toiming" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Triipkood loetud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Triipkoodi skaneerimine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Vöötkoodi skanneerimine on mitme mudeli puhul mitmetähenduslik: %s. Kasutage" +" kõige tõenäolisemat." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Triipkoodid ei ole saadaval." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kaablihalduskast" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Tühista" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Tühista toiming" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Tühista siire" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Tühista toiming" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Soovid toimingu tühistada?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Sulge" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Seadistused" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigureerige toote triipkoodid" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Kinnitage" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Loetud kogus" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Looge uus siire" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Loodud (kelle poolt?)" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Loodud" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Kohandatud kapp" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Kohandatud kapp (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Kustuta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Näidisandmed on aktiivsed" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Sihtkoht" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Sihtkoha pakend" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Sihtkoht peab olema skanneeritud" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Loobu" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Kuvatav nimi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Kas soovid jäädavalt selle sõnumi eemaldada? Seda rohkem enam ei kuvata, " +"seega veendu, et triipkoodi lehest oleks koopia." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Kas laotöötaja peab skanneeritud tooted ka pakkima? Kui jah, siis mis " +"tingimustel?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Kas laotöötaja peab sihtkohta skanneerima? Kui jah, siis mis tingimustel?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Ära tühista" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Ärge näidake seda sõnumit uuesti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Tehtud /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Laadi alla" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Fiktiivne" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Tühjade siirete arv" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Lõplik kinnitamine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Loodi järeltellimus:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Loodi järeltellimus:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Kas teha sihtkoha asukoha skanneerimine kohustuslikuks?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Kas teha partii-/seerianumbri skannimine kohustuslikuks?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Kas teha toote skanneerimine kohustuslikuks?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Kas teha asukoha allika skanneerimine kohustuslikuks?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Kohustuslik asukoht kõikidele toodetele" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Kõikide toodete pakkimine kohustuslik" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Kas pakki panemine on kohustuslik?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Peida partii" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Peida partii nimi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Kui allika asukohta tuleb skaneerida, siis sihtkohta tuleb skanneerida kas " +"pärast iga toodet või üldse mitte." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "Kui valideerida siire, luuakse ülejäänud kaubale järeltellimus:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Pilt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Pooleldi täidetud siire" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Toote identifitseerimiseks kasutatav rahvusvaheline tootekood." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Inventuur" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Inventuurid (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Ladude asukohad" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Viimati uuendatud" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Viimati uuendatud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Loobu" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Rea toode peab olema skaneeritud, enne kui rea saab redigeerida" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Asukoht" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Asukoht on töödeldud" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Partii/seerianumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Kohustuslik sihtkoht" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Kohustuslik skaneerimine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Kohustuslik lähtekoht" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ei" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Selle %(picking_type)s jaoks ei ole %(barcode_type)s valmis" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Skanneerimist pole" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Sisemise operatsiooni tüüp puudub. Palun konfigureerige see laoseadetes." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "Ükski korje, asukoht ega toode ei vasta triipkoodile %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Ükski korje ega toode ei vasta triipkoodile %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Triipkoodile ei leitud vastet %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nimestik" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Planeerimata skanneerimine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Ava korje" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Avatud valimise vorm" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Tegevused" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Valikuline skaneerimine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Omanik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Pakend" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Pakendi tüüp %s rakendati pakendile %s õigesti" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakendid" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Pakend" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Pakendi kogus" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Ülem asukoht" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Ülem sihtasukoht" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Osaline siirete arv" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Laoleht" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Laolehe detailid" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Noppetüüp" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Palun skaneerige sihtkoha %s enne muu toote skaneerimist" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Palun skaneerige uuesti!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Vajutage valideeri või skaneerige järgmine toode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Prindi triipkoodid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Prindi saateleht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Prindi ladu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Prindi pakid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Prindi lao operatsioonid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Toode" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Toote triipkoodid" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Toote liikumised" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Toote pakend" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Toote viitekood" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Toote lao kogus" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Toote mõõtühik" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Toote variatsioon" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Paki" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Paki" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Tehtud kogus" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Kogus" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Tehtud kogus" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Pakendite kogus laoliikumise rea ühikutes." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Koguseosad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Eemalda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Tagasta tooted" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Tagastused on võimalik luua ainult peale pakkimist, eelnevalt vajalik " +"valideerimine." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Skaneerige" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Skaneeri asukoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Skaneeri partiinumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Skaneeri partiinumber või pakk ja seejärel sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Skaneeri partiinumber ja seejärel sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Skaneeri pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Skaneeri pakk või paki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Skaneeri pakk või sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Skaneerige pakki, sihtkoha või muud toodet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Skaneeri toode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Skaneeri esmalt toode ja seejärel seerianumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Skaneeri toode %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Skaneeri tooded %s või skaneeri teine asukoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Skaneeri toode või pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Skaneeri toode või teine pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Skaneeri toode või sihtkoht." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Skaneeri toode ning seejärel sihtkoht" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "Skanneeri toode, seerianumber või pakk, et filtreerida siirdeid." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Skaneeri toode, pakk või sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Skaneeri toode, pakk või sihtkoht." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Skaneeriga seerianumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Skaneerige seerianumber või pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Skaneerige seerianumber või pakend, seejärel sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Skaneeri seerianumber ja seejärel sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Skaneeri siire või toode, et filtreerida kirjeid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Skaneeri siire, toode või pakk, et filtreerida kirjeid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Skaneerige" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Skaneeri järgmine seerianumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Skaneeri partiinumbrid tootel %s koguse muutmiseks" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Skaneeri veel partiinumbreid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Skaneeri veel partiinumbreid või pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Skaneeri veel tooteid %s või skaneeri teine asukoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Skaneeri veel tooteid või pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Skaneerige veel tooteid või skaneerige uus lähtekoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Skaneeri toote %s seerianumber, et muuta kogust" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skaneeri sihtkoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Skaneeri pakk %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Skaneeri lähtekoht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Skaneeri lähtekoht või pakk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Skaneeritud kogus kasutab %s mõõtühikuks, kuid see mõõtühik ei ühildu rea " +"mõõtühikuga(%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Skaneeritud kogus kasutab %s mõõtühikuks, kuid see mõõtühik ei ühildu toote " +"mõõtühikuga(%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Praak" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Valige toode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Seeria/partiinumber" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Näita triipkoodi nomenklatuuri" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Näita triipkoodi valideerimist" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Lähtekoht" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Pakk (kust?)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Jää siirdele" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Laoliikumine" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Lao pakendi tüüp" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Puuduta skaneerimiseks" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Inventuur on kinnitatud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "Skanneeritud asukoht ei kuulu operatsiooni sihtkohta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Skanneeritud asukoht ei kuulu operatsiooni asukohta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Skaneeritud seerianumber on juba kasutusel." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Ülekanne on tühistatud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Ülekanne on kinnitatud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Sellel lehel ei ole midagi taotleda." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Sellel lehel ei ole midagi printida." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "See pakend on juba skaneeritud." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "See korje on juba tehtud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "See korje on tühistatud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "See seerianumber on juba kasutusel." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Töösse" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Tegemiseks" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Pakkide kasutamiseks, aktiveerige \"Pakid\" seadete alt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Siirded" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Siirde nimi" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Siirded võimaldavad teil liigutada tooteid ühest asukohast teise." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Kirjuta siia triipkood, mida soovid skännida" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Mõõtühik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Mõõtühikud" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Kasuta skännimiseks kaamerat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Valideeri" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Viimase skaneeritud triipkoodi väärtus." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Ülevaataja" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Ladu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Me lõime teile triipkoodidega mõned demoandmed, et te saaksite funktsioone " +"uurida. Printige" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Vale mõõtühik" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Te olete võtmas toodet %(productName)s asukohast %(locationName)s, aga see toode ei ole reserveeritus siin asukohas.\n" +"Skaneeriga praegust toodet et kinnitada." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Peate komplekteerimiskohas skanneerima ühe või mitu saadaolevat toodet või " +"pakki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Teil on tarvis veel skaneerida üks või enam toodet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Te peaksite skaneerima %s või teise lähtekoha" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Te ei saa pakenditüüpi rakendada. Kõigepealt skanneerige toode või valige " +"rida" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Ei saa registreerida praaki selles operatsiooni staatuses." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Te olete skanneerinud %s toodet selles pakendis. Kas te soovite skaneerica " +"kogu pakendi?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Te olete töödelnud vähem tooteid kui esialgselt nõutud oli:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Te peate skaneerima paki või pakkima" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Te peate skaneerima toote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "Käsud ja operatsiooni tüübid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument," + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "asukoht," + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tegevuse tüüp," + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "pakend" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "toode," + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "tooteid ei töödeldud." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "tooted töödeldi osaliselt." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "lao triipkoodide leht" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"et uurida, mida selle mooduliga saab teha! Te saate ka triipkoodi välja " +"printida" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "et luua sellest asukohast uus siire." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "et luua uus siire." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "et näha paki sisu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "et seda avada." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "et kuvada asukohta ja kogust." diff --git a/stock_barcode/i18n/eu.po b/stock_barcode/i18n/eu.po new file mode 100644 index 0000000..d07923f --- /dev/null +++ b/stock_barcode/i18n/eu.po @@ -0,0 +1,1616 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +# Eneko , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Eneko , 2018\n" +"Language-Team: Basque (https://www.transifex.com/odoo/teams/41243/eu/)\n" +"Language: eu\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Ezeztatu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Nork sortua" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Created on" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Izena erakutsi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produktua" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/fa.po b/stock_barcode/i18n/fa.po new file mode 100644 index 0000000..6bd618a --- /dev/null +++ b/stock_barcode/i18n/fa.po @@ -0,0 +1,1778 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Arash Sardari , 2023 +# سید محمد آذربرا , 2023 +# fardin mardani , 2023 +# Hamid Darabi, 2023 +# Yousef Shadmanesh , 2023 +# Martin Trigaux, 2023 +# Mohsen Mohammadi , 2023 +# Hanna Kheradroosta, 2023 +# Hamed Mohammadi , 2024 +# Mostafa Barmshory , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Mostafa Barmshory , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " برگه دمو بارکد را چاپ کنید" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "محصول را اضافه کنید " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "تخصیص" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "اعمال" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "تایید سفارش معوق" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "بارکد" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "نامگذاری بارکد" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "بارکد اسکن شده" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "اسکن بارکد" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "لغو" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "بستن" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "تنظیمات پیکربندی" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "پیکربندی بارکدهای محصول" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "تایید کردن" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "مخاطب" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "مقدار شمارش شده" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "ایجادشده در" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "حذف" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "مکان مقصد" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "بسته مقصد " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "رها کردن" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "نام نمایش داده شده" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "دیگر این پیام را نشان نده" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "دانلود" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "ساختگی" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "اعتبار سنجی نهایی" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "شناسه" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "تصویر" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "انبارگردانی" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "مکان های انبارداری" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "آخرین بروز رسانی توسط" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "آخرین بروز رسانی در" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "مکان" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "سری/سریال" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "خیر" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "هیچ انتخاب یا محصولی مطابق با بارکد %(barcode)s وجود ندارد" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "نامگذاری" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "عملیات" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "مالک‌" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "بسته" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "بسته‌ها" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "بسته بندی" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "تعداد بسته بندی" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "مکان مادر" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "برداشتن" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "نوع برداشت" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "لطفا، دوباره اسکن کنید!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "محصول" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "بارکد محصولات" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "انتقال محصول (مسیر انتقال موجودی)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "بسته بندی محصول" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "واحد اندازه گیری محصول" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "گونه محصول" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "بگذار در بسته" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "تعداد" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "تعداد انجام شد" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "حذف شود" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "برگرداندن محصولات" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "اسقاط" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "انتخاب یک محصول" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "شماره سریال/ سری ساخت" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "محل منبع" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "بسته منبع" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "انتقال موجودی" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "نوع بسته بندی موجودی" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "برای اسکن ضربه بزنید" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "برای پردازش" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "جهت اقدام" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "انتقال" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"انتقال به شما امکان می دهد محصولات را از یک مکان به مکان دیگر منتقل کنید." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "واحد اندازه‌گیری" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "واحد اندازه گیری" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "تایید اعتبار" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "مقدار آخرین بارکد اسکن شده" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "بیننده" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "انبار" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "واحد اندازه گیری اشتباه" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "سند" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "پکیج" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "محصول" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/fi.po b/stock_barcode/i18n/fi.po new file mode 100644 index 0000000..8c1bd44 --- /dev/null +++ b/stock_barcode/i18n/fi.po @@ -0,0 +1,1826 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Teemu Tiitinen, 2023 +# Atte Isopuro , 2023 +# Antti Oksman , 2023 +# Kari Lindgren , 2023 +# Tuomas Lyyra , 2023 +# Mikko Närjänen , 2023 +# Svante Suominen , 2023 +# Veikko Väätäjä , 2023 +# Tuomo Aura , 2023 +# Martin Trigaux, 2023 +# Marko Happonen , 2023 +# Jarmo Kortetjärvi , 2023 +# Miku Laitinen , 2023 +# Ossi Mantylahti , 2024 +# Jussi Lehto , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Jussi Lehto , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s ei voida inventoida. Vain varastoitavia tuotteita voidaan inventoida." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " Tulosta viivakoodikomennot ja toimintatyypit" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Tulosta viivakoodien demoarkki" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Tulosta varastointipaikat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Sarjanumeroiden perusteella seuratulla tuotteella ei voi olla usea " +"kappaletta samaa sarjanumeroa." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Lisää tuote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Lisätä lisätuotetta?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Joka tuotteen jälkeen" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Joka tuotteiden ryhmän jälkeen" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Kaikki tuotteet on jo palautettu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Kaikki tuotteet on pakattava" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Varaus" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Salli koko poiminnan vahvistus" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Mahdollistaa poiminnan vahvistuksen, vaikka mitään ei olisi vielä skannattu " +"(näin tehdään välitön siirto)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Ei-olemassa oleva pakettityyppi skannattiin. Tätä viivakoodin osaa ei voida " +"käsitellä." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Vahvista" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Haluatko varmasti peruuttaa tämän toimenpiteen?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Jälkitoimitus" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Jälkitoimituksen vahvistus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Viivakoodi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Viivakoodisovellus" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Viivakoodi Varaston asiakkaan toiminta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Viivakoodin manuaalinen syöttö" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Viivakoodi nimistö" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Viivakoodin keräily asiakaan stoiminta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Viivakoodi skannattu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Viivakoodin skannaus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Viivakoodin skannaus on monitulkintainen usean mallin kanssa: %s. Käytä " +"todennäköisintä." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Viivakoodeja ei ole saatavilla." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kaapelin hallintalaatikko" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Peruuta" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Peruuta toiminto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Peruuta siirto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Peruuta toiminto" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Peruutetaanko tämä operaatio?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Sulje" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Asetukset" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Tuotteen viivakoodien määrittäminen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Vahvista" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakti" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Laskettu määrä" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Luo uusi siirto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Luonut" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Luotu" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Räätälöity kaappi (metrinen)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Räätälöity kaappi (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Poista" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Demodata on käytössä" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Kohdepaikka" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Kohdepakkaus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Määränpään sijainti on skannattava" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Hylkää" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Näyttönimi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Haluatko poistaa tämän viestin pysyvästi ? Se ei tule enää näkyviin, joten " +"varmista, ettet tarvitse viivakoodeja tai että sinulla on niistä kopio." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Tuleeko keräilijän laittaa skannatut tuotteet pakettiin? Jos vastaus on " +"kyllä, millä nopeudella?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "Onko keräilijän skannattava kohde? Jos kyllä, millä nopeudella?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Älä peruuta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Älä näytä tätä viestiä uudelleen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Tehty /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Lataa" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Tyhjä" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Tyhjien siirtojen määrä" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Lopullinen vahvistus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Luotiin seuraava jälkitoimitus:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Luotiin seuraavat jälkitoimitukset:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Pakota määränpään sijainnin skannaus?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Pakota erä- tai sarjanumeron skannaus?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Pakota tuotteen skannaus?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Pakota lähdesijainnin skannaus?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Pakota määränpää kaikkiin tuotteisiin" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Pakota kaikki tuotteet pakattaviksi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Pakta laittaminen pakettiin?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Piilota erä" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Piilota erän nimi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Jos lähdepaikka on skannattava, kohdepaikka on joko skannattava jokaisen " +"tuotteen jälkeen tai jätettävä kokonaan skannaamatta." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Jos vahvistat nyt, jäljellä olevat tuotteet lisätään jälkitoimitukseen." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Kuva" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Puutteellinen siirto" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Kansainvälistä tuotenumeroa (IAN) käytetään tuotteen tunnistamiseen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Inventaario & saldomuutos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Varaston oikaisut (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Inventaariopaikat" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Onko viivakoodi poimintatyyppi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Jätä se" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Rivin tuote on skannattava ennen kuin riviä voidaan muokata" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Sijainti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Sijainti käsitelty" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Erä/sarja" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Pakollinen kohdesijainti" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Pakollinen skannaus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Pakollinen lähdesijainti" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ei" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Ei %(picking_type)s valmiina %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Ei skannausta" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "Ei sisäistä toimintatyyppiä. Määritä sellainen varaston asetuksissa." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Ei viivakoodia vastaavaa poiminta- tai sijaintipaikkaa tai tuotetta " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Ei viivakoodia vastaavaa poimintaa tai tuotetta %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Viivakoodille %s ei löytynyt tuotetta, erää tai pakkausta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nimikkeistö" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Ei odotettu skannaus" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Avoin poiminta" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Avoin poiminta kohteesta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Toiminnot" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Valinnainen skannaus" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Omistaja" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Pakettityyppi %s on sovellettu oikein pakettiin %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakkaukset" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Paketointi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Pakkausmäärä" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Ylempi paikka" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Ylemmän tason sijainnin kohde" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Osittaisen siirron määrä" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Keräily" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Poiminnan yksityiskohdat" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Keräilyn tyyppi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Skannaa kohdepaikka %s ennen muiden tuotteiden skannausta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Skannaa uudelleen!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Paina Vahvista tai skannaa toinen tuote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Tulosta viivakoodit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Tulosta rahtikirja" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Tulosta inventaario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Tulostusta paketit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Tulosta poimintatoiminnot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Tuote" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Tuoteviivakoodit" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Tuotteiden siirrot (Stock Move Line)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Tuotepakkaukset" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Tuotteen viitekoodi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Tuotteen varastomäärä" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Tuotteen yksikkö" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Tuotevariaatio" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Lisää pakettiin" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Lisää pakettiin" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Määrä tehty" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Määrä" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Siirretty määrä" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Varastosiirron rivin pakkauksen mittayksikön määrä." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Määrät" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Poista" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Palauta tuotteet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Palautuksia voidaan luoda vain jo tehdyille poiminnoille, vahvista ne ensin." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Skannaa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Skannaa sijainti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Skannaa eränumero" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Skannaa eränumero tai paketit ja sitten kohteen paikka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Skannaa erän numero ja sitten määränpää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Skannaa paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Skannaa paketti tai laita se pakkaukseen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Skannaa paketti tai määränpää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Skannaa paketti, määränpää tai toinen tuote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Skannaa tuote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Skannaa tuote ennen seurantanumeron skannaamista" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Skannaa tuote lähteestä %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Skannaa tuote paikassa %s tai skannaa jokin muu paikka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Skannaa tuote tai paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Skannaa tuote tai toinen paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Skannaa tuote tai määränpää." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Skannaa tuote ja sitten määränpää" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "Skannaa tuote, erä-/sarjanumero tai pakkaus suodattaaksesi siirrot." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Skannaa tuote, paketti tai määränpää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Skannaa tuote, paketti tai määränpää." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Skannaa sarjanumero" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Skannaa sarjanumero tai paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Skannaa sarjanumero tai paketti ja valitse sitten määränpää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Skannaa sarjanumero ja sitten määränpää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Skannaa siirto tai tuote suodattaaksesi tietueesi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Skannaa siirto, tuote tai paketti suodattaaksesi tietueesi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Skannaa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Skannaa toinen sarjanumero" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Skannaa tuotteen %s eränumerot muuttaaksesi niiden määrää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Skannaa lisää eränumeroita" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Skannaa useampia eränumeroita tai pakkauksia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Skannaa lisää tuotteita kohdassa %s tai skannaa jokin muu paikka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Skannaa lisää tuotteita tai paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Skannaa lisää tuotteita tai skannaa uusi lähdepaikka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Skannaa tuotteen %s sarjanumerot muuttaaksesi niiden määrää" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skannaa määränpään sijainti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Skannaa paketti %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Skannaa lähteen sijainti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Skannaa lähdepaikka tai paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Skannattu määrä käyttää mittayksikkönä %s, mutta tämä mittayksikkö ei ole " +"yhteensopiva rivin mittayksikön (%s) kanssa." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Skannattu määrä käyttää mittayksikkönä %s, mutta tämä mittayksikkö ei ole " +"yhteensopiva tuotteen mittayksikön (%s) kanssa." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Skannataan pakettia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Romuta" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Valitse tuote" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Sarjanumero/eränumero" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Näytä viivakoodin nimikkeistö" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Näytä viivakoodin vahvistus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Lähtöpaikka" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Lähdepakkaus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Pysy siirrossa" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Varastosiirto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Varastopaketin tyyppi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Skannaa" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Tekninen kenttä, joka osoittaa, onko sitä käytettävä " +"viivakoodisovelluksessa, ja jota käytetään näkyvyyden ohjaamiseen siihen " +"liittyvässä käyttöliittymässä." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Tekninen kenttä, jota käytetään sen laskemiseen, pitäisikö \"Lopullinen " +"vahvistus\" -ryhmä näyttää, yhdistettyjen ryhmien / näkymättömän " +"monimutkaisuuden ratkaisemiseen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Varaston oikaisu on vahvistettu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "Skannattu sijainti ei kuulu tämän operaation kohteeseen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Skannattu sijainti ei kuulu tämän operaation sijaintiin" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Skannattu sarjanumero on jo käytössä." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Siirto on peruutettu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Siirto on vahvistettu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Tällä sivulla ei ole mitään, jonka voisi asettaa." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Tällä sivulla ei ole mitään tulostettavaa." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Tämä paketti on jo skannattu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Tämä poiminta on jo tehty" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Tämä poiminta on peruttu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Tämä sarjanumero on jo käytössä." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Tehtävänä" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Tehtävänä" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Jos haluat käyttää paketteja, ota 'Paketit' käyttöön asetuksissa" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Siirto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Siirron nimi" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Siirtojen avulla voit siirtää tuotteita paikasta toiseen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Kirjoita skannattava viivakoodi tähän" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Mittayksikkö" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Yksikkö" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Käytä kameraa skannaukseen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Vahvista" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Viimeksi skannatun viivakoodin arvo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Lukija" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Varasto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Olemme luoneet demodatoja viivakoodeilla, jotta voit tutustua " +"ominaisuuksiin. Tulosta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Väärä mittayksikkö" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Olet ottamassa tuotetta %(productName)s paikasta %(locationName)s, mutta tuotetta ei ole varattu tähän paikkaan.\n" +"Vahvista toimenpide skannaamalla nykyinen sijainti." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Sinun odotetaan skannaavan yhden tai useamman tuotteen tai pakkauksen, joka " +"on saatavilla poimintapaikalla" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Sinun odotetaan skannaavan yhden tai useamman tuotteen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Sinun pitää skannata %s tai jokin muu lähdepaikka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "Et voi soveltaa pakettityyppiä. Skannaa ensin tuote tai valitse rivi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Et voi rekisteröidä romua tässä operaation tilassa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Olet jo skannannut %s kohdetta tästä paketista. Haluatko skannata koko " +"paketin?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Olet käsitellyt vähemmän tuotteita kuin alkuperäinen kysyntä:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Sinun on skannattava paketti tai laitettava se pakettiin" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Sinun on skannattava tuote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}]" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "komennot ja toimintatyypit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokumentti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "sijainti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "toiminnon tyyppi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "paketti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "tuote" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "tuotteita ei käsitelty lainkaan." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "tuotteet on käsitelty osittain." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "varaston viivakoodiarkki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"tarkistaa, mitä tämä moduuli voi tehdä! Voit myös tulostaa viivakoodin" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "luodaksesi uuden siirron tästä sijainnista." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "luodaksesi uuden siirron." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "tietää sen sisällön." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "avataksesi sen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "sen sijainnin ja määrän osoittamiseksi." diff --git a/stock_barcode/i18n/fo.po b/stock_barcode/i18n/fo.po new file mode 100644 index 0000000..0b98f34 --- /dev/null +++ b/stock_barcode/i18n/fo.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Faroese (https://www.transifex.com/odoo/teams/41243/fo/)\n" +"Language: fo\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Strika" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Byrjað av" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Byrjað tann" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Vís navn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Seinast dagført av" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Seinast dagført tann" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Vøra" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/fr.po b/stock_barcode/i18n/fr.po new file mode 100644 index 0000000..b0a61ef --- /dev/null +++ b/stock_barcode/i18n/fr.po @@ -0,0 +1,1846 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Jolien De Paepe, 2024 +# Manon Rondou, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s ne peut pas être inventorié. Seuls les produits stockables peuvent être " +"inventoriés." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Imprimer les codes-barres des commandes et des " +"types d'opération" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Imprimer les commandes de codes-barres" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Imprimer les emplacements de stockage" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Un produit tracké par numéros de série ne peut avoir des quantités multiples" +" pour le même numéro de série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Ajouter un produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Ajouter un produit supplémentaire ?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Après chaque produit" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Après groupe de produits" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Tous les produits ont déjà été retournés" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Tous les produits doivent être emballés" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Allocation" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Autoriser la validation complète du transfert" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Autoriser la validation d'un transfert même si rien n'a encore été scanné " +"(et donc, faire un transfert immédiat)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Un type de colis non existant à été scanné. Cette information ne sera pas " +"interprétée." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Appliquer" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Êtes-vous sûr de vouloir annuler cette opération ?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Reliquat" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmation de reliquat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Code-barres" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "App Code-barres" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Barcode Inventory Client Action" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Saisie manuelle du code-barres" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclature des codes-barres" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Action client de la préparation par code-barres" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Code barre scanné" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Scan du code-barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Scan de code-barres ambigu avec plusieurs modèles:%s. Utilisez le plus " +"probable." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Les codes-barres ne sont pas disponibles." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Boîtier pour cables" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Annuler" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Annuler le transfert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Annuler le transfert" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Annuler l'opération" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Annuler cette opération ?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Fermer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configurer les codes-barres des produits" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Quantité comptée" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Créer un nouveau transfert" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Armoire sur mesure (Métrique)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Armoire sur mesure (États-Unis)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Supprimer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Données de démonstration activées" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Emplacement de destination" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Colis de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "L'emplacement de destination doit être scanné" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Ignorer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Voulez-vous supprimer ce message définitivement ? Il n'apparaîtra plus, donc" +" soyez sûr de ne pas avoir besoin de la feuille de codes-barres ou d'en " +"garder une copie." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Le préparateur doit-il mettre dans un colis les produits scannés ? Si oui, à" +" quelle fréquence ?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Le préparateur doit-il scanner la destination ? Si oui, à quelle fréquence ?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Ne pas annuler" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Ne plus montrer ce message" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Fait /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Télécharger" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Factice" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Nombre de mouvements vides" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validation finale" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Le reliquat suivant est créé :" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Les reliquats suivants sont créés :" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Forcer le scan de l'emplacement destination ?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Forcer le scan du numéro de lot/de série ?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Forcer le scan du produit ?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Forcer le scan de l'emplacement d'origine ?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forcer une destination sur tous les produits" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forcer le colisage de tous les produits" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Forcer le colisage ?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Masquer le lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Masquer le nom du lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Si l'emplacement d'origine doit être scanné, l'emplacement de destination " +"doit être scanné après chaque produit ou pas scanné du tout." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Si vous validez maintenant, les produits restants seront ajoutés à un " +"reliquat." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Image" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "Dans #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Transfert incomplet" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Numéro d'article international (IAN) utilisé pour identifier cet article." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajustement d'inventaire" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Ajustements d'inventaire (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Emplacements de l'inventaire" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Code-barres est type de transfert" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Mis à jour le" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Laisser" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"Le produit de la ligne doit être scanné avant que la ligne puisse être " +"modifiée" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Emplacement" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Emplacement traité" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Emplacement de destination obligatoire" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Scan obligatoire" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Emplacement d'origine obligatoire" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Non" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Aucun %(picking_type)s prêt(s) pour ce %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Aucun scan" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Pas de type d'opération interne. Configurez-en un dans les paramètres de " +"l'entrepôt." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Aucun transfert, emplacement ou produit correspondant à ce code-barres " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Aucun transfert ou produit correspondant à ce code-barres %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Aucun produit, lot ou colis n'a été trouvé pour le code-barres %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclature" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Pas le scan attendu" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Ouvrir le transfert" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Ouvrir un formulaire de transfert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Opérations" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Scan optionnel" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Détenteur" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Le type de colis %s à été correctement appliqué au colis%s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Colis" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Conditionnement" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Qté de conditionnements" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Emplacement parent" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Emplacement parent de destination" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Nombre de mouvements partiels" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Transfert" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Détails du transfert" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Type de transfert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Veuillez scanner l'emplacement de destination pour %s avant de scanner un " +"autre produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Veuillez scanner à nouveau !" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Appuyez sur Valider ou scannez un autre produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Imprimer les codes-barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Imprimer le bon de livraison" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Imprimer inventaire" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Imprimer des colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Imprimer les opérations de transfert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produit" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Codes-barres de produits" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Mouvements de produit (Ligne de mouvement de stock)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Conditionnement des produits" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Code de référence du produit" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Quantité du produit en stock" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unité de mesure du produit" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variante de produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Mettre en colis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Mettre en colis" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Qté faite" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Quantité" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Quantité faite" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" +"Quantité de conditionnements dans la nomenclature de la ligne de mouvement " +"de stock." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quantités" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Retirer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Retourner les produits" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Les retours peuvent uniquement être créés pour des transferts qui sont " +"faits. Veuillez d'abord les valider." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scanner un(e)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Scanner un emplacement" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Scanner un numéro de lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Scanner un numéro de lot ou un colis puis l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Scanner un numéro de lot puis l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Scanner un colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Scanner un colis ou mettre en colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Scanner un colis ou l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Scanner un colis, l'emplacement de destination ou un autre produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Scanner un produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Scanner un produit avant de scanner un numéro de tracking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Scanner un produit de %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Scanner un produit dans %s ou scanner un autre emplacement" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Scanner un produit ou un colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Scanner un produit ou un autre colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Scanner un produit ou l'emplacement de destination." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Scanner un produit puis l'emplacement de destination" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Scanner un produit, un numéro de série/lot ou un colis pour filtrer les " +"transferts." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Scanner un produit, un colis ou l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Scanner un produit, un colis ou l'emplacement de destination." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Scanner un numéro de série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Scanner un numéro de série ou un colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Scanner un numéro de série ou un colis puis l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Scanner un numéro de série puis l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Scanner un transfert ou un produit pour filtrer vos enregistrements" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Scanner un transfert, un produit ou un colis pour filtrer vos " +"enregistrements" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scanner un(e)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Scanner un autre numéro de série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" +"Scanner les numéros de lot des produits %s pour modifier leur quantité" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Scanner plus de numéros de lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Scanner plus de numéros de lot ou un colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Scanner plus de produits dans %s ou scanner un autre emplacement" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Scanner plus de produits ou un colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Scanner plus de produits, ou scanner un nouvel emplacement d'origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Scanner les numéros de série du produit %s pour modifier leur quantité" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Scanner l'emplacement de destination" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Scanner le colis %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scanner l'emplacement d'origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Scanner l'emplacement d'origine ou un colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"La quantité scannée utilise %s comme unité de mesure, mais cette unité de " +"mesure n'est pas compatible avec celle de la ligne (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"La quantité scannée utilise '%s' comme unité de mesure, non compatible avec " +"celle du produit (%s)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Scannez le colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Rebut" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Sélectionner un produit" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Numéro de série / lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Montrer la nomenclature des codes-barres" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Afficher la validation des codes-barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Emplacement d'origine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Colis d'origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Rester sur le transfert" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Mouvement de stock" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Type de colis de stock" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toucher pour scanner" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Champ technique indiquant s'il doit être utilisé dans l'application Code-" +"barres et permettant de contrôler la visibilité dans l'interface utilisateur" +" correspondante." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Champ technique utilisé pour calculer si le groupe \"Validation finale\" " +"doit être affiché, résolvant les groupes combinés/complexité invisible." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "L'ajustement d'inventaire a été validé" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" +"L'emplacement scanné n'appartient pas à la destination de cette opération" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" +"L'emplacement scanné n'appartient pas à l'emplacement de cette opération" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Le numéro de série scanné est déjà utilisé." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Le transfert à été annulé" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Le transfert a été validé" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Il n'y a rien à appliquer sur cette page." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Il n'y a rien à imprimer sur cette page." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Ce colis est déjà scanné." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Ce transfert est déjà effectué" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Ce transfert est annulé" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Ce numéro de série est déjà utilisé." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "À traiter" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "À faire" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Pour utiliser les colis, activez 'Colis' dans la configuration" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transfert" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nom du transfert" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Les transferts vous permettent de déplacer des produits d'un emplacement à " +"un autre." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Tapez le code-barres que vous voulez scanner ici" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unité de mesure" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UdM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Utilisez la caméra pour scanner" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Valider" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valeur du dernier code-barres scanné." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visionneur" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Entrepôt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Nous avons créé des données de démonstration avec des codes-barres pour vous" +" laisser explorer les différentes fonctionnalités. Imprimez la" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Mauvaise unité de mesure" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Vous êtes sur le point de retirer le produit %(productName)s de l'emplacement %(locationName)s, mais ce produit n'est pas réservé dans cet emplacement. \n" +"Scannez l'emplacement actuel pour confirmer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "Vous êtes censé scanner un ou plusieurs produits/colis disponibles " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Vous devez scanner un ou plusieurs produits." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Vous êtes censé scanner %s ou un autre emplacement d'origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Vous ne pouvez pas appliquer de type de colis. Scannez d'abord un produit ou" +" sélectionnez une ligne." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Vous ne pouvez pas enregistrer des rebuts à ce stade de l'opération" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Vous avez déjà scanné %s articles de ce colis. Voulez-vous scanner " +"l'ensemble du colis ?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Vous avez traité moins de produits que la demande initiale :" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Vous devez scanner un colis ou mettre en colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Vous devez scanner un produit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "commandes et types d'opérations" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "document" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "emplacement " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "type d'opération" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "colis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produit" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "produits n'ont pas du tout été traités." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "produits ont été partiellement traités." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "feuille de codes-barres de stock" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"pour voir ce que ce module peut faire ! Vous pouvez aussi imprimer le code-" +"barres" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "pour créer un nouveau transfert depuis cet emplacement." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "pour créer un nouveau transfert." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "pour connaitre son contenu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "pour l'ouvrir." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "pour montrer son emplacement et sa quantité." diff --git a/stock_barcode/i18n/fr_CA.po b/stock_barcode/i18n/fr_CA.po new file mode 100644 index 0000000..34017ae --- /dev/null +++ b/stock_barcode/i18n/fr_CA.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: French (Canada) (https://www.transifex.com/odoo/teams/41243/fr_CA/)\n" +"Language: fr_CA\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "Identifiant" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produit" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/gl.po b/stock_barcode/i18n/gl.po new file mode 100644 index 0000000..0fef9da --- /dev/null +++ b/stock_barcode/i18n/gl.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Galician (https://www.transifex.com/odoo/teams/41243/gl/)\n" +"Language: gl\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Creado o" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/gu.po b/stock_barcode/i18n/gu.po new file mode 100644 index 0000000..a608e0d --- /dev/null +++ b/stock_barcode/i18n/gu.po @@ -0,0 +1,1618 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2018 +# Turkesh Patel , 2018 +# Dharmraj Jhala , 2018 +# Divya Pandya , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2018-10-02 10:32+0000\n" +"Last-Translator: Divya Pandya , 2018\n" +"Language-Team: Gujarati (https://www.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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "રદ કરો" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "બંધ કરો" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "ખાતરી" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "બનાવનાર" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "પ્રદર્શન નામ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "ડાઉનલોડ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ઓળખ" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "ઉત્પાદન" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "જથ્થો" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/he.po b/stock_barcode/i18n/he.po new file mode 100644 index 0000000..c6a4bcb --- /dev/null +++ b/stock_barcode/i18n/he.po @@ -0,0 +1,1781 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Netta Waizer, 2023 +# Ofir Blum , 2023 +# NoaFarkash, 2023 +# Martin Trigaux, 2023 +# david danilov, 2023 +# ExcaliberX , 2023 +# Yihya Hugirat , 2023 +# hed shefer , 2023 +# Lilach Gilliam , 2023 +# ZVI BLONDER , 2023 +# Roy Sayag, 2023 +# yael terner, 2024 +# Orel Nahmany, 2024 +# דודי מלכה , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: דודי מלכה , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "הוסף מוצר" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "האם להוסיף מוצר חדש?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "אפשר תיקוף מלא של פעולות ליקוט" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "החל" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "אישור הזמנה חוזרת" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "ברקוד" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "אפליקציית ברקוד" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "מונחי ברקוד" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "ליקוט ע\"י ברקוד פעולת משתמש קצה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "ברקוד נסרק" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "סריקת ברקוד" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "בטל" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "סגור" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "הגדר הגדרות" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "הגדר ברקודי מוצר" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "אשר" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "איש קשר" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "כמות שנספרה" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "צור העברה חדשה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "נוצר על-ידי" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "מחק" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "מיקום יעד" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "יעד חבילה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "בטל" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "שם לתצוגה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "אל תציג הודעה זו שוב" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "הורד" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "דמה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "אימות סופי" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "חייב איתור יעד לכל המוצרים" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "חייב שכל המוצרים יהיו ארוזים" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "מזהה" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "תמונה" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "ב #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "מספר זיהוי בינלאומי המשמש לזיהוי המוצר." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "התאמת מלאי" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "התאמת מלאי" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "מקומות המלאי" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על-ידי" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "עדכון אחרון ב" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "עזוב את זה" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "מיקום" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "עיבוד המיקום " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "מספר סידורי/אצווה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "חובת סריקה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "לא" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "אין סוג פעולה פנימי. נא הגדר אחד בהגדרות המחסן." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "מונחים" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "פתח טופס ליקוט" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "פעולות" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "אחראי" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "חבילה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "חבילות" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "אריזה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "כמות אריזה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "מיקום אב" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "ליקוט" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "פרטי ליקוט" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "סוג ליקוט" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "הדפסת תעודת משלוח" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "הדפס מלאי" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "הדפס פעולות ליקוט" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "מוצר" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "ברקודי מוצר " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "תנועות המוצר (תנועת שורת מלאי)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "אריזת מוצר" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "קוד מזהה מוצר" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "יחידת מידה של מוצר" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "וריאנט מוצר" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "הכנס לחבילה" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "הכנס לחבילה " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "כמות שהושלמה" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "כמות" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "כמות שבוצעה" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "אנליסטים כמותיים" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "הסר זאת" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "החזר מוצרים" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "סרוק " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "סרוק את החבילה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "סרוק מוצר" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "סרוק מוצר לפני סריקת מספר מזהה מוצר" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "סרוק מוצר מ%s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "סרוק מוצר או חבילה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "סרוק מוצר או חבילה אחרת" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "סרוק מוצר או את מיקום היעד." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "סרוק מוצר ולאחר מכן את מיקום היעד" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "סרוק מוצר, חבילה או מיקום היעד" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "סרוק מוצר, חבילה או מיקום היעד" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "סרוק העברה, מוצר, חבילה בכדי לסנן את הפעולות" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "סרוק " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "סרוק מוצרים נוספים או סרוק מיקום מוצא חדש" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "סרוק את החבילה%s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "סרוק את איתור המקור" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "פסול" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "בחר מוצר " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "מספר סידורי/ מספר אצווה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "מקום המוצא" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "חבילת מקור" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "תנועת מלאי" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "סוג חבילת מלאי" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "לחץ כדי לסרוק" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "התאמת המלאי אושרה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "המספר הסידורי שנסרק כבר היה בשימוש." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "ההעברה בוטלה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "ההעברה אושרה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "חבילה זו כבר סרוקה." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "ליקוט זה כבר בוצע" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "לביצוע" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "לביצוע" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "העברה" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "העברות מאפשרות לך להעביר מוצרים ממקום למקום." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "יחידת מידה" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "יחידת מידה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "אשר" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "הערך של הברקוד האחרון שנסרק." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "צופה" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "מחסן" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "יצרנו בשבילך נתוני הדגמה עם ברקודים כדי שתחקור את התכונות. הדפס את" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "אתה צפוי לסרוק מוצר אחד או יותר." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "סרקת פחות מוצרים מהביקוש הראשוני." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "אתה חייב לסרוק' מוצר" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "מסמך" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "מיקום" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "סוג פעולה " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "חבילה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "מוצר" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "מוצרים נסרקו חלקית" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "גיליון ברקודים של מלאי" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "כדי לבדוק מה מודול זה יכול לעשות! ניתן גם להדפיס את הברקוד" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "כדי ליצור העברה חדשה מהמיקום הזה." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "כדי ליצור העברה חדשה." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "בכדי לראות את התוכן שלה" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "כדי לפתוח אותו." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "בכדי לראות את המיקום והכמות שלו" diff --git a/stock_barcode/i18n/hr.po b/stock_barcode/i18n/hr.po new file mode 100644 index 0000000..a749f6b --- /dev/null +++ b/stock_barcode/i18n/hr.po @@ -0,0 +1,1627 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# KRISTINA PALAŠ , 2022 +# Milan Tribuson , 2022 +# Milan Tribuson , 2022 +# Hrvoje Sić , 2022 +# Vladimir Olujić , 2022 +# Marko Carević , 2022 +# Karolina Tonković , 2022 +# Vladimir Vrgoč, 2022 +# Tina Milas, 2022 +# Martin Trigaux, 2022 +# Mario Jureša , 2022 +# Bole , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Bole , 2023\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr " Ispiši barcode naredbe" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "Dodaj proizvod" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Dodjela" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Primijeni" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Potvrda zaostalog naloga" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barkod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Barkod nomenklatura" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barkod čitač" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Skeniranje barkodova" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Odustani" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Postavke" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfiguriraj barkodove artikala" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Potvrdi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Prebrojana količina" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "Obriši" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "Odredišna lokacija" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Odredište paketa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Odbaci" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Ne prikazuj ponovno ovu poruku" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Preuzimanje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Prazan" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Finalna validacija" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "Općenito" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Interna šifra proizvoda koja se koristi za identifikaciju artikla." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Unos inventure" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "Unos inventure" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lokacije inventure" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Promijenio" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Vrijeme promjene" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Ostavi" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Lokacija" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/Serija" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ne" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatrua" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacije" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Vlasnik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Paketi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Pakiranje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Skladišnice" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Vrsta dokumenta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Proizvod" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Barkodovi proizvoda" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Skladišna kretanja proizvoda(stavke)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "JM proizvoda" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Varijanta proizvoda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Količina" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Obrađena količina" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Količine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Ukloni" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skenirajte odredišnu lokaciju" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Otpis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serijski/lot broj" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Izvorna lokacija" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Izvorni paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Pritisni za skeniranje" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Za obraditi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Prijenos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Jedinica mjere" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UoM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Odobri" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Vrijednost posljednjeg skeniranog barkoda." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Skladište" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "lokacija" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "proizvod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "zapis skladišnih barkodova" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/hu.po b/stock_barcode/i18n/hu.po new file mode 100644 index 0000000..4828270 --- /dev/null +++ b/stock_barcode/i18n/hu.po @@ -0,0 +1,1777 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Daniel Gerstenbrand , 2023 +# 5768b353f27900ae76ad88cc42dfd5b8_3bb349f, 2023 +# Gergő Kertész , 2023 +# Zsolt Godó , 2023 +# Tamás Dombos, 2023 +# Ákos Nagy , 2023 +# Tamás Németh , 2023 +# gezza , 2023 +# Martin Trigaux, 2023 +# krnkris, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: krnkris, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Termék hozzáadása" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Kiosztás" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Alkalmaz" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Visszamaradt rendelés jóváhagyása" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Vonalkód" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Vonalkód nómenklatúra" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Vonalkód leolvasva" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Vonalkód leolvasás" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Töröl" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Bezárás" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Beállítások módosítása" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Termék vonalkódok beállítása" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Megerősítés" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kapcsolat" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Számolt mennyiség" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Új szállítás létrehozása" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Létrehozta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Létrehozva" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Törlés" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Cél tárhely" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Cél csomag" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Elvetés" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Megjelenített név" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Letöltés" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Utánzat" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Végső validálás" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "Azonosító" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Kép" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "#{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "A termék azonosítására használt Nemzetközi Cikkszám (IAN)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Készlet kiigazítás" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Készlet helyek" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Frissítette" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Frissítve" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Helyszín" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/szériaszám" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nem" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nómenklatúra" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Műveletek" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Tulajdonos" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Csomag" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Csomagok" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Csomagolás" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Csomagolási mennyiség" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Szülő tárhely" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Kigyűjtés" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Kigyűjtés típusa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Termék" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Termék vonalkódok" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Termékmozgások (Készletmozgás sor)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Termék csomagolása" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Termék mértékegység" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Termékváltozat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Becsomagolás" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Mennyiség" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Elvégzett mennyiség" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kvantok" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Tavolítsa el" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Visszáruzás" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Célállomás beolvasása" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Selejt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Forrás tárhely" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Forráscsomag" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Készletmozgás" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Készlet csomagolás típus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Érintse meg a beolvasáshoz" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Feldolgozandó" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Teendő" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Átmozgatás" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Mértékegység" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Mértékegység" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Jóváhagyás" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Utoljára beszkennelt vonalkód értéke." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Megjelenítő" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Raktár" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokumentum" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "helyszín" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "termék" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/hy.po b/stock_barcode/i18n/hy.po new file mode 100644 index 0000000..08ee5eb --- /dev/null +++ b/stock_barcode/i18n/hy.po @@ -0,0 +1,1764 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/id.po b/stock_barcode/i18n/id.po new file mode 100644 index 0000000..a9a0acc --- /dev/null +++ b/stock_barcode/i18n/id.po @@ -0,0 +1,1823 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Abe Manyo, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s tidak dapat di-inventaris. Hanya produk yang storable yang dapat di-" +"inventaris." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " Cetak command barcode dan tipe operasi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Cetak lembar demo barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Cetak lokasi storage" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Produk yang dilacak oleh nomor seri tidka dapat memiliki lebih dari satu " +"kuantitas untuk nomor seri yang sama." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Tambahkan Produk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Tambahkan produk tambahan?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Setelah setiap produk" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Setelah kelompok Produk" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Semua produk sudah dikembalikkan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Semua produk harus dikemas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Alokasi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Izinkan validasi full picking" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Izinkan validasi picking bahkan bila belum ada yang discan (dan bila " +"demikian, lakukan transfer langsung)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Ada tipe paket yang tidak tersedia yang discan. Bagian barcode ini tidak " +"dapat diproses." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Terapkan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "apakah Anda yakin ingin membatalkan operasi ini?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Backorder" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Konfirmasi Backorder" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplikasi Barcode" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Barcode Inventory Client Action" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Entri Manual Barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Tatanama Barcode" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Action Klien Picking Barcode" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode telah dipindai" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Scanning Barcode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Scan barcode ambigu dengan beberapa model: %s. Gunakan yang paling " +"memungkinkan." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Barcode tidak tersedia." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kotak Manajemen Kabel" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Batal" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Batalkan Operasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Batalkan Transfer" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Batalkan operasi" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Batalkan operasi ini?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Tutup" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Pengaturan Konfigurasi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigurasi Barcode Produk" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Konfirmasi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontak" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Kuantitas Terhitung" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Buat transfer baru" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Dibuat oleh" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Dibuat pada" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Kabinet Kustom (Metrik)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Kabinet Kustom (AS)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Hapus" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Data Demo Akti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Lokasi Tujuan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Kemasan Tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Lokasi tujuan harus discan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Buang" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Apakah Anda ingin secara permanen menghapus pesan ini ? Pesan ini tidak akan" +" muncul lagi, jadi pastikan Anda tidak membutuhkan lembar barcode atau Anda " +"memiliki salinan." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Apakah picker harus menaruh di paket produk yang discan? If yes, at which " +"rate?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "Apakah picker harus scan tujuan? If yes, at which rate?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Jangan batalkan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Jangan tunjukkan pesan ini lagi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Selesai /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Unduh" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Dummy" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Jumlah Pergerakkan Kosong" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Akhir validasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Backorder berikut dibuat:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Backorder-backorder berikut dibuat:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Paksakan scan Lokasi Tujuan?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Paksakan scan Lot/Seri?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Paksakan scan Produk?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Paksakan scan Lokasi Sumber?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Paksakan tujuan pada semua produk" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Paksakan semua produk untuk dikemas" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Paksakan masukkan ke kemasan?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Sembunyikan Lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Sembunyikan Nama Lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Bila lokasi sumber harus discan, maka lokasi tujuan harus juga discan " +"setelah setiap produk atau tidak discan sama sekali." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Bila Anda validasi sekarang, produk yang tersisa akan ditambahkan ke " +"backorder." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Gambar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "Dalam #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Transfer Tidak Lengkap" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Nomor artikel internasional yang digunakan untuk identifikasi produk." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Penyesuaian Stok Persediaan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Penyesuaian Inventaris (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lokasi Stok Persediaan" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Apakah Tipe Picking Barcode" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Terakhir Diperbarui oleh" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Terakhir Diperbarui pada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Tinggalkan" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Produk baris harus discan sebelum baris dapat diedit" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Lokasi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Lokasi Proses" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Seri/Lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Wajib Lokasi Tujuan" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Wajib Scan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Wajib Lokasi Sumber" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Tidak" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Tidak ada %(picking_type)s yang siap untuk ini %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Tidak ada Scan" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Tidak ada tipe operasi internal. Mohon konfigurasi satu di pengaturan " +"gudang." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Tidak ada picking atau lokasi atau produk yang sesuai dengan barcode " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Tidak ada picking atau produk sesuai dengan barcode %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Tidak ada produk, lot atau paket yang ditemukan untuk barcode %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Tata Nama" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Bukan scan yang diharapka" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Open picking" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Formulir open picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operasi" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Scan Opsional" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Pemilik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Kemasan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Tipe paket %s secara tepat diterapkan ke paket %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Kemasan" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Kemasan" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Kuantitas Paket" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Lokasi Induk" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Tujuan Lokasi Induk" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Hitung Pergerakkan Parsial" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Picking" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detail Picking" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipe Picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Mohon scan lokasi tujuan untuk %s sebelum scan produk lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Tolong Scan lagi!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Pencet Validasi atau scan produk lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Cetak Barcode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Cetak Slip Pengiriman" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Cetak Inventaris" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Cetak Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Cetak Operasi Picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produk" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Barcode Produk" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Pergerakan Produk (Baris Pergerakan Stok)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Kemasan Produk" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Kode Referensi Produk" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Stok Produk Quant" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Satuan Produk" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Varian Produk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Masukkan Ke Paket" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Masukkan ke Paket" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Kuantitas Selesai" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Kuantitas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Kuantitas Sudah Selesai" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Kuantitas Paket di Satuan Ukuran dari Baris Pergerakan Stok." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kuant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Hapuskan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Retur Produk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Pengembalian hanya dapat dibuat untuk picking yang selesai, mohon validasi " +"terlebih dahulu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Scan lokasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Scan nomor lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Scan nomor lot atau paket lalu lokasi tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Scan nomor lot lalu tujuan lokasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Scan paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Scan paket atau masukkan ke paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Scan paket atau lokasi tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Scan paket, tujuan lalu atau produk lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Scan produk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Scan produk sebelum scan nomor pelacakan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Scan produk dari %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Scan produk di %s atau scan lokasi lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Scan produk atau paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Scan produk atau paket lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Scan produk atau lokasi tujuan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Scan produk lalu lokasi tujuan" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "Scan produk, nomor seri/lot atau paket untuk memfilter transfer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Scan produk, paket atau lokasi tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Scan produk, paket atau lokasi tujuan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Scan nomor seri" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Scan nomor seri atau paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Scan nomor seri atau paket lalu lokasi tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Scan nomor seri lalu lokasi tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Scan transfer atau produk untuk memfilter record Anda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Scan transfer, produk atau paket untuk memfilter record Anda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Scan nomor seri lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Scan nomor lot untuk produk %s untuk mengganti kuantitasnya" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Scan lebih banyak nomor lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Scan lebih banyak nomor lot atau pake" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Scan lebih banyak produk di %s atau scan lokasi lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Scan lebih banyak produk atau paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Scan lebih banyak produk, atau scan lokasi sumber lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Scan nomor seri atau produk %s untuk mengganti kuantitas mereka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Scan lokasi tujuan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Scan paket %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scan lokasi sumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Scan lokasi sumber atau paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Kuantitas yang discan menggunakan %s sebagai Satuan Ukuran, tapi Satuan " +"Ukuran ini tidak kompatibel dengan satuan ukuran baris (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Kuantitas yang discan menggunakan %s sebagai Satuan Ukuran, tapi Satuan " +"Ukuran ini tidak kompatibel dengan satuan ukuran produk (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Memindai paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Pembuangan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Pilih Produk" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Nomor Seri/Lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Tampilkan Tata Nama Barcode " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Tampilkan Validasi Barcode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Lokasi Sumber" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Kemasan Sumber" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Tetap pada transfer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Pergerakan Stok" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tipe paket stok" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Sentuh untuk memindai" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Field teknis yang mengindikasikan apakah harus digunakan di app barcode dan " +"digunakan untuk mengontrol visibilitas di UI yang terkait." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Field teknis yang digunakan untuk menghitung apakah kelompok \"Final " +"Validation\" harus ditampilkan, membantu memecahkan kerumitan kelompok yang " +"tergabung/tersembunyi." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Inventory adjustment telah divalidasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "Lokasi yang di-scan tidak berasal dari tujuan operasi ini" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Lokasi yang di-scan tidak berasal dari lokasi operasi ini" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Nomor seri yang discan sudah digunakan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Transfer telah dibatalkan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Transfer telah divalidasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "TIdak ada yang perlu diterapkan di halaman ini." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Tidak ada yang perlu dicetak di halaman ini." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Paket ini sudah discan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Picking ini sudah selesai" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Picking ini dibatalkan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Nomor seri ini sudah digunakan." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Untuk Diproses" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Todo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Untuk menggunakan kemasan, aktifkan 'Kemasan' di pengaturan" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nama Transfer" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Transfer memungkinkan Anda untuk menggerakan produk dari satu lokasi ke yang" +" lain." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Ketik barcode yang Anda ingin scan di sini" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Satuan Ukuran" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Satuan Ukuran" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Gunakan kamera untuk scan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validasi" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Nilai barcode yang terakhir dipindai." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Viewer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Gudang" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Kita telah membuat beberapa data demo dengan barcode untuk Anda untuk " +"mengeksplorasi fitur tersebut. Cetak" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Satuan Ukuran Salah" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Anda akan mengambil produk %(productName)s dari lokasi %(locationName)s tapi produk ini tidak direservasi di lokasi yang sama.\n" +"Scan lokasi saat ini untuk mengonfirmasinya." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Anda diharapkan untuk scan satu atau lebih produk atau paket yang tersedia " +"pada lokasi picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Anda diharapkan untuk scan satu atau lebih produk." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Anda harusnya scan %s atau di lokasi sumber lain" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Anda tidak dapat menerapkan tipe kemasan. Pertama, scan produk atau pilih " +"baris" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Anda tidak dapat mendaftarkan scrap pada tahap operasi ini" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Anda sudah memindai %s barang dari paket ini. Apakah Anda ingin memindai " +"seluruh paket?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Anda dapat memproses lebih sedikit produk dari demand awal:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Anda harus scan paket atau kembalikkan ke paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Anda harus scan produk" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "tipe command dan operasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokumen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "Lokasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tipe operasi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "kemasan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produk" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "produk tidak diproses sama sekali." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "produk diproses parsial." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "lembar barcode stok" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"untuk memeriksa apa yang modul ini dapat lakukan! Anda juga dapat mencetak " +"barcode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "untuk membuat transfer baru dari lokasi ini." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "untuk membuat transfer baru." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "untuk mengetahui kontennya." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "untuk membukanya." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "untuk menunjukkan lokasi dan kuantitasnya." diff --git a/stock_barcode/i18n/is.po b/stock_barcode/i18n/is.po new file mode 100644 index 0000000..730b703 --- /dev/null +++ b/stock_barcode/i18n/is.po @@ -0,0 +1,1770 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2024 +# jonasyngvi, 2024 +# Kristófer Arnþórsson, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Kristófer Arnþórsson, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Virkja" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Eyða" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Loka" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Stillingarvalkostir" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Staðfesta" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Hafa samband" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Búið til af" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Búið til þann" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Hætta við" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Birtingarnafn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Sækja" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "Auðkenni (ID)" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Mynd" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Síðast uppfært af" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Síðast uppfært þann" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "No" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Vara" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Vöruafbrigði" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Magn" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Mælieining" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Áhorfandi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/it.po b/stock_barcode/i18n/it.po new file mode 100644 index 0000000..1a95559 --- /dev/null +++ b/stock_barcode/i18n/it.po @@ -0,0 +1,1849 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Sergio Zanchetta , 2023 +# Marianna Ciofani, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s non può essere inventariato, è possibile solo per i prodotti stoccabili." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Stampa i comandi del codice a barre e i tipi di " +"operazione" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Stampa foglio demo con codice a barre" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Stampa ubicazioni di stoccaggio" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Un prodotto tracciato da numeri di serie non può avere quantità multiple per" +" lo stesso numero di serie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Aggiungi Prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Aggiungere un prodotto in più?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Dopo ogni prodotto" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Dopo gruppo di prodotti" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Tutti i prodotti sono stati già resi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Tutti i prodotti devono essere confezionati" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Allocazione" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Permetti validazione raccolta completa" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Permetti di validare una raccolta anche se nulla è stato scansionato " +"(quindi, trasferimento immediato)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"È stato scansionato un tipo di pacchetto inesistente. Questa parte del " +"codice a barre non può essere elaborata." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Applica" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Sei sicuro di volere annullare l'operazione?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Ordine residuo" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Conferma ordine residuo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Codice a barre" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Barcode scanner " + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Azione codice a barre inventario cliente" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Inserimento manuale codice a barre" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura codici a barre" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Azione client prelievo con codice a barre" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Codice letto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Lettura codici a barre" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"La scansione del codice a barre risulta ambigua su più modelli: %s. Utilizza" +" il più plausibie." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "I codici a barre non sono disponibili." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Scatola portacavi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Annulla" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Annulla azione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Annulla trasferimento" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Annulla operazione" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Annullare l'operazione?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Chiudi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni di configurazione" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configura i codici a barre dei prodotti" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Conferma" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contatto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Conteggio quantità" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Crea un nuovo trasferimento" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Data creazione" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Armadio su misura (Metric)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Armadio su misura (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Elimina" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Dati dimostrativi attivi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Ubicazione di destinazione" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Collo di destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "L'ubicazione di destinazione deve essere scansionata" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Abbandona" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Rimuovere in modo definitivo questo messaggio ? Dato che non comparirà più, " +"accertarsi che il foglio codici a barre non sia necessario oppure di averne " +"una copia." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"L'addetto alle vendite deve inserire i prodotti scansionati in un pacco? Se " +"sì, con quale frequenza?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"L'addetto al prelievo deve scansionare la destinazione? Se sì, con quale " +"frequenza?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Non annullare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Non mostrare più questo messaggio" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Fatto/" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Scarica" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Fittizio" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Numero di movimenti vuoti" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Convalida finale" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "È stato creato il seguente ordine residuo:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Sono stati creati i seguenti ordini residui:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Forzare scansione ubicazione di destinazione?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Forzare scansione lotto/serie?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Forzare la scansione del prodotto?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Forzare scansione ubicazione di origine?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forza destinazione su tutti i prodotti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forza tutti i prodotti da confezionare" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Forzare imballaggio?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Nascondi lotto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Nascondi nome lotto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Se l'ubicazione di origine deve essere scansionata, l'ubicazione di " +"destinazione deve essere scansionata dopo ogni prodotto oppure non essere " +"scansionata affatto." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Se lo convalidi ora, i prodotti restanti verranno aggiunti all'ordine " +"residuo." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Immagine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Trasferimento non completo" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Numero articolo internazionale usato per l'identificazione del prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Rettifica di inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Rettifiche d'inventario (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Ubicazioni di magazzino" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "È tipo prelievo codice a barre" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Lasciare" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"La riga del prodotto deve essere scansionata prima che possa essere " +"modificata" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Ubicazione" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Trattato nell'ubicazione" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lotto/Serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Ubicazione di destinazione obbligatoria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Scansione obbligatoria" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Ubicazione di origine obbligatoria" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "No" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Nessun %(picking_type)s pronto per questo %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Nessuna scansione" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Nessun tipo di operazione interna. Configurane uno nelle impostazioni di " +"magazzino. " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Nessun prelievo, ubicazione o prodotto corrispondente al codice a barre " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"Nessun prelievo o prodotto corrispondente al codice a barre %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Nessun prodotto, lotto o pacchetto trovato per il codice a barre %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Non è la scansione prevista" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Apri prelievo" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Apri prelievo da" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operazioni" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Scansione opzionale" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Proprietario" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Collo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" +"Il tipo di pacchetto %s è stato correttamente applicato al pacchetto %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Colli" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Imballaggio" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Quantità Confezione" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Ubicazione primaria" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Ubicazione principale di destinazione" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Numero movimenti parziali" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Prelievo" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Dettagli di prelievo" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipo Picking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Scansionare l'ubicazione di destinazione per %s prima di scansionare altri " +"prodotti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Per favore, scansiona di nuovo!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Premi Convalida o scansiona un altro prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Stampa codici a barre" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Stampa buono di consegna" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Stampa inventario" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Stampa pacchetti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Stampa operazioni di prelievo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Prodotto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Codici a barre per prodotti" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimenti del prodotto (riga movimento magazzino)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Imballaggio prodotti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Codice riferimento prodotto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Numero prodotti magazino" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unità di misura prodotto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variante prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Metti in confezione" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Crea collo" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Qtà effettuata" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Quantità" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Quantità eseguita" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Quantità degli imballaggi nelle UDM della riga movimenti magazzino." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quantitativi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Rimuovi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Rendi prodotti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"I resi possono essere creati solo per prelievi completati, effettua prima la" +" validazione." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scansiona un" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Scansiona ubicazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Scansiona numero di lotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Scansiona un numero di lotto o un pacchetto, in seguito l'ubicazione di " +"destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Scansiona un numero di lotto, in seguito l'ubicazione di destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Scansiona un pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Scansiona un pacchetto o confeziona" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Scansiona un pacchetto o l'ubicazione di destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" +"Scansiona un pacchetto, l'ubicazione di destinazione o un altro prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Scansiona un prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Scansiona un prodotto prima di scansionare il codice di tracciabilità" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Scansiona un prodotto da %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Scansiona un prodotto in %s o scansiona un'altra ubicazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Scansiona un prodotto o un pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Scansiona un prodotto o un altro pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Scansiona un prodotto o l'ubicazione di destinazione." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Scansiona un prodotto e in seguito l'ubicazione di destinazione" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Scansiona un prodotto, un lotto/numero seriale o un pacchetto per filtrare i" +" trasferimenti." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Scansiona un prodotto, un pacchetto o l'ubicazione di destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Scansiona un prodotto, un pacchetto o l'ubicazione di destinazione." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Scansiona un numero di serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Scansiona un numero di serie o un pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Scansiona un numero seriale o un pacchetto, in seguito l'ubicazione di " +"destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Scansiona un numero seriale e in seguito l'ubicazione di destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Scansiona un trasferimento o un prodotto per filtrare i record" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Scansiona un trasferimento, un prodotto o un pacchetto per filtrare i record" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scansiona un(a)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Scansiona un altro numero di serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" +"Scansiona i numeri di lotto per il prodotto %s per cambiare la quantità" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Scansiona più numeri di lotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Scansiona più numeri di lotto o un pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Scansiona più prodotti in %s o un'altra ubicazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Scansiona più prodotti o un pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Scansiona più prodotti o scansiona una nuova ubicazione di origine." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Scansiona il numero seriale del prodotto %s per modificare la quantità" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Scansiona l'ubicazione di destinazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Scansiona il pacchetto %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scansiona l'ubicazione di origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Scansione l'ubicazione di origine o un pacchetto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"La quantità scansionata usa %s come unità di misura ma questa unità di " +"misura non è compatibile con quella della riga (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"La quantità scannerizzata usa %s come unità di misura, ma questa unità non è" +" compatibile con quella del prodotto (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Scansione pacco in corso" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Scarto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Seleziona un prodotto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Numero di serie/lotto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Mostra nomenclatura codice a barre" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Mostra convalida codice a barre" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Ubicazione di origine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Collo di origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Rimani sul trasferimento" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Movimento di magazzino" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tipo di pacchetto stock" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Tocca per acquisire" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Campo tecnico che indica se deve essere usato nell'applicazione codice a " +"barre e che serve a controllare la visibilità nella relativa interfaccia " +"utente." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Campo tecnico utilizzato per calcolare se il gruppo \"Convalida finale\" " +"debba essere mostrato, risolvendo i gruppi combinati/complessità invisibile." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "La rettifica d'inventario è stata convalidata" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" +"L'ubicazione scansionata non appartiene alla destinazione dell'operazione." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" +"L'ubicazione scansionata non appartiene all'ubicazione dell'operazione." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Il numero di serie scansionato è già utilizzato." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Il trasferimento è stato annullato" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Il trasferimento è stato convalidato" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Non c'è niente da applicare in questa pagina." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Non c'è nulla da stampare in questa pagina." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Questo pacchetto è già stato scansionato." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Questo prelievo è già effettuato" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Questo prelievo è stato annullato" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Questo numero di serie è già utilizzato." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Da elaborare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Da fare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Per utilizzare i pacchetti, abilitare \"Pacchetti\" nelle impostazioni" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Trasferimento" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nome di trasferimento" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"I trasferimenti consentono di spostare i prodotti da una ubicazione a " +"un'altra." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Digita il codice a barre che vuoi scansionare qui" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unità di misura" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UdM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Utilizza la fotocamera per scansionare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Valida" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valore dell'ultimo codice a barre scansionato." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visualizzatore" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Magazzino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Abbiamo creato alcuni dati dimostrativi con codici a barre per permetterti " +"di esplorare le diverse caratteristiche. Stampa il" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Unità di misura sbagliata" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Stai per prelevare il prodotto %(productName)s dall'ubicazione %(locationName)s ma il prodotto non è prenotato in questa ubicazione.\n" +"Scansiona l'ubicazione attuale per confermarlo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Devi fare la scansione di uno o più prodotti o di un pacchetto disponibile " +"nel luogo di prelievo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Devi scansionare uno o più prodotti." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Devi scansionare %s o un'altra ubicazione di origine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Non puoi applicare un tipo di pacchetto. Prima, scansiona il prodotto o " +"seleziona una riga" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Non è possibile registrare scarti in questa fase dell'operazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Hai già scansionato %s articoli del pacco. Vuoi scansionare l'intero " +"pacchetto?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Sono stati elaborati meno prodotti rispetto alla richiesta iniziale:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "È necessario scansionare un pacchetto o confezionare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "È necessario scansionare un prodotto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "comandi e tipi di operazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "documento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "posizione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tipo di operazione" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "collo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "prodotto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "i prodotti non sono stati elaborati." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "i prodotti sono stati parzialmente elaborati." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "foglio codici a barre del magazzino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"per scoprire cosa può fare questo modulo! È inoltre possibile stampare il " +"codice a barre" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "per creare un nuovo trasferimento da questa ubicazione." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "per creare un nuovo trasferimento." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "per conoscerne il contenuto." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "per aprirlo/la." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "per mostrarne la posizione e la quantità." diff --git a/stock_barcode/i18n/ja.po b/stock_barcode/i18n/ja.po new file mode 100644 index 0000000..c138b19 --- /dev/null +++ b/stock_barcode/i18n/ja.po @@ -0,0 +1,1783 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Noma Yuki, 2023 +# Ryoko Tsuda , 2024 +# Junko Augias, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%sは棚卸できません。在庫可能品のみ棚卸することができます。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " バーコードコマンドとオペレーションタイプを印刷" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " バーコード印刷のデモシート" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "倉庫ロケーションを印刷 " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "シリアル番号で追跡されるプロダクトは、同じシリアル番号で複数の数量を持つことはできません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "プロダクトを追加" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "プロダクトを追加しますか?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "各プロダクトの後に" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "プロダクトのグループの後に" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "全てのプロダクトは既に返品済です" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "全てのプロダクトは梱包される必要があります" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "割当" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "フルピッキングの検証を許可" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "まだ何もスキャンされていなくても、ピッキングを検証できるようにします。(よってすぐに転送して下さい)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "存在しない梱包タイプがスキャンされました。バーコードのこの部分は処理できません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "適用" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "このオペレーションを本当に取消しますか?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "バックオーダ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "バックオーダ確認" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "バーコード" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "バーコードアプリ" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "バーコード在庫顧客アクション" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "バーコード手動エントリ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "バーコード表現規則" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "バーコードピッキングクライアントアクション" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "スキャンされたバーコード" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "バーコードスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "バーコードスキャンは、いくつかのモデルであいまいです%s: 最も可能性の高いものを使用して下さい。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "バーコードが利用できません。" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "ケーブル管理ボックス" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "取消" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "オペレーションを取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "転送を取消" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "操作を取消" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "この操作を取消しますか?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "閉じる" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "コンフィグ設定" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "製品バーコードを設定" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "確認" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "連絡先" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "棚卸数量" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "新しい接続を作成する" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "作成日" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "カスタマイズキャビネット (メートル)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "カスタマイズキャビネット (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "削除" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "アクティブなデモデータ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "移動先ロケーション" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "先梱包" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "移動先ロケーションをスキャンして下さい。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "破棄" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"このメッセージを永久に削除しますか?このメッセージは表示されなくなりますので、バーコードシートが不要か、コピーを持っていることを確認して下さい。" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "ピッカーはスキャンしたプロダクトをパッケージに入れる必要がありますか?その場合、どれくらいの割合で行いますか?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "ピッカーは移動先ロケーションをスキャンする必要がありますか?その場合、どれくらいの割合で行いますか?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "取消しない" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "このメッセージを二度と表示しないでください" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "完了 /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "ダウンロード" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "ダミー" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "空の移動数" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "最終検証" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "以下のバックオーダが作成されました:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "以下のバックオーダが作成されました:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "宛先スキャンを強制しますか?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "ロット/シリアルスキャンを強制しますか? " + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "プロダクトスキャンを強制しますか?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "移動元ロケーションスキャンを強制しますか?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "全てのプロダクトに宛先を強制する" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "全てのプロダクトの梱包を強制する" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "梱包材に入れることを強制しますか?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "ロットを非表示" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "ロット名を非表示" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"移動元ロケーションをスキャンしなければならない場合、移動先ロケーションは、各プロダクトの後にスキャンされるか、全くスキャンされないかのどちらかである必要があります。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "今すぐ検証すると、残りのプロダクトはバックオーダに追加されます。" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "画像" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "番号{kanban_getcolorname(record.color.raw_value)}の中にあります" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "転送未完了" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "製品識別に使用する国際物品番号。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "在庫調整" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "在庫調整 (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "在庫ロケーション" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "バーコードピッキングタイプ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "そのままにしておきます" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "明細を編集する前に、明細のプロダクトをスキャンして下さい。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "ロケーション" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "処理された場所" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "ロット/シリアル" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "必須移動先ロケーション" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "必須スキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "必須移動元ロケーション" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "いいえ" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr " %(picking_type)sは一切、この%(barcode_type)s用に準備完了していません。" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "スキャンなし" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "内部オペレーションタイプはありません。倉庫設定で構成してください。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "バーコード%(barcode)sに対応するピッキングまたはロケーションまたはプロダクトはありません。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "バーコード%(barcode)sに対応するピッキングまたはプロダクトはありません。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "バーコード%s用にプロダクト、ロットおよび梱包が見つかりません。" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "体系" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "予測されたスキャンではありません" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "オープンピッキング" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "ピッキングフォームを開く" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "オペレーション" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "任意のスキャン" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "オーナー" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "パッケージ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "梱包タイプ %sが正しく梱包%sに適用されました。" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "梱包" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "梱包" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "梱包数量" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "親ロケーション" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "移動先親ロケーション" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "部分移動数" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "ピッキング" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "ピッキングの詳細" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "ピッキングタイプ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "他のプロダクトをスキャンする前に%s用の移動先ロケーションをスキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "もう一度スキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "検証を押すか、他のプロダクトをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "バーコード印刷" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "配達伝票を印刷する" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "在庫の印刷" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "パッケージを印刷" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "印刷ピッキング操作" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "プロダクト" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "製品バーコード" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "プロダクトの移動(在庫移動ライン)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "プロダクト梱包" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "プロダクト参照コード" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "プロダクト在庫数" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "プロダクト単位" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "プロダクトバリアント" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "梱包する" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "梱包する" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "数量完了" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "数量" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "完了済数量" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "在庫移動明細の単位の梱包数量" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "保管ロット" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "それを除く" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "プロダクト返品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "返品はピッキングが完了したものに対してのみ可能です。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "スキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "ロット番号をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "ロット番号または梱包をスキャンし、次に移動先をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "ロット番号、次に移動先をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "梱包をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "梱包をスキャンまたは梱包に入れる" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "梱包または移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "梱包または移動先ロケーションまたは他のプロダクトをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "プロダクトをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "追跡番号をスキャンする前にプロダクトをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr " %sからのプロダクトをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "%s のプロダクトをスキャンするか、または、別のロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "プロダクトまたは梱包をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "プロダクトまたは他の梱包をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "プロダクトまたは移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "プロダクトをスキャン、次に移動先をスキャン" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "プロダクト、ロット/シリアル番号、または梱包をスキャンして転送をフィルタ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "プロダクト、梱包または移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "プロダクト、梱包または移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "シリアル番号をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "シリアル番号または梱包をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "シリアル番号または梱包をスキャンし、次に移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "シリアル番号をスキャン、次に移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "転送またはプロダクトをスキャンしてレコードをフィルタ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "転送、プロダクト、またはパッケージをスキャンして、レコードをフィルタリング" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "スキャン:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "他のシリアル番号をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "プロダクト%s用のロット番号をスキャンして数量を変更" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "追加でロット番号をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "追加でロット番号または梱包をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "%s のプロダクトを追加スキャンするか、または、別のロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "他の商品または梱包をスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "追加でプロダクトをスキャンするか、新しい移動元ロケーションををスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "プロダクト %s用のシリアル番号をスキャンして数量を変更" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "移動先ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "梱包%sをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "移動元ロケーションをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "移動元ロケーションまたはパッケージをスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "スキャンされた数量は%sを単位として使用していますが、この単位は明細の単位 (%s)と互換性がありません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "スキャンされた数量は%sを単位として使用していますが、この単位はプロダクトの単位 (%s)と互換性がありません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "梱包のスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "廃棄" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "プロダクトを選択してください" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "シリアル/ロット番号" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "バーコード命名法を表示" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "バーコード検証を表示" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "移動元ロケーション" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "元梱包" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "転送に留まる" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "在庫移動" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "在庫梱包タイプ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "タップしてスキャン" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "バーコードアプリで使用されるべきかどうかを示す技術的なフィールドで、関連するUIで可視性を制御するために使用されます。" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "\"最終検証\"グループを表示すべきかどうかを計算するために使用される技術的なフィールド。複合グループ/不可視の複雑性を解決します。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "在庫調整が検証されました" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "スキャンされたロケーションは、このオペレーションの移動先に属していません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "スキャンされた場所は、このオペレーションのロケーションに属していません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "スキャンしたシリアル番号はすでに使用されています。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "転送は取消されました" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "転送が検証されました" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "このページに適用するものはありません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "このページで印刷するものはありません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "このパッケージはすでにスキャンされています。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "このピッキングはすでに行われています" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "このピッキングは取消されました。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "このシリアル番号はすでに使用済です。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "未処理" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "予定" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "梱包を使用するには設定で '梱包' を有効にして下さい。" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "移動" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "転送名" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "転送を使用すると、プロダクトをある場所から別の場所に移動できます。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "ここでスキャンしたいバーコードを入力して下さい。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "単位" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "測定単位" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "カメラを使ってスキャン" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "検証" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "最後にスキャンされたバーコードの値。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "ビューア" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "倉庫" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "機能を調べるために、バーコード付きのデモデータをいくつか作成しました。印刷する" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "誤った単位" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"プロダクト%(productName)sをロケーション%(locationName)sから持ち出そうとしていますが、このプロダクトはこの場所に予約されていません。\n" +"確認するには現在のロケーションをスキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "ピッキングロケーションにある1つ以上のプロダクトまたは梱包をスキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "1つ以上のプロダクトをスキャンする必要があります。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "%sまたは他の移動元ロケーションをスキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "梱包タイプを適用できません。最初にプロダクトまたは明細をスキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "オペレーションのこの段階で廃棄を登録することはできません。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "この梱包の%sアイテムはすでにスキャン済です。梱包全体をスキャンしますか?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "最初の要求より少ないプロダクトを処理しました:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "梱包をスキャンするか梱包に入れて下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "プロダクトをスキャンして下さい。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "コマンドまたはオペレーションタイプ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "ドキュメント" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "場所" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "オペレーションタイプ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "梱包" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "プロダクト" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "のプロダクトは処理されていません。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "プロダクトは部分的に処理されました。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "在庫バーコードシート" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "このモジュールで何ができるかを確認してください!バーコードを印刷することもできます" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "→このロケーションから新しい転送を作成" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "→新しい転送を作成" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "→その中身を確認" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "→ドキュメントを開く" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "→そのロケーションと数量を表示" diff --git a/stock_barcode/i18n/ka.po b/stock_barcode/i18n/ka.po new file mode 100644 index 0000000..3b3c6a4 --- /dev/null +++ b/stock_barcode/i18n/ka.po @@ -0,0 +1,1616 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +# Giorgi Melitauri , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Giorgi Melitauri , 2018\n" +"Language-Team: Georgian (https://www.transifex.com/odoo/teams/41243/ka/)\n" +"Language: ka\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "შეწყვეტა" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "შემქმნელი" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "შექმნის თარიღი" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "სახელი" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "იდენტიფიკატორი" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "ბოლოს განაახლა" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "ბოლოს განახლებულია" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "პროდუქტი" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/kab.po b/stock_barcode/i18n/kab.po new file mode 100644 index 0000000..35c948b --- /dev/null +++ b/stock_barcode/i18n/kab.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Kabyle (https://www.transifex.com/odoo/teams/41243/kab/)\n" +"Language: kab\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Sefsex" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Yerna-t" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Yerna di" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "Asulay" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Aleqqem aneggaru sɣuṛ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Aleqqem aneggaru di" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Afaris" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/km.po b/stock_barcode/i18n/km.po new file mode 100644 index 0000000..eb73e2a --- /dev/null +++ b/stock_barcode/i18n/km.po @@ -0,0 +1,1617 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Sengtha Chay , 2018 +# Chan Nath , 2018 +# Samkhann Seang , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2018-10-02 10:32+0000\n" +"Last-Translator: Samkhann Seang , 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "លុបចោល" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "បិទ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "បញ្ជាក់" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "បង្កើតដោយ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "បង្កើតនៅ" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "បោះបង់" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "ទាញយក" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "ផ្លាស់ប្តូរចុងក្រោយ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "ប្រតិបត្តិការ" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "ផលិតផល" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "ចំនួន" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/ko.po b/stock_barcode/i18n/ko.po new file mode 100644 index 0000000..eaeb158 --- /dev/null +++ b/stock_barcode/i18n/ko.po @@ -0,0 +1,1784 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# JH CHOI , 2023 +# Sarah Park, 2023 +# Daye Jeong, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%s 항목은 재고 처리할 수 없습니다. 저장 가능한 품목만 재고에 추가할 수 있습니다." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " 바코드 인쇄 명령 및 작업 유형" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " 바코드 데모 시트 인쇄" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " 인쇄 저장 위치" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "일련번호로 추적되는 품목은 동일한 일련번호 하에 수량을 여러 개로 지정할 수 없습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "상품 추가" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "별도 품목을 추가하시겠습니까?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "각 품목 이후" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "품목 그룹 이후" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "모든 품목이 이미 반품되었습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "모든 품목을 포장해야 합니다" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "할당" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "전체 픽업 승인 허용" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "아무 것도 스캔하지 않은 상태에서도 픽업을 승인하실 수 있습니다 (즉시 이송을 진행합니다)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "스캔한 유형은 존재하지 않는 패키지 유형입니다. 바코드의 해당 부분을 처리할 수 없습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "적용" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "이 작업을 취소하시겠습니까?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "이월 주문" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "이월 주문 확인" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "바코드" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "바코드 앱" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "바코드 재고 클라이언트 작업" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "바코드 수동 입력" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "바코드 명칭" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "선별 클라이언트 작업 바코드" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "바코드 스캔됨" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "바코드 스캐닝" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "바코드 스캔 여부가 각 모델에서 확실하지 않습니다: %s 가장 가능성이 높은 것을 사용합니다. " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "바코드를 사용할 수 없습니다." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "케이블 보관함" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "취소" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "작업 쉬초" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "이송 취소" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "작업 취소" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "이 작업을 취소하시겠습니까?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "닫기" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "환경 설정" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "상품 바코드 설정" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "승인" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "연락처" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "계산된 수량" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "새 이송 만들기" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "작성자" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "작성일자" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "맞춤형 캐비넷 (미터)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "맞춤형 캐비넷 (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "삭제" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "데모 데이터 활성화" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "목적지 위치" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "목적지 패키지" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "목적지를 스캔해야 합니다" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "취소" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "표시명" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"메시지를 영구적으로 삭제하시겠습니까? 더 이상 표시되지 않으므로, 바코드 시트가 필요 없는지 여부와 사본을 보관해 두었는지 확인하시기를 " +"바랍니다." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "스캔한 품목을 픽업 시 포장해야 하나요? 해야 한다면, 요율을 지정하세요." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "픽업 시 목적지를 스캔해야 하나요? 해야 한다면, 요율을 지정하세요." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "취소하지 않음" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "더이상 메시지를 표시하지 않습니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "완료 /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "다운로드" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "더미" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "비어 있는 이동 수" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "마지막 유효성 검사" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "다음과 같이 이월 주문이 생성되었습니다:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "다음과 같이 이월 주문이 생성되었습니다:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "목적지 스캔을 필수로 지정하시겠습니까?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "LOT/일련번호 스캔을 필수로 지정하시겠습니까?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "품목 스캔을 필수로 지정하시겠습니까?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "원 위치 스캔을 필수로 지정하시겠습니까?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "전체 품목에 목적지 필수" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "전체 품목 포장 필수" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "포장을 필수로 지정할까요?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Lot 숨기기" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Lot 이름 숨기기" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "원 위치를 반드시 스캔하도록 하는 경우, 각 품목을 스캔한 후 또는 전체 품목 스캔 전에 대상 위치를 스캔하여야 합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "지금 승인할 경우, 나머지 품목이 이월 주문에 추가됩니다." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "이미지" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "이송 미완료" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "품목 식별을 위한 국제 상품 번호 (EAN)입니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "재고 조정" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "재고 조정 (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "재고 공간" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "바코드 픽업 유형입니다." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "최근 갱신한 사람" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "최근 갱신 일자" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "그대로 두기" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "내역을 편집하기 전에 해당 내역에 있는 품목을 스캔해야 합니다" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "위치" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "처리된 위치" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "LOT/일련번호" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "목적지 필수" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "스캔 필수" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "원 위치 필수" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "아니오" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "%(barcode_type)s에 대해 %(picking_type)s 항목이 준비되어 있지 않습니다." + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "스캔 없음" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "내부 작업 유형이 없습니다. 창고 설정에서 하나를 구성하십시오." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "%(barcode)s 바코드에 해당하는 픽업이나 위치 또는 품목이 없습니다." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "%(barcode)s 바코드에 해당하는 픽업이나 품목이 없습니다." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "바코드 %s에 대한 품목이나 로트번호 혹은 패키지를 찾을 수 없습니다." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "명명법" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "예상한 스캔이 아님" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "픽업 열기" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "선별 양식 열기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "작업" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "선택 사항으로 스캔하기" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "소유자" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "패키지" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "%s 패키지 유형이 %s 패키지에 알맞게 적용되었습니다." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "패키지" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "패키징" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "포장 수량" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "상위 공간(위치)" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "상위 목적지 위치" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "부분 이동 수" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "선별" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "선별 세부사항" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "선별 유형" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "다른 품목을 스캔하기 전에 %s의 목적지를 스캔하십시오." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "다시 스캔하세요!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "승인 버튼을 누르거나 다른 품목을 스캔하세요." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "바코드 인쇄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "배송 전표 인쇄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "재고 인쇄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "패키지 인쇄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "선별 작업 인쇄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "품목" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "상품 바코드" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "품목 이동 (재고 이동 상세)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "품목 포장법" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "품목 참조 코드" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "품목 재고 수량" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "품목 단위" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "품목 세부선택" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "꾸러미에 넣기" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "포장에 넣기" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "수량 완료됨" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "수량" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "수량 완료됨" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "품목 이동 내역 단위에 대한 패키지 수량입니다." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "수량" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "제거하기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "반품" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "반품은 완료된 피킹에 대해서만 생성할 수 있습니다. 먼저 승인해 주십시오." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "위치 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "로트번호 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "로트번호나 패키지를 스캔 후 목적지를 스캔합니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "로트번호를 스캔 후 목적지 위치를 스캔합니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "패키지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "패키지 스캔 또는 패키지 포장" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "패키지 또는 목적지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "패키지나 목적지 또는 다른 품목 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "품목 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "추적번호를 스캔하기 전에 품목을 스캔하십시오" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "%s에서 품목 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "%s에서 품목 스캔 또는 다른 위치 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "품목 또는 패키지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "품목 또는 다른 패키지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "품목 또는 목적지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "품목을 스캔 후 목적지 스캔" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "품목이나 로트/일련번호 또는 패키지를 스캔하여 이송 내용을 필터링합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "품목, 패키지 및 목적지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "품목, 패키지 및 목적지를 스캔합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "일련번호 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "일련번호 또는 패키지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "일련번호 또는 패키지 스캔 후 목적지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "일련번호 스캔 후 목적지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "이송 또는 품목을 스캔하여 기록을 필터링합니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "이송, 품목 또는 패키지를 스캔하여 기록을 필터링합니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "다른 일련번호 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "수량을 변경하려면 %s 품목의 로트번호를 스캔하십시오." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "로트번호 더 스캔하기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "로트번호나 패키지 더 스캔하기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "%s에서 품목을 더 스캔하거나 다른 위치 스캔하기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "품목이나 패키지를 더 스캔하기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "더 많은 제품을 스캔하거나 새로운 기존 위치를 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "수량을 변경하려면 %s 품목의 일련번호를 스캔하십시오." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "목적지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "%s 패키지 스캔 " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "기존 위치 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "원 위치나 패키지 스캔" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "스캔한 수량은 %s 측정 단위를 사용하고 있으나, 이 단위는 해당 항목의 단위 (%s)와 호환되지 않습니다. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "스캔한 수량은 %s 측정 단위를 사용하고 있으나, 이 단위는 해당 품목의 단위 (%s)와 호환되지 않습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "패키지 스캐닝" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "폐기" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "상품 선택" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "일련번호/로트 번호" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "바코드 생성 규칙 표시" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "바코드 유효성 검사 표시" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "기존 위치" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "원본 패키지" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "이송 상태 유지" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "재고 이동" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "재고 포장 유형" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "탭하여 스캔" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "바코드 앱에서 사용해야 한다는 표시를 하는 기술 필드이며 관련 UI를 나타내도록 제어하기 위해 사용합니다." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"그룹 결합이나 보이지 않는 복잡한 문제를 해결하여 \"최종 유효성 검사\" 그룹을 표시할 지 여부를 계산하는데 사용하는 기술 필드입니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "재고조사가 승인되었습니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "스캔한 위치는 이 작업의 이동 대상에 속하지 않습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "스캔한 위치는 이 작업의 위치에 속하지 않습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "스캔한 일련번호가 이미 사용되었습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "이송이 취소되었습니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "이송이 승인되었습니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "이 페이지에 적용할 항목이 없습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "이 페이지에 인쇄할 항목이 없습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "이미 스캔 완료된 패키지입니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "이 선별은 이미 완료되었습니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "픽업이 취소되었습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "이미 사용 중인 일련번호입니다." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "진행 대기" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "To do" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "패키지를 사용하시려면, 설정에서 '패키지'를 활성화하십시오." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "전송" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "이송 이름" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "재고 이동을 통해 품목의 위치를 이동시킬 수 있습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "여기에 스캔하려는 바코드를 입력하십시오." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "단위" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "단위" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "카메라로 스캔하십시오" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "승인" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "가장 최근에 스캔한 바코드 값입니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "뷰어" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "창고" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "바코드 앱의 기능을 살펴볼 수 있도록 바코드가 포함된 몇 가지 데모 데이터를 생성했습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "잘못된 측정 단위" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"%(productName)s 품목을 %(locationName)s 위치에서 가져가려 하나, 해당 품목이 이 위치에 예약되어 있지 않습니다.\n" +"현재 위치를 스캔하여 확인하세요." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "픽업 위치에서 사용할 수 있는 품목이나 패키지를 하나 이상 스캔해야 합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "하나 이상의 제품을 스캔해야 합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "%s 또는 다른 원 위치를 스캔해야 합니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "패키지 유형을 적용할 수 없습니다. 먼저 품목을 스캔하거나 내역을 선택합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "현재 작업 상태에서는 스크랩을 등록할 수 없습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "이 패키지의 %s 항목을 이미 스캔했습니다. 전체 패키지를 스캔하시겠습니까?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "처음 요청한 것보다 적은 품목을 처리했습니다:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "패키지를 스캔하거나 포장해야 합니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "품목을 스캔해야 합니다" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "명령 및 작업 유형" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "문서" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "위치" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "작업 유형" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "패키지" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "품목" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "품목이 전혀 처리되지 않았습니다." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "품목이 일부 처리되었습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "재고 바코드 시트" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "를 인쇄하여 이 모듈이 제공하는 다음의 기능을 확인해 보세요!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "이 위치에서 새 이송을 만들기." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "새로운 이송 만들기." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "내용물을 알 수 없습니다." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "그것을 열기." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "위치와 수량을 표시합니다." diff --git a/stock_barcode/i18n/lb.po b/stock_barcode/i18n/lb.po new file mode 100644 index 0000000..357030e --- /dev/null +++ b/stock_barcode/i18n/lb.po @@ -0,0 +1,1612 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~12.5+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2019-08-26 09:38+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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/lo.po b/stock_barcode/i18n/lo.po new file mode 100644 index 0000000..556de6e --- /dev/null +++ b/stock_barcode/i18n/lo.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Lao (https://www.transifex.com/odoo/teams/41243/lo/)\n" +"Language: lo\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "ຍົກເລີອກ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "ສິນຄ້າ" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/lt.po b/stock_barcode/i18n/lt.po new file mode 100644 index 0000000..87047e0 --- /dev/null +++ b/stock_barcode/i18n/lt.po @@ -0,0 +1,1784 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Šarūnas Ažna , 2023 +# Silvija Butko , 2023 +# Arminas Grigonis , 2023 +# Arunas V. , 2023 +# grupoda2 , 2023 +# Linas Versada , 2023 +# digitouch UAB , 2023 +# Martin Trigaux, 2023 +# Jonas Zinkevicius , 2023 +# Ramunė ViaLaurea , 2024 +# UAB "Draugiški sprendimai" , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: UAB \"Draugiški sprendimai\" , 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Pridėti produktą" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Priskyrimas" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Taikyti" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Atidėto užsakymo patvirtinimas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Brūkšninis kodas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Brūkšninio kodo terminologija" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Nuskenuotas brūkšninis kodas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Brūkšninio kodo skenavimas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Laidų tvarkymo dėžutė" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Atšaukti" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Uždaryti" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigūracijos nustatymai" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigūruoti produktų brūkšninius kodus" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Patvirtinti" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontaktas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Suskaičiuotas kiekis" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Trinti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Siunčiama į" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Tikslinė pakuotė" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Atmesti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Rodomas pavadinimas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Daugiau neberodyti šio pranešimo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Atsisiųsti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Fiktyvus" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Galutinis patvirtinimas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Paveikslėlis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "Yra #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Tarptautinis prekės numeris, naudojamas prekių ženklinimui bei " +"identifikavimui." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Inventoriaus koregavimas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Inventoriaus vietos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Palikti tai" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Vieta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Partijos / serijinis numeris" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ne" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Terminologija" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacijos" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Savininkas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paketas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakuotės" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Pakavimas" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Pakuočių kiekis" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Tėvinė vieta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Judėjimas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Paėmimo būdas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produktas" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Produktų barkodai" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Produkto perkėlimai (atsargų perkėlimo eilutė)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produkto pakavimas" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produkto matavimo vienetas" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Produkto variantas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Dėti į pakuotę" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Kiekis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Atliktas kiekis" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kiekių grupės" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Pašalinti tai" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Grąžinti produktus" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Skenuokite" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Skenuokite produktą" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Skenuokite" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Nurašymas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serijinis/partijos numeris" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Šaltinio vieta" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Šaltinio pakuotė" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Atsargų perkėlimas" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Palieskite, jei norite nuskaityti" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Apdorojimui:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Reikia atlikti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Perkelti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Mato vienetas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Mat. vnt." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Patvirtinti" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Paskutinio nuskenuoto brūkšninio kodo reikšmė." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Žiūrėtojas" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Sandėlis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Sukūrėme keletą demonstracinių duomenų su brūkšniniais kodais, tam kad " +"galėtumėte susipažinti su brūkšninio kodo funkcijomis. Atsispausdinkite" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokumentas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "vieta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "operacijos tipas" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produktas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "brūkšninių kodų lapą" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +", tam kad pamatytumėte ką gali šis modulis! Jūs taip pat galite " +"atsispausdinti brūkšninius kodus iš" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr ", tam kad sukurtumėte perkėlimą iš šios vietos." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr ", tam kad sukurtumėte naują perkėlimą." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr ", tam kad jį atidarytumėte." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr ", tam kad pamatytumėte jo vietą ir kiekį." diff --git a/stock_barcode/i18n/lv.po b/stock_barcode/i18n/lv.po new file mode 100644 index 0000000..45f0e00 --- /dev/null +++ b/stock_barcode/i18n/lv.po @@ -0,0 +1,1777 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# InfernalLV , 2023 +# Anzelika Adejanova, 2023 +# Konstantins Zabogonskis , 2023 +# Armīns Jeltajevs , 2023 +# JanisJanis , 2023 +# Martin Trigaux, 2023 +# Arnis Putniņš , 2023 +# ievaputnina , 2023 +# Will Sensors, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Will Sensors, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Piešķirtā prombūtne" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Pielietot" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Svītrkods" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Atcelt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Aizvērt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigurācijas uzstādījumi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Apstiprināt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontaktpersona" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Izveidoja" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Izveidots" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Izdzēst" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Gala novietojums" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Atmest" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Attēlotais nosaukums" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Lejupielādēt" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Dummy" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Galējā pārbaude" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Attēls" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Starptautiskais izstrādājuma numurs, ko izmanto produkta identifikācijai." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Pēdējoreiz atjaunināja" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Pēdējoreiz atjaunināts" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Atrašanās vieta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Partija/Sērija" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Numurs" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operācijas" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Īpašnieks" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Iepakojums" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Iepakojumu skaits" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Virspostenis" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Izsniegšana" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Picking Type" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkts" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produkta iepakojums" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produkta Mērvienība" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Produkta variants" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Daudzums" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Atgriezt Preces" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Brāķis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Resursa novietojums" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Preču kustība Noliktavā" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Darāmais" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Mērvienība" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Mērv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Pārbaudīt" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Skatītājs" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Noliktava" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokuments" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkts" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/mk.po b/stock_barcode/i18n/mk.po new file mode 100644 index 0000000..823a3e8 --- /dev/null +++ b/stock_barcode/i18n/mk.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Macedonian (https://www.transifex.com/odoo/teams/41243/mk/)\n" +"Language: mk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Откажи" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Креирано од" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Креирано на" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Прикажи име" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Последно ажурирање од" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Последно ажурирање на" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Производ" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/mn.po b/stock_barcode/i18n/mn.po new file mode 100644 index 0000000..3d9fc83 --- /dev/null +++ b/stock_barcode/i18n/mn.po @@ -0,0 +1,1626 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Onii Onii , 2022 +# Uuganbayar Batbaatar , 2022 +# Bayarkhuu Bataa, 2022 +# Minj P , 2022 +# Насан-Очир , 2022 +# Батмөнх Ганбат , 2022 +# hish, 2022 +# Baasansuren Sharavsuren , 2022 +# Martin Trigaux, 2022 +# Batmunkh Ganbat , 2022 +# Baskhuu Lodoikhuu , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2022-09-22 05:49+0000\n" +"Last-Translator: Baskhuu Lodoikhuu , 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr " Баркод хэвлэх комманд" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "Бараа нэмэх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Хуваарилалт" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Хэрэгжүүлэх" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Дутагдлын захиалгын баталгаажуулалт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Зураасан код" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Зураасан кодын дүрэм" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Баркод Бэлтгэх баримт Захиалагч Үйлдэл" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Зураасан код уншигдсан" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Зураасан кодыг уншиж байна" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Кабель зохион байгуулалтын хайрцаг" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Цуцлах" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "Хаах" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Тохиргооны тохируулга" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Барааны баркодыг тохируулах" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Батлах" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Харилцах хаяг" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Тоолсон тоо" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Шинэ шилжүүлэг үүсгэх" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Үүсгэсэн этгээд" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Үүсгэсэн огноо" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "Устгах" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "Хүрэх байрлал" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Очих хайрцаг" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Үл хэрэгсэх" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Дэлгэрэнгүй нэр" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Энэ зурвасыг дахиж битгий харуул" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Татаж авах" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Хиймэл" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Сүүлийн батламжлал" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "Ерөнхий" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "#{kanban_getcolorname(record.color.raw_value)} дотор" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Барааны Олон улсын хувийн дугаар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Тооллогын тохируулга" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "Тооллогын бүртгэл" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Нөөцийн байрлалууд" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "Дууссан" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Сүүлд зассан этгээд" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Сүүлд зассан огноо" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Орхих" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Байрлал" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Байрлалыг боловсруулсан" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Серийн дугаар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Үгүй" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "Дотоод бэлтгэх төрөл алга. Агуулахын тохиргоо дотор тохируулна уу." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Задлах дүрэм" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Бэлтгэх баримтын дэлгэцыг нээх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Үйл ажиллагаа" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Эзэмшигч" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Савлагаа" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Савлагаа" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Савлагаа" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Бэлтгэх баримт" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Бэлтгэх баримтын дэлгэрэнгүй" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Баримтын төрөл" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Хүргэлтийн тасалбар хэвлэх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Агуулах хэвлэх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "бэлтгэх ажиллагааг хэвлэх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Бараа" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Барааны баркодууд" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Барааны хөдөлгөөн (Дэлгэрэнгүй)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Барааны Баглаа" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Барааны хэмжих нэгж" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Барааны хувилбар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Хайрцагт хийх" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Хайрцагт хийх" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Тоо хэмжээ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Боловсруулсан тоо" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Нөөцийн бүртгэл" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Хасах" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Унших" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Унших" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Бараагаа уншуулах эсвэл шинэ эх байрлалыг уншуулна уу" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Эх байрлалыг уншуулна уу" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Хаягдал" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Бүтээгдэхүүн сонгох" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Сериал/Цувралын дугаар" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Гарах байрлал" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Гарах баглаа" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Уншуулах бол товшино уу" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Нөөцийн тооллого баталгаажсан" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Уншуулсан сериал дугаарыг аль хэдийн ашигласан байна." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Шилжүүлэг цуцлагдсан" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Шилжүүлэг баталгаажсан" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Энэ савалгааг аль хэдийн уншуулсан байна." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Уг баримт аль хэдийн дууссан" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Боловсруулах" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Шилжүүлэг" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Хэмжих нэгж" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Хэмжих нэгж" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Зөвшөөрөх" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Сүүлд уншуулсан зураасан кодын утга." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Агуулах" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "Бид танд зориулж баркод бүхий цөөн хэдэн демо өгөгдлийг үүсгэсэн. Хэвлэх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Та уншуулсан баркодонд тохирох ямар нэг бараа олдсонгүй." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "агуулахын комманд" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "баримт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "байршил" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "ажиллагааны төрөл" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "бараа" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "үлдэгдлийн баркод хүснэгт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "энэ модул юу хийж чадахыг шалгахын тулд! Та баркодоо хэвлэх боломжтой" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "энэ байршлаас шинэ шилжүүлгийг үүсгэх." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "шинэ шилжүүлэг үүсгэх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "нээх" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/my.po b/stock_barcode/i18n/my.po new file mode 100644 index 0000000..7675e45 --- /dev/null +++ b/stock_barcode/i18n/my.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Chester Denn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2016-09-07 09:57+0000\n" +"Last-Translator: Chester Denn , 2016\n" +"Language-Team: Burmese (https://www.transifex.com/odoo/teams/41243/my/)\n" +"Language: my\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "ဘားကုဒ်" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/nb.po b/stock_barcode/i18n/nb.po new file mode 100644 index 0000000..7f25293 --- /dev/null +++ b/stock_barcode/i18n/nb.po @@ -0,0 +1,1776 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Jan Pedro Tumusok , 2024 +# Thor Arne Hvidsten , 2024 +# Cécile Collart , 2024 +# Lars Aam , 2024 +# Lars Petter Lilleng, 2024 +# Joar Horvei, 2024 +# Martin Trigaux, 2024 +# Jorunn D. Newth, 2024 +# Marius Stedjan , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Marius Stedjan , 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Legg til produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Tildeling" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Bruk" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Bekreftelse på restordre" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Strekkode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Strekkode-nomenklatur" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode Skannet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Strekkodeavlesing" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Avbryt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Lukk" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Innstillinger" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Sett opp produkt-strekkoder" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Bekreft" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Opprettet av" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Opprettet den" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Slett" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Destinasjonslokasjon" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Destinasjonspakke" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Avbryt" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Visningsnavn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Ikke vis denne meldingen igjen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Last ned" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Dummy" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Endelig validering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Bilde" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Internasjonalt artikkelnummer brukt til produktidentifisering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lagerlokasjoner" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Sist oppdatert" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Sted" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/Serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nei" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operasjoner" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Eier" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Pakke" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakker" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Emballasje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Overordnet lokasjon" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Plukk" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Plukktype" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Produktstrekkoder" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produktemballasje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produktenhet" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Produktvariant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Putt i pakke" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Putt i pakke" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Antall ferdig" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Antall" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Fullført antall" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Fjern den" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Returner produkter" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Vrak" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serie-/partinummer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Kildelokasjon" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Kildepakke" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Lagerbevegelse" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Trykk for å skanne" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Å Behandle" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Å gjøre" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Overføring" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Enhet" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Enhet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Valider" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Verdien fra siste avleste strekkode." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Lager" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "sted" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/ne.po b/stock_barcode/i18n/ne.po new file mode 100644 index 0000000..24a32ba --- /dev/null +++ b/stock_barcode/i18n/ne.po @@ -0,0 +1,1616 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Bishisht Bhatta , 2017 +# Amit Kumar , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Amit Kumar , 2018\n" +"Language-Team: Nepali (https://www.transifex.com/odoo/teams/41243/ne/)\n" +"Language: ne\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "रद्द गर्नुहोस्" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "द्वारा सिर्जना गरियो" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "मा सिर्जना गरियो" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "नाम प्रदर्शन " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "उत्पादन" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/nl.po b/stock_barcode/i18n/nl.po new file mode 100644 index 0000000..44f9a1c --- /dev/null +++ b/stock_barcode/i18n/nl.po @@ -0,0 +1,1834 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2023 +# Jolien De Paepe, 2024 +# Erwin van der Ploeg , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s kan niet worden geïnventariseerd. Alleen voorraadproducten kunnen worden " +"geïnventariseerd." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Barcodecommando's en bewerkingssoorten afdrukken" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Het demo-blad met barcodes afdrukken" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Opslaglocaties afdrukken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Een product getraceerd op serienummer kan niet meerdere hoeveelheden hebben " +"voor hetzelfde serienummer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Product toevoegen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Extra product toevoegen?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Na elk product" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Na een groep producten" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Alle producten zijn reeds geretourneerd" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Alle producten moeten worden verpakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Toewijzing" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Volledige pickvalidatie toestaan" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Laat een picking bevestigen, zelfs als er nog niets is gescand (en doe dus " +"een onmiddellijke overdracht)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Er is een niet-bestaand verpakkingsssoort gescand. Dit deel van de barcode " +"kan niet worden verwerkt." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Toepassen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Weet je zeker dat je deze bewerking wilt annuleren?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Backorder" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Backorder bevestiging" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Barcode app" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Barcode Voorraad Klant Actie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Handmatige invoer barcode" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Barcode nomenclatuur" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Barcode picking klant actie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barcode gescand" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Barcode scanning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Barcodescan is dubbelzinnig met verschillende modellen: %s. Gebruik de meest" +" waarschijnlijke." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "De barcodes zijn niet beschikbaar." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kabelbeheer box" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Annuleren" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Bewerking annuleren" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Verplaatsing annuleren" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Bewerking annuleren" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Deze bewerking annuleren?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Afsluiten" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Configuratie instellingen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configureer productbarcodes" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Bevestigen" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Getelde hoeveelheid" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Maak een nieuwe overdracht" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Kast op maat (metriek)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Kast op maat (VS)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Verwijderen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Demogegevens actief" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Bestemmingslocatie" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Bestemmingsverpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Bestemmingslocatie moet worden gescand" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Negeren" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Wil je dit bericht permanent verwijderen? Het verschijnt niet meer, dus wees" +" er zeker van dat je het barcodeblad niet meer nodig hebt of dat je een " +"kopie hebt." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Moet de picker de gescande producten inpakken? Zo ja, in welke volgorde?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "Moet de picker de bestemming scannen? Zo ja, in welke volgorde?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Niet annuleren" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Dit bericht niet meer weergeven" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Klaar /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Downloaden" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Dummie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Aantal lege verplaatsingen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Eindvalidatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Volgende backorder werd aangemaakt:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Volgende backorders werden aangemaakt:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Scan bestemmingslocatie forceren?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Scan partij/serienummer forceren?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Productscan forceren?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Bronlocatiescan forceren?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forceer een bestemming op alle producten" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forceer alle producten om te worden verpakt" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Inpakken forceren?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Partij verbergen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Partijnaam verbergen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Als de bronlocatie moet worden gescand, moet de bestemmingslocatie ofwel na " +"elk product worden gescand, ofwel helemaal niet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Als je nu bevestigt, worden de resterende producten toegevoegd aan een " +"backorder." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Afbeelding" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Onvolledige verplaatsing" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Internationaal artikelnummer voor product identificatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Voorraadaanpassing" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Voorraadaanpassingen (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Voorraadlocaties" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Pickingtype barcode" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Laat maar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"Het product van de regel moet worden gescand voordat de regel kan worden " +"bewerkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Locatie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Locatie verwerkt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Partij/Serienummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Verplichte bestemmingslocatie" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Verplichte scan" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Verplichte bronlocatie" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nee" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Geen %(picking_type)s klaar voor deze %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Geen scan" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Geen intern bewerkingstype. Je dient één te configureren in de magazijn " +"instellingen." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Geen picking of locatie of product dat overeenkomt met barcode %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Geen picking of product dat overeenkomt met barcode %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Geen product, partij of verpakking gevonden voor barcode %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclature" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Niet de verwachte scan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Open picking" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Open pickingsformulier" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Bewerkingen" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Optionele scan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Eigenaar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Verpakkingssoort %s is correct toegepast op verpakking %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Verpakkingen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Verpakking" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Verpakkingshoeveelheid" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Bovenliggende locatie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Bestemming bovenliggende locatie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Aantal gedeeltelijke verplaatsingen" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Verplaatsing" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Pickingdetails" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Picking type" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Scan de bestemmingslocatie voor %s voordat je een ander product scant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Graag opnieuw te scannen!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Druk op Bevestigen of scan een ander product" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Barcodes afdrukken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Leveringsbon afdrukken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Tellijst afdrukken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Verpakkingen afdrukken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Pickingbewerkingen afdrukken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Product" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Productbarcodes" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Productverplaatstingen (voorraadverplaatsingsregels)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Productverpakkingen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Referentiecode product" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Hoeveelheid producten in voorraad" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Maateenheid product" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Productvariant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Inpakken" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Inpakken" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Aantal gedaan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Hoeveelheid" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Hoeveelheid gereed" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" +"Hoeveelheid van de verpakking in de maateenheid van de " +"voorraadverplaatsingsregel." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Aantallen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Verwijderen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Retour producten" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Retourzendingen kunnen alleen worden aangemaakt voor orders die klaar zijn, " +"bevestig eerst." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scan een" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Scan een locatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Scan een partijnummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Scan een partijnummer of een verpakking en vervolgens de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Scan een partijnummer en vervolgens de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Scan een verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Een verpakking scannen of inpakken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Scan een verpakking of de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Scan een verpakking, de bestemmingslocatie of een ander product" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Scan een product" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Scan een product voordat je een trackingnummer scant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Scan een product van %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Scan een product in %s of scan een andere locatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Scan een product of een verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Scan een product of een ander verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Scan een product of de bestemmingslocatie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Scan een product en vervolgens de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Scan een product, een partij/serienummer of een verpakking om de " +"verplaatsingen te filteren." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Scan een product, een verpakking of de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Scan een product, een verpakking of de bestemmingslocatie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Een serienummer scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Scan een serienummer of een verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Scan een serienummer of een verpakking en vervolgens de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Scan een serienummer en vervolgens de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Scan een overdracht of een product om je records te filteren" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Scan een overdracht, een product of een verpakking om je records te filteren" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scan een" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Scan een ander serienummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" +"Scan partijnummers voor product %s om de hoeveelheid ervan te wijzigen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Scan meer partijnummers" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Scan meer partijnummers of een verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Scan meer producten in %s of scan een andere locatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Scan meer producten of een verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Scan meer producten of scan een nieuwe bronlocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Scan serienummers voor product %s om de hoeveelheid te wijzigen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Scan de bestemmingslocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Scan het verpakking %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scan de bronlocatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Scan de bronlocatie of een verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"De gescande hoeveelheid gebruikt %s als maateenheid, maar deze maateenheid " +"is niet compatibel met die van de regel (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Gescande hoeveelheid gebruikt %s als maateenheid, maar deze maateenheid is " +"niet compatibel met die van het product (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Scan de verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Afkeuren" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Selecteer een product" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serie/Partijnummer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Barcodenomenclatuur weergeven" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Barcode Validatie weergeven" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Bronlocatie" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Bronverpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Blijf op de verplaatsing" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Voorraadverplaatsing" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Verpakkingssoort:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Tik aan om te scannen" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Technisch veld dat aangeeft of het moet worden gebruikt in de Barcodeapp en " +"dat wordt gebruikt om de zichtbaarheid in de gerelateerde UI te regelen." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Technisch veld dat gebruikt wordt om te berekenen of de groep " +"\"Eindvalidatie\" moet worden weergegeven, waarmee gecombineerde " +"groepen/onzichtbare complexiteit worden opgelost." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "De voorraadaanpassing is bevestigd" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "De gescande locatie behoort niet tot de bestemming van deze operatie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "De gescande locatie behoort niet tot de locatie van deze bewerking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "De gescande serienummer is al in gebruik." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "De overdracht is geannuleerd" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "De overdracht is bevestigd" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Er is niets om op deze pagina toe te passen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Er is niets om af te drukken op deze pagina." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Dit verpakking is al gescand." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "De picking is al gereed" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Deze picking is geannuleerd" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Dit serienummer is al in gebruik." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Te verwerken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Te doen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Om verpakking te gebruiken, activeer 'Verpakking' in de instellingen" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Verplaatsing" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Overdrachtsnaam" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Met overdrachten kun je producten van de ene naar de andere locatie " +"verplaatsen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Typ hier de barcode die je wilt scannen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Maateenheid" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Maateenheid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Gebruik camera om te scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Bevestigen" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Waarde van de laatst gescande barcode." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Viewer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Magazijn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"We hebben wat demodata en barcodes voor jou gemaakt om de mogelijkheden te " +"verkennen. Druk het" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Verkeerde maateenheid" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Je staat op het punt het product %(productName)s uit locatie %(locationName)s te nemen, maar dit product is niet gereserveerd in deze locatie. \n" +"Scan de huidige locatie om te bevestigen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Er wordt van je verwacht dat je één of meerdere producten of een verpakking " +"op de picklocatie scant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Er wordt verwacht dat je één of meerdere producten scant." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Het is de bedoeling dat je %s of een andere bronlocatie scant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Je kunt geen verpakkingssoort gebruiken. Scan eerst het product of selecteer" +" een regel" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Je kan geen afkeuringen registreren in dit stadium van de bewerking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Je hebt reeds %s items van deze verpakking gescand. Wil je de hele " +"verpakking scannen?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Je hebt minder producten verwerkt dan de initiële vraag:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Je moet een verpakking scannen of inpakken" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Je moet een product scannen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "commando's en bewerkingssoorten" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "document" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "locatie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "bewerkingssoort" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "verpakking" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "product" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "producten werden helemaal niet verwerkt." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "producten werden gedeeltelijk verwerkt." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "voorraad barcodes formulier" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "af om te bekijken wat deze module allemaal kan! Je kunt ook de" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "om een nieuwe verplaatsing te maken vanuit deze locatie." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "om een nieuwe verplaatsing aan te maken." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "om de inhoud ervan te kennen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "om te openen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "om de locatie en hoeveelheid te tonen." diff --git a/stock_barcode/i18n/nl_BE.po b/stock_barcode/i18n/nl_BE.po new file mode 100644 index 0000000..69f1b3c --- /dev/null +++ b/stock_barcode/i18n/nl_BE.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Dutch (Belgium) (https://www.transifex.com/odoo/teams/41243/nl_BE/)\n" +"Language: nl_BE\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Annuleren" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Product" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/pl.po b/stock_barcode/i18n/pl.po new file mode 100644 index 0000000..486fbda --- /dev/null +++ b/stock_barcode/i18n/pl.po @@ -0,0 +1,1818 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s nie mogą być inwentaryzowane. Inwentaryzowane mogą być tylko produkty " +"nadające się do przechowywania." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "Drukuj arkusz demonstracyjny kodów kreskowych" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Produkt śledzony według numerów seryjnych nie może mieć wielu ilości dla " +"tego samego numeru seryjnego." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Dodaj Produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Dodać dodatkowy produkt?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Po każdym produkcie" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Po grupie produktów" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Wszystkie produkty muszą być zapakowane" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Przydział" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Zezwalaj na pełną walidację kompletacji" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Zezwalaj na walidację kompletacji, nawet jeśli nic nie zostało jeszcze " +"zeskanowane (a więc wykonaj natychmiastowy transfer)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Zeskanowano nieistniejący typ pakietu. Ta część kodu kreskowego nie może " +"zostać przetworzona." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Zastosuj" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Czy na pewno chcesz anulować tę operację?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Zamówienie zaległe" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Potwierdzenie pobrania częściowego" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Kod kreskowy" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplikacja kodów kreskowych" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Akcja klienta inwentaryzacji kodów kreskowych" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Ręczne wprowadzanie kodu kreskowego" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura kodu kreskowego" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Akcja kliencka pobierania kodów kreskowych" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Zeskanowany kod kreskowy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Skanowanie kodu kreskowego" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Skanowanie kodu kreskowego jest niejednoznaczne w przypadku kilku modeli: " +"%s. Użyj najbardziej prawdopodobnego." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Organizer na przewody" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Anuluj" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Anuluj operację" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Anuluj transfer" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Anuluj operację" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Anulować tę operację?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Zamknij" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Ustawienia konfiguracji" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfiguracja kodów kreskowych produktów" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Potwierdź" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Zliczona ilość" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Utwórz nowy transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Utworzył(a)" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Data utworzenia" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Obudowa niestandardowa (metryczna)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Obudowa niestandardowa (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Usuń" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Aktywne dane demonstracyjne" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Strefa docelowa" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Paczka docelowa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Lokalizacja docelowa musi zostać zeskanowana" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Odrzuć" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nazwa wyświetlana" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Czy osoba kompletująca musi pakować zeskanowane produkty? Jeśli tak, to w " +"jakim tempie?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Czy osoba kompletująca musi skanować miejsce docelowe? Jeśli tak, to w jakim" +" tempie?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Nie anuluj" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Nie pokazuj więcej tego komunikatu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Gotowe /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Pobierz" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Bezczynny" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Liczba pustych ruchów" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Ostateczne zatwierdzenie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Utworzono następujące zamówienie oczekujące:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Utworzono następujące zamówienia oczekujące:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Wymusić skanowanie lokalizacji docelowej?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Wymusić skanowanie partii/serii?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Wymusić skanowanie produktu?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Wymusić skanowanie lokalizacji źródła?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Wymuś miejsce docelowe na wszystkich produktach" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Wymuszenie pakowania wszystkich produktów" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Siła włożona do opakowania?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Jeśli lokalizacja źródłowa musi być skanowana, lokalizacja docelowa musi być" +" skanowana po każdym produkcie lub nie musi być skanowana wcale." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Jeśli zatwierdzisz teraz, pozostałe produkty zostaną dodane do zamówienia " +"oczekującego." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Obraz" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "W #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Niekompletny transfer" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Międzynarodowy numer artykułu stosowany do identyfikacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Aktualizacja stanów magazynowych" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Strefy Magazynowe" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Ostatnio aktualizowane przez" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Data ostatniej aktualizacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Zostaw to" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Produkt linii musi zostać zeskanowany przed edycją linii." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Miejsce" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Przetworzona lokalizacja" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Partia/Numer seryjny" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Obowiązkowa lokalizacja docelowa" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Skan obowiązkowy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Obowiązkowa lokalizacja źródła" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nie" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Brak %(picking_type)s gotowych na %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Brak skanowania" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Brak wewnętrznego typu operacji. Należy go skonfigurować w ustawieniach " +"magazynu." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Brak kompletacji, lokalizacji lub produktu odpowiadającego kodowi kreskowemu" +" %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"Brak kompletacji lub produktu odpowiadającego kodowi kreskowemu %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Nie jest to oczekiwany skan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Otwórz kompletację" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Otwórz formularz kompletacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacje" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Opcjonalne skanowanie" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Właściciel" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Opakowanie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Typ pakietu %s został poprawnie zastosowany do pakietu %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Paczki" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Opakowania" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Ilość w opakowaniu" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Strefa nadrzędna" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Częściowa liczba ruchów" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Pobranie" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Szczegóły kompletacji" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Typ pobrania" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Przed zeskanowaniem innego produktu należy zeskanować lokalizację docelową " +"dla %s." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Proszę, zeskanuj ponownie!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Naciśnij przycisk Zatwierdź lub zeskanuj inny produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Drukuj dowód dostawy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Drukowanie inwentaryzacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Drukowanie pakietów" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Operacje drukowania kompletacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Kody kreskowe produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Przesunięcia produktu (pozycja przesunięcia zasobów)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Opakowanie produktu" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Ilość zapasów produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Jednostka miary produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Wariant produktu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Umieść w opakowaniu" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Umieść w Paczce" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Ilość" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Ilość wykonanych:" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Ilość opakowań w JM linii ruchu zapasów." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kwanty" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Usuń to" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Zwrot produktów" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Skanowanie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Skanowanie lokalizacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Skanowanie numeru partii" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Zeskanuj numer partii lub paczki, a następnie lokalizację docelową." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Zeskanuj numer partii, a następnie lokalizację docelową" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Skanowanie paczki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Skanowanie paczki lub pakowanie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Skanowanie paczki lub lokalizacji docelowej" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Skanowanie paczki, lokalizacji docelowej lub innego produktu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Skanowanie produktu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Skanowanie produktu przed zeskanowaniem numeru śledzenia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Zeskanuj produkt z %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Zeskanuj produkt w %s lub zeskanuj inną lokalizację" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Skanowanie produktu lub paczki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Skanowanie produktu lub innego opakowania" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Zeskanuj produkt lub lokalizację docelową." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Zeskanuj produkt, a następnie lokalizację docelową" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Skanowanie produktu, paczki lub lokalizacji docelowej" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Zeskanuj produkt, paczkę lub lokalizację docelową." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Skanowanie numeru seryjnego" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Skanowanie numeru seryjnego lub paczki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Zeskanuj numer seryjny lub paczkę, a następnie lokalizację docelową" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Zeskanuj numer seryjny, a następnie lokalizację docelową" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Skanowanie przelewu lub produktu w celu filtrowania rekordów" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Skanowanie przelewu, produktu lub paczki w celu filtrowania rekordów" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Skanowanie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Zeskanuj inny numer seryjny" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Skanowanie numerów partii produktów %s w celu zmiany ich ilości" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Zeskanuj więcej numerów partii" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Skanowanie większej liczby numerów partii lub opakowań" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Zeskanuj więcej produktów w %s lub zeskanuj inną lokalizację" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Skanowanie większej liczby produktów lub paczki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" +"Skanowanie większej liczby produktów lub skanowanie nowej lokalizacji " +"źródłowej" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Skanowanie numerów seryjnych dla produktów %s w celu zmiany ich ilości" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skanowanie lokalizacji docelowej" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Skanowanie paczki %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Skanowanie lokalizacji źródłowej" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Skanowanie lokalizacji źródłowej lub pakietu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Zeskanowana ilość używa %s jako jednostki miary, ale ta jednostka JM nie " +"jest zgodna z jednostką (%s) linii." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Zeskanowana ilość używa %s jako jednostki miary, ale ta jednostka miary nie " +"jest zgodna z jednostką miary produktu (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Odpad" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Wybierz produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Numer seryjny / partii" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Pokaż nomenklaturę kodów kreskowych" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Pokaż walidację kodu kreskowego" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Strefa źródłowa" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Paczka żródłowa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Pozostać na transferze" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Przesunięcie" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Typ pakietu magazynowego" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Dotknij, aby zeskanować" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Pole techniczne używane do obliczenia, czy grupa \"Ostateczna walidacja\" " +"powinna być wyświetlana, rozwiązując połączone grupy / niewidoczną " +"złożoność." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Korekta zapasów została zatwierdzona" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Zeskanowany numer seryjny jest już używany." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Transfer został anulowany" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Transfer został zatwierdzony" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Na tej stronie nie ma nic do zastosowania." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Na tej stronie nie ma nic do wydrukowania." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Ten pakiet jest już zeskanowany." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "To kompletowanie jest już zakończone" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "To kompletowanie jest anulowane" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Ten numer seryjny jest już używany." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Do przetworzenia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Do zrobienia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Aby korzystać z pakietów, włącz opcję \"Pakiety\" w ustawieniach." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Przekaz" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nazwa transferu" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Transfery umożliwiają przenoszenie produktów z jednej lokalizacji do " +"drugiej." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Wpisz tutaj kod kreskowy, który chcesz zeskanować" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Jednostka miary" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "JM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Użyj kamery do skanowania" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Zatwierdź" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Wartość ostaniego zeskanowanego kodu kreskowego" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Widz" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Magazyn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Stworzyliśmy kilka danych demonstracyjnych z kodami kreskowymi, abyś mógł " +"zapoznać się z funkcjami. Drukuj" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Nieprawidłowa jednostka miary (UoM)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Oczekuje się, że zeskanujesz jeden lub więcej produktów lub paczkę dostępną " +"w miejscu kompletacji." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Oczekuje się, że zeskanujesz jeden lub więcej produktów." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Powinieneś skanować %s lub inną lokalizację źródłową" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Nie można zastosować typu pakietu. Najpierw zeskanuj produkt lub wybierz " +"linię" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Przetworzono mniej produktów niż wynosiło początkowe zapotrzebowanie:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Należy zeskanować paczkę lub umieścić ją w opakowaniu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Musisz zeskanować produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "położenie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "typ operacji" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "pakiet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "produkty nie były w ogóle przetwarzane." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "produkty zostały częściowo przetworzone." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "arkusz kodów kreskowych" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"aby sprawdzić, co potrafi ten moduł! Możesz również wydrukować kod kreskowy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "aby utworzyć nowy transfer z tej lokalizacji." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "aby utworzyć nowy transfer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "poznać jego zawartość." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "aby go otworzyć." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "aby pokazać jego lokalizację i ilość." diff --git a/stock_barcode/i18n/pt.po b/stock_barcode/i18n/pt.po new file mode 100644 index 0000000..01b2d53 --- /dev/null +++ b/stock_barcode/i18n/pt.po @@ -0,0 +1,1773 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Manuela Silva , 2023 +# Wil Odoo, 2023 +# Rita Bastos, 2024 +# Maitê Dietze, 2024 +# Peter Lawrence Romão , 2024 +# Vasco Rodrigues, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Vasco Rodrigues, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Adicionar Produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Alocação" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Aplicar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmação de Transferência Diferida" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Código de Barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de Código de Barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de Barras lido" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Fechar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configurar Código de Barras do Produto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contacto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Quantidade Contabilizada" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Eliminar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Localização de Destino" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Embalagem de Destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Descartar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nome" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Transferir" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Teste" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validação Final" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Imagem" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "Em #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Número Internacional de Artigo usado para identificação do artigo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajuste de Inventário" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Localizações de Inventário" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Localização" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lote/Série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Não" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operações" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Dono" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Pacote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Embalagens" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Embalamento" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Quantidade por embalagem" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Localização Ascendente" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Operação de Stock" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipo de Operação de Stock" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Códigos de Barras de Produto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimentos do artigo (movimentos de stock)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Acondicionamento de Artigo" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidade de Medida de Artigo" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variante de Artigo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Colocar em Embalagem" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Quantidade" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Quantidade Efetuada" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quants" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Devolver Artigos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Quebras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Localização de origem" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Embalagem de origem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Movimento do Inventário" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toque para digitalizar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Por Processar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr " A Fazer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transferência" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unidade de medida" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UoM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor do último código de barras lido." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visualizador" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Armazém" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "documento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "localização" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/pt_BR.po b/stock_barcode/i18n/pt_BR.po new file mode 100644 index 0000000..f2f1e8f --- /dev/null +++ b/stock_barcode/i18n/pt_BR.po @@ -0,0 +1,1835 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# a75f12d3d37ea5bf159c4b3e85eb30e7_0fa6927, 2023 +# Maitê Dietze, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s não podem ser inventariados. Somente produtos armazenáveis podem ser " +"inventariados." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Imprimir comandos de códigos de barras e tipos de" +" operação" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" +" Imprimir folha de demonstração de código de " +"barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Imprimir locais de armazenamento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Um produto rastreado por números de série não pode ter várias quantidades " +"para o mesmo número de série." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Adicionar produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Adicionar produto extra?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Depois de cada produto" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Após o grupo de produtos" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Todos os produtos já foram devolvidos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Todos os produtos devem ser embalados" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Alocação" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Permitir a validação completa da separação" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Permitir a validação de uma separação mesmo que nada tenha sido escaneado " +"ainda (e, portanto, fazer uma transferência imediata)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Um tipo de embalagem inexistente foi escaneado. Essa parte do código de " +"barras não pode ser processada." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Aplicar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Tem certeza de que deseja cancelar essa operação?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Pedido em espera" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmação de pedido em espera" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Código de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplicativo de código de barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Ação do cliente de inventário por código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Entrada manual de código de barras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclatura de código de barras" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Ação do cliente de separação por código de barras" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Código de barra escaneado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Leitura de código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"A leitura do código de barras é ambígua com vários modelos: %s. Use o mais " +"provável." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Os códigos de barra não estão disponíveis." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Caixa de gerenciamento de cabos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Cancelar operação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Cancelar transferência" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Cancelar operação" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Cancelar essa operação?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Fechar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configurar código de barras do produto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmar" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contato" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Quantidade contada" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Criar uma nova transferência" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Armário personalizado (métrico)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Armário personalizado (EUA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Excluir" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Dados de demonstração ativos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Local de destino" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Destino da embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "O local de destino deve ser escaneado" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Cancelar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nome exibido" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Deseja remover permanentemente esta mensagem? Ela não aparecerá mais, " +"portanto, certifique-se de que não precisará da planilha de códigos de " +"barras ou de uma cópia." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"O seletor precisa colocar os produtos escaneados em uma embalagem? Em caso " +"afirmativo, a que taxa?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "O seletor deve escanear o destino? Em caso afirmativo, a que taxa?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Não cancelar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Não mostrar essa mensagem novamente" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Concluído/" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Baixar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Fictício" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Contagem de movimentações vazias" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validação final" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "O seguinte pedido em espera foi criado:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Os seguintes pedidos pendentes foram criados:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Forçar a verificação do local de destino?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Forçar escaneamento de lote/série?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Forçar escaneamento do produto?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Forçar escaneamento do local de origem?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forçar um destino em todos os produtos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forçar todos os produtos a serem embalados" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Forçar a colocação em pacote?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Ocultar lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Ocultar nome do lote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Se o local de origem precisar ser escaneado, o local de destino deverá ser " +"escaneado após cada produto ou não será escaneado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Se você validar agora, os produtos restantes serão adicionados a um pedido " +"em espera." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Imagem" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "Em #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Transferência incompleta" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Número internacional de artigo, usado para identificação do produto." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajuste de estoque" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Ajustes de estoque (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Locais de inventário" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "O código de barras é do tipo separação" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Deixar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"O produto da linha deve ser escaneado antes que a linha possa ser editada" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Local" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Local processado" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lote/série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Local de destino obrigatório" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Escaneamento obrigatório" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Local de origem obrigatório" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Não" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Não há %(picking_type)s prontos para %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Sem escaneamento " + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "Nenhum tipo de operação interna. Configure nas definições de armazém." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Nenhuma separação, local ou produto correspondente ao código de barras " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"Nenhuma separação ou produto correspondente ao código de barras %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" +"Nenhum produto, lote ou embalagem encontrada para o código de barras %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Não é o escaneamento esperado" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Separação aberta" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Abrir formulário de separação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operações" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Escaneamento opcional " + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Proprietário" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "O tipo de embalagem %s foi aplicado corretamente à embalagem %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Embalagens" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Embalagem" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Quantidade por embalagem" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Local principal" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Destino do local principal" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Contagem de movimentações parciais" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Separação" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detalhes da separação" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tipo de separação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Escaneie o local de destino para %s antes de escanear outro produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Escaneie novamente." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Pressione validar ou escaneie outro produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Imprimir códigos de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Imprimir guia de entrega" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Imprimir inventário" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Imprimir embalagens" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Imprimir operações de separação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produto" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Códigos de barras do produto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Movimentações do produto (linha da movimentação de estoque)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Embalagem de produto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Código de referência do produto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Quantidade de produto em estoque" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unidade de medida do produto" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variante do produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Colocar no pacote" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Colocar no pacote" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Qtd. concluída" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Quantidade" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Quantidade concluída" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Quantidade da embalagem na UM da linha de movimentação de estoque." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quants" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Remover isso" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Devolver produtos" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"As devoluções só podem ser criadas para separações concluídas. Valide-as " +"primeiro." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Escaneie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Escanear um local" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Escanear um número de lote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Escaneie um número de lote ou uma embalagem e, em seguida, o local de " +"destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Escaneie um número de lote e, em seguida, o local de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Escanear embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Escaneie ou insira embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Escaneie uma embalagem ou o local de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Escaneie uma embalagem, o local de destino ou outro produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Escanear um produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Escanear um produto antes de escanear um número de rastreamento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Escanear um produto de %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Escaneie um produto em %s ou escaneie outro local" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Escanear um produto ou outra embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Escanear um produto ou outra embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Escaneie um produto ou o local de destino." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Escaneie um produto e depois o local de destino" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Escaneie um produto, um número de série/lote ou uma embalagem para filtrar " +"as transferências." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Escaneie um produto, uma embalagem ou o local de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Escaneie um produto, uma embalagem ou o local de destino." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Escanear um número de série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Escanear um número de série ou embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" +"Escaneie um número de série ou uma embalagem e, em seguida, o local de " +"destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Escaneie um número de série e, em seguida, o local de destino" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Escaneie uma transferência ou um produto para filtrar seus registros" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Escaneie uma transferência, um produto ou uma embalagem para filtrar seus " +"registros" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Escaneie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Escanear outro número de série" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Escaneie os números de lote do produto %s para alterar a quantidade" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Escanear mais números de lotes" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Escanear mais números de lotes ou embalagens" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Escanear mais produtos em %s ou escanear outro local" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Escanear mais produtos ou embalagens" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Escanear mais produtos ou escanear um novo local de origem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Escaneie números de série do produto %s para alterar a quantidade" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Escaneie o local de destino " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Escanear a embalagem %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Escaneie o local de destino " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Escaneie o local de origem ou uma embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"A quantidade escaneada usa %s como unidade de medida, mas essa UM não é " +"compatível com a da linha (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"A quantidade escaneada usa %s como unidade de medida, mas essa UM não é " +"compatível com a do produto (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Escanear pacote" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Sucata" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Selecionar um produto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Lote/número de série" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Mostrar nomenclatura do código de barras" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Mostrar validação do código de barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Local de origem" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Embalagem de origem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Permanecer na transferência" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Movimentação de estoque" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tipo de embalagem de estoque" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Toque para escanear" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Campo técnico que indica se deve ser usado no aplicativo de código de barras" +" e usado para controlar a visibilidade na IU relacionada." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Campo técnico usado para calcular se o grupo \"validação final\" deve ser " +"exibido, eliminando grupos combinados/complexidade invisível." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "O ajuste de estoque foi validado" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "O local digitalizado não pertence ao destino dessa operação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "O local escaneado não pertence ao local dessa operação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "O número de série escaneado já está sendo usado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "A transferência foi cancelada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "A transferência foi validada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Não há nada para aplicar nesta página." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Não há nada para imprimir nessa página." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Essa embalagem já foi escaneada." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Essa separação já foi feita" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Essa separação foi cancelada" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Esse número de série já está sendo usado." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "A processar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "A fazer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Para usar embalagens, ative \"embalagens\" nas configurações" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transferência" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nome da transferência" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Transferências permitem mover produtos de um local para outro." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Digite o código de barras que você deseja escanear aqui" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unidade de medida" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Usar câmera para escanear" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valor do último código de barras escaneado." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Visualizador" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Armazém" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Criamos alguns dados de demonstração com códigos de barras para que você " +"possa explorar os recursos. Imprima" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Unidade de medida incorreta" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Você está prestes a retirar o produto %(productName)s do local %(locationName)s, mas esse produto não está reservado nesse local.\n" +"Escaneie o local atual para confirmar isso." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Você deve escanear um ou mais produtos ou uma embalagem disponível no local " +"de separação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Espera-se que você escaneie um ou mais produtos." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Você deve escanear %s ou outro local de origem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Não é possível aplicar um tipo de embalagem. Primeiro, escaneie o produto ou" +" selecione uma linha" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Não é possível registrar sucata nesse estágio da operação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Você já escaneou %s itens desse pacote. Quer escanear o pacote inteiro?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Você processou menos produtos do que a demanda inicial:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "É necessário escanear ou inserir embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Você deve escanear um produto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "comandos e tipos de operação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "documento" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "local" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tipo de operação" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "embalagem" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produto" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "produtos não foram processados." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "produtos foram parcialmente processados." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "a folha de códigos de barras do estoque" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"para ver o que esse módulo pode fazer! Você também pode imprimir o código de" +" barras" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "para criar uma nova transferência a partir desse local." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "para criar uma nova transferência." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "para saber o conteúdo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "para abri-lo." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "para mostrar o local e a quantidade." diff --git a/stock_barcode/i18n/ro.po b/stock_barcode/i18n/ro.po new file mode 100644 index 0000000..ea00c08 --- /dev/null +++ b/stock_barcode/i18n/ro.po @@ -0,0 +1,1821 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Vacaru Adrian , 2024 +# Foldi Robert , 2024 +# Martin Trigaux, 2024 +# Hongu Cosmin , 2024 +# Cozmin Candea , 2024 +# Dorin Hongu , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s nu poate fi inventariat. Doar produsele stocabile pot fi inventariate." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" +" Imprimați comenzile de coduri de bare și tipurile" +" de operațiuni" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Imprimați foaia demo de cod de bare" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Un produs urmărit de numere de serie nu poate avea mai multe cantități " +"pentru aceeași serie de numere." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Adaugă produs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Adăugați un produs suplimentar?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "După fiecare produs" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "După grupul de produse" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Toate produsele trebuie ambalate" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Alocare" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Permiteți validarea completă a ridicării" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Permiteți validarea unei ridicări chiar dacă nimic nu a fost scanat încă (și" +" astfel, faceți o transferare imediată)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"A fost scanat un tip de pachet inexistent. Această parte a codului de bare " +"nu poate fi procesată." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Aplică" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Confirmare restanță" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Cod de bare" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Aplicație cod de bare" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Acțiunea clientului de inventar cod de bare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenclator cod de bare" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Acțiunea clientului de ridicare cod de bare" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Cod de bare scanat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Scanare cod de bare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Scanarea codului de bare este ambiguă cu mai multe modele: %s. Utilizați cel" +" mai probabil." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Cutie de gestionare a cablurilor" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Anulează" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Anulează operațiunea" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Anulează operațiunea" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Închide" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Setări de configurare" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Configurați codurile de bare ale produsului" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Confirmă" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Contact" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Cantitate faptică" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Creați un nou transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Creat de" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Creat în" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Cabinet personalizat (metric)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Cabinet personalizat (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Șterge" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Date demo active" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Locația destinație" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Pachet destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Locația destinație trebuie scanată" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Abandonează" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Nume afișat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Trebuie puse într-un pachet produsele scanate? Dacă da, la ce valoare?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "Trebuie scanată locația destinație? Dacă da, la ce valoare?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Nu anulați" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Nu mai afișa acest mesaj" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Descarcă" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Fictiv" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Număr de mutări goale" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Validare finala" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Forțați scanarea locației destinație?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Forțați scanarea lotului/seriului?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Forțați scanarea produsului?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Forțați scanarea locației sursă?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Forțați o destinație pentru toate produsele" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Forțați toate produsele să fie ambalate" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Forțați pune în pachet?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Dacă trebuie scanată locația sursă, atunci locația destinație trebuie sau să" +" fie scanată după fiecare produs sau să nu fie scanată deloc." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Imagine" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Număr de articol internațional folosit pentru identificarea produselor." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Ajustare inventar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Locații inventar" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Ultima actualizare făcută de" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Ultima actualizare pe" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Lăsați-l" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Linia produsului trebuie scanată înainte ca linia să poată fi editată" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Locatie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Locație procesată" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/Serial" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Locație destinație obligatorie" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Scanare obligatorie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Locație sursă obligatorie" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nu" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Niciun(o) %(picking_type)s gata pentru acest %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Fără scanare" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Niciun tip de operație internă. Vă rugăm să configurați una în setările " +"depozitului." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Niciun picking sau locație sau produs corespunzător codului de bare " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Niciun picking sau produs corespunzător codului de bare %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenclator" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Nu este scanarea așteptată" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Deschide picking" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Formular de preluare deschis" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operații" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Scanare opțională" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Proprietar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Tipul de pachet %s a fost aplicat corect pachetului %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pachete" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Ambalare" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Cantitate pachete" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Locație principală" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Număr de mișcări parțiale" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Ridicare" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detalii preluare" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tip ridicare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Vă rugăm să scanați locația destinație pentru %s înainte de a scana alte " +"produse" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Apăsați Validare sau scanati alt produs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Tipărire livrare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Tipărește inventar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Tipărește pachete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Tipăriți operațiunile de preluare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produs" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Cod bare produs" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Mișcări de produs (linie mișcare stoc)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Ambalare Produs" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Poziția de stoc a produsului" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Unitate de măsură produs" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Variantă produs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Pune în Pachet" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Pune în Pachet" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Cantitate" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Cantitate Efectuată" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" +"Cantitatea ambalajului în unitatea de măsură a liniei de mișcare de stoc." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Poziții de stoc" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Elimină" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Returnare produse" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scanați" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Scanați o locație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Scanați un număr lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Scanați un număr lot sau un pachet apoi locația destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Scanați un număr lot apoi locația destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Scanați un pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Scanați un pachet sau puneți în pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Scanați un pachet sau locația destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Scanați un pachet, locația destinație sau alt produs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Scanați un produs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Scanați un produs înainte de a scana un număr de urmărire" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Scanați un produs de la %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Scanați un produs în %s sau scanați o altă locație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Scanați un produs sau un pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Scanați un produs sau un alt pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Scanați un produs sau locația destinație." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Scanați un produs apoi locația destinație" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Scanați un produs, un pachet sau locația destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Scanați un produs, un pachet sau locația destinație." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Scanați un număr de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Scanați un număr de serie sau un pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Scanați un număr de serie sau un pachet apoi locația destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Scanați un număr de serie apoi locația destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Scanați un transfer sau un produs pentru a filtra înregistrările" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Scanați un transfer, un produs sau un pachet pentru a filtra înregistrările" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scanați un" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Scanați un alt număr de serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" +"Scanați numerele lotului pentru produsul %s pentru a schimba cantitatea" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Scanați mai multe numere de lot" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Scanați mai multe numere de lot sau un pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Scanați mai multe produse în %s sau scanați o altă locație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Scanați mai multe produse sau un pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Scanați mai multe produse, sau scanați o nouă locație sursă" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Scanați numerele de serie pentru produsul %s pentru a schimba cantitatea" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Scanați locația de destinație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Scanați pachetul %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scanați locația sursă" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Scanați locația sursă sau un pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Cantitatea scanată folosește %s ca Unitate de Măsură, dar această UM nu este" +" compatibilă cu cea a liniei (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Cantitatea scanată folosește %s ca unitate de măsură, dar această UM nu este" +" compatibilă cu cea a produsului (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Rebut" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Selectați un produs." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Număr serial / Lot" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Afișează nomenclatorul codurilor de bare" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Afișează validarea codurilor de bare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Locație sursă" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Pachet sursă" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Mișcare stoc" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tip pachet stoc" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Atinge pentru a scana" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Câmp tehnic utilizat pentru a calcula dacă grupul \"Validare finală\" ar " +"trebui să fie afișat, rezolvând complexitatea combinată a grupurilor / " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Ajustarea inventarului a fost validată" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Numărul de serie scanat este deja utilizat." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Transferul a fost anulat." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Transferul a fost validat" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Nu există nimic de aplicat în această pagină." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Nu există nimic de tipărit în această pagină." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Acest pachet a fost deja scanat." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Această ridicare este deja făcută" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Această ridicare este anulată" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Acest număr de serie este deja utilizat." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Procesare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "De făcut" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Pentru a utiliza pachete, activați „Pachete” în setări" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Nume transfer" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Transferurile vă permit să mutați produsele dintr-o locație în alta." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Unitatea de măsură" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Validează" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Valoarea ultimului cod de bare scanat." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Telespectator" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Depozit" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Am creat câteva date demo cu coduri de bare pentru dumneavoastră ca să " +"puteți explora caracteristicile. Tipărește" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Unitate de măsură greșită" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Așteptăm să scanați unul sau mai multe produse sau un pachet disponibil în " +"locația de ridicare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Trebuie să scanați unu sau mai multe produse." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Trebuie să scanați %s sau o altă locație sursă" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Nu puteți aplica un tip de pachet. Începeți prin a scana un produs sau " +"selectați o linie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Ați procesat mai puține produse decât cererea inițială:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Trebuie să scanați un pachet sau să puneți în pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Trebuie să scanați un produs" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "document" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "locație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tip de operație" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "pachet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produs" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "produse nu au fost procesate deloc." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "produsele au fost procesate parțial." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "foaie de coduri de bare stoc" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"pentru a verifica ce face aceste modul! Puteți de asemenea să tipăriți codul" +" de bare" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "pentru a crea un nou transfer din această locație." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "pentru a crea un nou transfer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "pentru a ști conținutul." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "pentru a-l deschide." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "pentru a arăta locația și cantitatea." diff --git a/stock_barcode/i18n/ru.po b/stock_barcode/i18n/ru.po new file mode 100644 index 0000000..930ae56 --- /dev/null +++ b/stock_barcode/i18n/ru.po @@ -0,0 +1,1839 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Ivan Kropotkin , 2023 +# Vasiliy Korobatov , 2023 +# Alena Vlasova, 2023 +# Sergey Vilizhanin, 2023 +# Сергей Шебанин , 2023 +# Martin Trigaux, 2023 +# Collex100, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s не может быть инвентаризирована. Инвентаризации подлежат только продукты," +" пригодные для хранения." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " Команды и типы операций печати штрихкодов" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Печать демонстрационного листа со штрихкодом" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Места хранения печатной продукции" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Товар, отслеживаемый по серийным номерам, не может иметь несколько количеств" +" для одного и того же серийного номера." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Добавить продукт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Добавить дополнительный продукт?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "После каждого продукта" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "После группы продуктов" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Все товары уже возвращены" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Все продукты должны быть упакованы" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Распределение" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Обеспечьте полную проверку комплектации" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Позволяет подтверждать пикинг, даже если еще ничего не было отсканировано " +"(и, таким образом, делать немедленную передачу)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Был отсканирован несуществующий тип упаковки. Эта часть штрихкода не может " +"быть обработана." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Применить" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Вы уверены, что хотите отменить эту операцию?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Предварительный заказ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Подтверждение заказа на возврат" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Штрихкод" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Приложение для работы со штрих-кодами" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Клиентское действие для инвентаризации штрих-кодов" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Ручной ввод штрих-кода" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Номенклатура штрих-кодов" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Действие клиента по подбору штрихкодов" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Сканирование штрих-кода" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Сканирование QR-кода" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Сканирование штрих-кода неоднозначно с несколькими моделями: %s. Используйте" +" наиболее вероятную." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Штрих-коды недоступны." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Коробка для прокладки кабелей" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Отменить" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Отменить операции" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Отменить перевод" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Отмена операции" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Отменить эту операцию?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Закрыть" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Параметры конфигурации" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Настройка штрих-кодов продуктов" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Подтвердить" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Контакты" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Подсчитанное Количество" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Создать новый трансфер" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Создано" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Создано" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Шкаф на заказ (метрический)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Кабинет на заказ (США)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Удалить" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Демо-данные Активный" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Место назначения" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Место назначения упаковки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Место назначения должно быть отсканировано" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Отменить" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Вы хотите навсегда удалить это сообщение? Оно больше не появится, поэтому " +"убедитесь, что лист со штрих-кодами вам не нужен или у вас есть копия." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Должен ли сборщик укладывать в пакет отсканированные продукты? Если да, то в" +" каком размере?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Должен ли сборщик сканировать место назначения? Если да, то с какой " +"скоростью?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Не отменять" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Больше не показывать это сообщение" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Выполнено /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Скачать" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Заглушка" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Счетчик пустых перемещений" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Окончательная проверка" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Был создан следующий резервный заказ:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Были созданы следующие заказы:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Принудительное сканирование местоположения назначения?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Принудительное сканирование лота/серии?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Принудительное сканирование продукта?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Принудительное сканирование местоположения источника?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Принудительное назначение для всех продуктов" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Заставьте упаковать все продукты" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Силы, вложенные в упаковку?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Скрыть лот" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Скрыть Название лота" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Если исходное местоположение должно сканироваться, то местоположение " +"назначения должно либо сканироваться после каждого продукта, либо не " +"сканироваться вообще." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Если вы подтвердите заказ сейчас, оставшиеся продукты будут добавлены в " +"резервный заказ." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Изображение" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "В #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Неполный перевод" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Международный номер изделия, используемый для идентификации продукта." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Корректировка запасов" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Корректировки товарно-материальных запасов (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Расположения запасов" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Является ли штрих-код типом комплектации" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Последнее обновление" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Последнее обновление" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Оставь это" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Перед редактированием строки необходимо отсканировать ее продукт" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Местоположение" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Обработанное местоположение" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Партия/серия" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Обязательное место назначения" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Обязательное сканирование" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Обязательное расположение источника" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Нет" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Нет %(picking_type)s готов к этому %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Нет сканирования" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Нет внутреннего типа операции. Пожалуйста, задайте его в настройках склада." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Нет комплектации, местоположения или продукта, соответствующего штрихкоду " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Нет комплектации или продукта, соответствующего штрихкоду %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Для штрихкода %s не найдено ни одного продукта, партии или упаковки" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Номенклатура" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Не ожидаемое сканирование" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Открытый сбор" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Открытая форма для выбора" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Операции" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Дополнительное сканирование" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Владелец" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Пакет" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Тип пакета %s был правильно применен к пакету %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Пакеты" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Упаковка" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Количество в упаковке" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Родительское Местоположение" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Родительское местоположение Dest" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Счетчик частичных перемещений" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Выбор" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Подборка деталей" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Тип комплектования" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Пожалуйста, просканируйте место назначения для %s перед сканированием " +"другого продукта" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Пожалуйста, просканируйте еще раз!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Нажмите кнопку Validate или отсканируйте другой продукт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Печать штрих-кодов" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Распечатать Delivery Slip" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Инвентарь для печати" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Пакеты для печати" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Распечатать Операции перемещения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Товар" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Штрих-коды продуктов" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Перемещение продукта (Позиции движения запасов)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Упаковка продукта" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Справочный код продукта" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Количественный запас продукта" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Единица измерения продукта" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Вариант продукта" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Положить в пакет" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Положить в упаковку" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Количество сделаных" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Количество" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Выполненное кол-во" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Количество упаковок в UoM линии движения запасов." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Кванты" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Убери это" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Возвращаемые товары" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Возвраты могут быть созданы только для уже сделанных подборов, пожалуйста, " +"проверьте их сначала." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Сканирование" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Сканирование местоположения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Сканирование номера партии" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Отсканируйте номер партии или пакета, а затем место назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Отсканируйте номер партии, а затем место назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Сканирование пакета" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Отсканируйте пакет или положите в упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Сканируйте пакет или место назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Сканируйте пакет, место назначения или другой продукт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Сканирование продукта" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Сканируйте товар перед сканированием номера отслеживания" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Отсканируйте продукт с %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Сканирование продукта в %s или сканирование в другом месте" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Сканирование товара или упаковки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Сканирование продукта или другого пакета" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Отсканируйте продукт или место назначения." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Сканируйте продукт, а затем место назначения" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Отсканируйте товар, партию/серийный номер или упаковку, чтобы отфильтровать " +"переводы." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Сканируйте товар, упаковку или место назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Сканируйте товар, упаковку или место назначения." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Сканирование серийного номера" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Сканирование серийного номера или упаковки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Сканируйте серийный номер или пакет, а затем место назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Отсканируйте серийный номер, а затем место назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Сканирование перевода или продукта для фильтрации записей" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Сканируйте передачу, товар или пакет, чтобы отфильтровать записи" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Сканирование" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Отсканируйте другой серийный номер" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" +"Отсканируйте номера партий для продукта %s, чтобы изменить их количество" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Сканируйте больше номеров партий" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Сканирование нескольких номеров партий или пакетов" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Сканируйте больше товаров в %s или сканируйте в другом месте" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Сканирование нескольких товаров или пакета" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" +"Сканируйте больше продуктов или сканируйте новое местоположение источника" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Отсканируйте серийные номера для продукта %s, чтобы изменить их количество" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Сканирование места назначения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Сканирование пакета %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Сканирование исходного местоположения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Сканирование исходного местоположения или пакета" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Отсканированное количество использует %s в качестве единицы измерения, но " +"эта единица измерения не совместима с единицей измерения строки (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Отсканированное количество использует %s в качестве единицы измерения, но " +"эта единица измерения несовместима с единицей измерения продукта (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Пакет для сканирования" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Несоответствующая продукция" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Выберите продукт" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Серийный номер/Номер лота" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Показать номенклатуру штрихкодов" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Показать проверку штрих-кода" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Исходное местоположение" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Пакет \"Источник" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Оставайтесь на трансфере" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Движение запасов" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Тип комплекта поставки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Нажмите для сканирования" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Техническое поле, указывающее на необходимость использования в приложении " +"штрих-кода и используемое для контроля видимости в связанном " +"пользовательском интерфейсе." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Техническое поле, используемое для расчета необходимости отображения группы " +"\"Окончательная проверка\", решения комбинированных групп/невидимой " +"сложности." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Корректировка запасов была подтверждена" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Отсканированный серийный номер уже используется." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Перевод был отменен" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Перевод был подтвержден" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "На этой странице не нужно ничего применять." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "На этой странице нечего печатать." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Этот пакет уже отсканирован." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Сбор уже закончен" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Этот сбор отменяется" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Этот серийный номер уже используется." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "К обработке" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Сделать" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Чтобы использовать пакеты, включите \"Пакеты\" в настройках" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Перевод" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Название перевода" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Переводы позволяют перемещать товары из одного места в другое." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Введите здесь штрихкод, который вы хотите отсканировать" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Ед. изм" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "UoM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Используйте камеру для сканирования" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Проверка" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Значение последнего отсканированного штрихкода." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Просмотрщик" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Склад" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Мы создали несколько демонстрационных данных со штрих-кодами, чтобы вы могли" +" изучить их возможности. Распечатайте" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Неправильная единица измерения" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Вы собираетесь взять товар %(productName)s из местоположения %(locationName)s, но этот товар не зарезервирован в данном местоположении.\n" +"Просканируйте текущее местоположение, чтобы подтвердить это." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"От вас требуется отсканировать один или несколько продуктов или пакет, " +"имеющийся в месте сбора" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Вам предстоит отсканировать один или несколько продуктов." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" +"Предполагается, что вы сканируете %s или другое местоположение источника" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Вы не можете применить тип упаковки. Сначала отсканируйте продукт или " +"выберите строку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Вы не можете зарегистрировать лом на данном этапе операции" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Вы уже отсканировали %s элементов этого пакета. Вы хотите отсканировать весь" +" пакет?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Вы переработали меньше продукции, чем первоначальный спрос:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Вы должны отсканировать посылку или положить в пакет" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Вы должны отсканировать продукт" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "команды и типы операций" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "документ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "местоположение" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "тип операции" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "пакет" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "товар" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "продукты вообще не обрабатывались." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "продукты прошли частичную обработку." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "штриховой код на складе" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"чтобы проверить, на что способен этот модуль! Вы также можете распечатать " +"штрих-код" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "чтобы создать новую передачу из этого места." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "чтобы создать новую передачу." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "чтобы узнать его содержание." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "чтобы открыть его." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "чтобы показать его местоположение и количество." diff --git a/stock_barcode/i18n/sk.po b/stock_barcode/i18n/sk.po new file mode 100644 index 0000000..dd3f608 --- /dev/null +++ b/stock_barcode/i18n/sk.po @@ -0,0 +1,1783 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Tomáš Píšek, 2024 +# Larissa Manderfeld, 2024 +# Wil Odoo, 2024 +# MatejJurista, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: MatejJurista, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Pridajte produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Pridelenie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Použiť" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Potvrdenie pohľadávky" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Čiarový kód" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Názvoslovie čiarového kódu" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Čiarový kód naskenovaný" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Skenovanie čiarového kódu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Zrušené" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvoriť" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Nastavenia konfigurácie" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Nakonfigurujte čiarové kódy produktov" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Potvrdiť" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Vytvoril" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Vytvorené" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Zmazať" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Cieľová lokácia" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Cieľový balíček" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Zrušiť" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Zobrazovaný názov" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Stiahnuť" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Maketa" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Finálne schválenie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Obrázok" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "V # {kanban_getcolorname (record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Medzinárodné číslo položky použité pre identifikáciu výrobku" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Inventárna úprava" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Umiestnenia inventúry" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Naposledy upravoval" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Naposledy upravované" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Miesto" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Šarža/sériové" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nie" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" +"Nomenklatúra\n" +" " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operácie" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Majiteľ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Balík" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Balenia" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Balenie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Nadradená lokácia" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Vyberanie" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Typ výberu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Stlačte Potvrdiť alebo naskenujte ďalší produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Čiarové kódy produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Pohyby produktu (riadok skladového pohybu)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produktové balenie" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Merná jednotka produktu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Varianta produktu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Vložiť do balenia" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Vložiť do balenia" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Množstvo" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Množstvo spracované" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kvanty" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Vrátiť produkty" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Načítajte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Naskenujte produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Naskenujte produkt z %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Naskenujte pohyb, produkt alebo balenie pre filtrovanie záznamov" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Načítajte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Naskenujte cieľové miesto" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Naskenujte balenie %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Načítajte zdrojovú lokáciu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Vyradené" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Sériové číslo/Šarža" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Zdrojová lokácia" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Zdrojové balenie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Pohyb skladu" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Kliknutím skenujte" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Na spracovanie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Úlohy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Prevod" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Merná jednotka" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Merná jednotka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Potvrdiť" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Hodnota posledného naskenovaného čiarového kódu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Prehliadač" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Sklad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Očekává se, že naskenujete jeden nebo více produktů nebo balíček, který je k" +" dispozici na místě vyzvednutí" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Očakáva sa, že naskenujete jeden alebo viacero produktov." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Očakáva sa, že načítate %s alebo inú zdrojovú lokáciu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "lokácia" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "typ operácie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "balenie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "pre vytvorení nového presunu z tejto pozície." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "pre vytvorení nového presunu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "pre zistenie jeho obsahu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "pre jeho otvorenie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "pre zobrazenie lokácie a množstva." diff --git a/stock_barcode/i18n/sl.po b/stock_barcode/i18n/sl.po new file mode 100644 index 0000000..c3fb3fc --- /dev/null +++ b/stock_barcode/i18n/sl.po @@ -0,0 +1,1785 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Simon Gorše , 2023 +# laznikd , 2023 +# Tadej Lupšina , 2023 +# Vida Potočnik , 2023 +# Tomaž Jug , 2023 +# matjaz k , 2023 +# Matjaz Mozetic , 2023 +# Martin Trigaux, 2023 +# Jasmina Macur , 2023 +# Grega Vavtar , 2023 +# Katja Deržič, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%sni mogoče popisati. Popisati je mogoče le izdelke z zalogo" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Dodajte izdelek" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Želite dodati dodaten izdelek?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Vse izdelke je treba zapakirati" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Dodelitev" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Uporabi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Črtna koda" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Nomenklatura črtne kode" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Skenirana črtna koda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Skeniranje črtne kode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Prekliči" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Zaključi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Uredi nastavitve" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigurirajte črtne kode izdelka" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Potrdi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Stik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Prešteta količina" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Ustvaril" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Izbriši" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Ciljna lokacija" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Ciljno pakiranje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Ciljna lokacija mora biti skenirana" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Opusti" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Tega sporočila ne prikaži več" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Prenesi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Navidezno" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Končno preverjanje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Vsilite skeniranje ciljne lokacije?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Vsilite skeniranje Lot / Serijskih številk" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Vsilite skeniranje izdelka" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Vsi izdelki naj imajo določeno ciljno destinacijo." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Vsilite pakiranje vseh izdelkov." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Slika" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "EAN za mednarodno identifikacijo izdelkov" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Popravek inventarja" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Lokacije inventure" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Pustite ga" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Lokacija" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Obdelana lokacija" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/serijska številka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ne" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacije" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Lastnik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Programski paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Pakiranja" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Pakiranje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Količina pakiranja" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Nadrejena lokacija" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Prevzem" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tip zbirnika" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Pritisnite Potrditev ali poskenirajte drug izdelek" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Natisni dobavnico" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Natisni zalogo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Natisni zbirnik" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Izdelek" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Črtne kode proizvodov" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Pakiranje proizvoda" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Merska enota izdelka" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Različica izdelka" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Dajte v paket" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Dajte v paket" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Količina" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Opravljena količina" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kvanti" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Odstrani ga" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Vrni izdelke" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Skenirajte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Skeniraj lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Skenirajte serijsko številko ali paket in nato ciljno lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Skenirajte izdelek" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Skenirajte izdelek iz%s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Skenirajte izdelek v%sali skenirajte drugo lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Skenirajte izdelek ali paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Skenirajte izdelek ali drug paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Skenirajte izdelek ali ciljno lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Skeniraj serijsko šetvilko" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Skeniraj serijsko številko ali paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Skenirajte serijsko številko ali paket in nato še ciljno lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Skenirajte serijsko številko in nato še ciljno lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Skenirajte prenos, izdelek ali paket za filtriranje zapisov" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Skrenirajte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Skenirajte drugo serijsko številko" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Skenirajte već izdelkov v%s ali skenirajte drugo lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Skeniraj serijsko številko izdelka%s za spremembo njihove količine" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skeniranje ciljne lokacije" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Skeniranje paketa %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Skeniraj izvorno lokacijo ali paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Skenirana količina uporablja%s kot mersko enoto, vendar ta enota ni " +"združljiva z enoto v vrstici (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Skenirana količina uporablja%s kot mersko enoto, vendar ta enota ni " +"združljiva z enoto mere izdelka (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Paket za skeniranje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Odpis" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Pokaži potrditev črtne kode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Izvorna lokacija" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Izvorno pakiranje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Premik zaloge" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Tip paketa zaloge" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Kliknite za optično branje" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Skenirana lokacija ne pripada lokacije te operacije" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Skenirana serijska številka je že uporabljena." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Prenos je bil preklican" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Prenos je potrjen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Na tej strani ni ničesar za tiskanje." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Ta paket je že skeniran" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Ta prenos je že opravljen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Ta serijska številka je že uporabljena." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Za obdelavo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Opravki" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Prenos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Enota mere" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "EM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Potrditev" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Vrednost zadnje skenirane črtne kode." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Gledalec" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Skladišče" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Napačna enota mere" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Od vas se pričakuje, da boste skenirani enega ali več izdelkov" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "V tem stanju operacije ne morete registrirati odpadkov" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Poskenirali ste že%s elementov tega paketa. Ali želite skenirati celoten " +"paket?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Morate skenirati izdelek" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "lokacijo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "tip operacije" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "izdelek" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "in preverite, kaj ta modul zmore! Črtno kodo lahko tudi natisnete" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "za ustvarjanje novega transferja iz te lokacije." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "za ustvarjanje novega transferja." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr ", da ga odprete." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "za prikaz lokacije in količine" diff --git a/stock_barcode/i18n/sq.po b/stock_barcode/i18n/sq.po new file mode 100644 index 0000000..5222088 --- /dev/null +++ b/stock_barcode/i18n/sq.po @@ -0,0 +1,1615 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Albanian (https://www.transifex.com/odoo/teams/41243/sq/)\n" +"Language: sq\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Anullo" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Krijuar nga" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Krijuar me" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Emri i paraqitur" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Modifikuar per here te fundit nga" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Modifikuar per here te fundit me" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkti" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/sr.po b/stock_barcode/i18n/sr.po new file mode 100644 index 0000000..f635cfd --- /dev/null +++ b/stock_barcode/i18n/sr.po @@ -0,0 +1,1808 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2023 +# Milan Bojovic , 2023 +# Jelena Stamatović, 2024 +# コフスタジオ, 2024 +# Dragan Vukosavljevic , 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Dragan Vukosavljevic , 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%s can't be inventoried. Only storable products can be inventoried." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Štampanje demo liste barkoda" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Dodaj proizvod" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Dodajte dodatni proizvod?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "After each product" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "After group of Products" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "All products need to be packed" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Alokacija" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Allow full picking validation" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Primeni" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Backorder Confirmation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Bar-kod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Barcode App" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Barcode Inventory Client Action" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Bar-kod nomenklatura" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Barcode Picking Client Action" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barkod skeniran" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Barcode Scanning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Barcode scan is ambiguous with several model: %s. Use the most likely." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Cable Management Box" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Otkaži" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Otkazati operaciju" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Cancel operation" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Podešavanje konfiguracije" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigurišite bar kodove proizvoda" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Potvrdi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Izbrojana količina" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Create a new transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Customized Cabinet (Metric)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Customized Cabinet (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Obriši" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Demo Data Active" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Lokacija destinacije" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Odredišni paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Lokacija mora biti skenirana." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Poništi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "Does the picker have to scan the destination? If yes, at which rate?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Don't cancel" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Don't show this message again" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Preuzmi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Pomoćna" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Empty Move Count" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Konačna validacija" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Force Destination Location scan?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Force Lot/Serial scan?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Force Product scan?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Force Source Location scan?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Force a destination on all products" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Force all products to be packed" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Force put in pack?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Slika" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "In #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "International Article Number used for product identification." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Prilagođavanje inventara" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Inventory Locations" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Poslednji put ažurirao" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Poslednji put ažurirano" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Leave it" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Line's product must be scanned before the line can be edited" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Lokacija" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Lokacija obrađena" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/Serial" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Obavezna odredišna lokacija" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Obavezno skeniranje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Mandatory Source Location" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ne" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Nema spremnih %(picking_type)s za ovaj %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "No Scan" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"No internal operation type. Please configure one in warehouse settings." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"No picking or location or product corresponding to barcode %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "No picking or product corresponding to barcode %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatura" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Not the expected scan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Open picking" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Open picking form" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Radnje" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Optional Scan" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Vlasnik" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Package type %s was correctly applied to the package %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Packages" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Pakovanje" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Packaging Quantity" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Parent Location" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Partial Move Count" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Biranje" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Detalji odabira" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Tip preuzimanja" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Molim vas skenirajte odredišnu lokaciju za %s pre skeniranja drugog " +"proizvoda." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Molim, skenirajte ponovo!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Pritisnite Potvrdi ili skenirajte drugi proizvod" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Print Delivery Slip" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Print Inventory" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Print Packages" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Print Picking Operations" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Proizvod" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Product Barcodes" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Kretanje proizvoda (Linija pomeranja zaliha)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Product Packaging" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Proizvodna količina na stanju" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Jedinica mere proizvoda" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Varijanta proizvoda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Put In Pack" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Stavite u paket" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Količina" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Quantity Done" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Quantity of the Packaging in the UoM of the Stock Move Line." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quants" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Remove it" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Vratite proizvode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scan a" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Scan a location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Scan a lot number" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Skenirajte broj serije ili pakete, a zatim odredišnu lokaciju." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Scan a lot number then the destination location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Scan a package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Scan a package or put in pack" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Scan a package or the destination location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Skenirajte paket, odredišnu lokaciju ili drugi proizvod" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Skeniraj proizvod" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Skenirajte proizvod pre skeniranja broja za praćenje" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Skenirajte proizvod sa %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Skenirajte proizvod u %s ili skenirajte drugu lokaciju" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Skenirajte proizvod ili paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Skenirajte proizvod ili drugi paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Scan a product or the destination location." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Scan a product then the destination location" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Scan a product, a package or the destination location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Scan a product, a package or the destination location." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Scan a serial number" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Scan a serial number or a package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Skeniraj serijski broj ili paket, a zatim odredišnu lokaciju." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Skeniraj serijski broj, a zatim odredišnu lokaciju" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Skenirajte transfer ili proizvod radi filtriranja vaših zapisa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Skenirajte transfer, proizvod ili paket kako biste filtrirali svoje zapise." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scan an" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Scan another serial number" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Scan lot numbers for product %s to change their quantity" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Scan more lot numbers" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Scan more lot numbers or a package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Scan more products in %s or scan another location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Skenirajte više proizvoda ili paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Skenirajte više proizvoda ili skenirajte novu lokaciju izvora." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" +"Skeniraj serijske brojeve za proizvod %s kako bi se promenila njihova " +"količina" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skenirajte odredišnu lokaciju" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Skeniraj paket %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Scan the source location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Scan the source location or a package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Škart" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Izaberite proizvod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serial/Lot Number" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Show Barcode Nomenclature" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Prikaži validaciju barkoda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Lokacija izvora" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Source Package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Premeštanje zaliha" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "akcija vrste paketa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Dodirnite za skeniranje" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "The inventory adjustment has been validated" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "The scanned serial number is already used." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "The transfer has been cancelled" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "The transfer has been validated" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "There is nothing to apply in this page." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "There is nothing to print in this page." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "This package is already scanned." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "This picking is already done" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "This picking is cancelled" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Ovaj serijski broj je već korišćen." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "To Process" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Za uraditi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "To use packages, enable 'Packages' in the settings" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Prenos" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Naziv transfera" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Transfer omogućava premeštanje proizvoda s jedne lokacije na drugu." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Jedinica mere" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "JM" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Potvrdi" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Vrednost poslednjeg skeniranog barkoda." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Posmatrač" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Magacin" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Wrong Unit of Measure" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"You are expected to scan one or more products or a package available at the " +"picking location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "You are expected to scan one or more products." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "You are supposed to scan %s or another source location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "You can't apply a package type. First, scan product or select a line" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "You can't register scrap at this state of the operation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Imali ste manje obrađenih proizvoda od početne potražnje." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "You must scan a package or put in pack" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Morate skenirati proizvod" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "location" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "operation type" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "proizvod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "products were not processed at all." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "products were partially processed." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "stock barcodes sheet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "to check out what this module can do! You can also print the barcode" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "to create a new transfer from this location." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "to create a new transfer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "to know its content." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "to open it." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "prikazati njegovu lokaciju i količinu." diff --git a/stock_barcode/i18n/sr@latin.po b/stock_barcode/i18n/sr@latin.po new file mode 100644 index 0000000..9fc9f95 --- /dev/null +++ b/stock_barcode/i18n/sr@latin.po @@ -0,0 +1,1618 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Nemanja Dragovic , 2017 +# Djordje Marjanovic , 2017 +# Ljubisa Jovev , 2017 +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 16:01+0000\n" +"PO-Revision-Date: 2017-10-02 11:50+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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid " Delete" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "A product tracked by serial numbers can't have multiple quantities for the same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "An unexisting package type was scanned. This part of the barcode can't be processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barkod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Odustani" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__is_completed +msgid "Check if the quantity done matches the demand" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Datum kreiranja" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_dest_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message?\n" +" It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Does the picker have to put in a package the scanned products? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "General" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__is_completed +msgid "Is Completed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Promenio" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Vreme promene" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operacije" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Biranje" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes PDF" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Proizvod" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Scan a product or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Scanned product [%s] %s is not reserved for this transfer. Are you sure you want to add it?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__picking_location_id +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Technical field used to compute whether the \"Final Validation\" group should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Transfer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "We have created a few demo data with barcodes for you to explore the features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products or a package available at the picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands for Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/digipad.xml:0 +#, python-format +msgid "o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/stock_barcode.pot b/stock_barcode/i18n/stock_barcode.pot new file mode 100644 index 0000000..793faf6 --- /dev/null +++ b/stock_barcode/i18n/stock_barcode.pot @@ -0,0 +1,1764 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2024-08-13 10:41+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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/sv.po b/stock_barcode/i18n/sv.po new file mode 100644 index 0000000..caf3492 --- /dev/null +++ b/stock_barcode/i18n/sv.po @@ -0,0 +1,1817 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Kristoffer Grundström , 2023 +# Daniel Löfgren, 2023 +# Levi Siuzdak (sile), 2023 +# Kim Asplund , 2023 +# Haojun Zou , 2023 +# Robin Calvin, 2023 +# Chrille Hedberg , 2023 +# Leif Persson , 2023 +# Anders Wallenquist , 2023 +# Martin Trigaux, 2023 +# Mikael Åkerberg , 2023 +# Lasse L, 2023 +# Jakob Krabbe , 2024 +# Simon S, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Simon S, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%s kan inte inventeras. Endast lagringsbara produkter kan inventeras." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Skriv ut streckkodsdemorapport" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"En produkt som spåras med serienummer kan inte ha flera kvantiteter för " +"samma serienummer." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Lägg till Produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Lägg till extra produkt?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Efter varje produkt" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Efter grupp av produkter" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Alla produkter måste förpackas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Tilldelning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Tillåt fullständig validering av plockning" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Tillåt att validera ett plock även om ingenting har skannats ännu (och " +"således, gör en omedelbar överföring)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"En icke-existerande Emballagetyp skannades. Den här delen av streckkoden kan" +" inte bearbetas." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Verkställ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Restorderbekräftelse" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Streckkod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Streckkodsapp" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Klientåtgärd Streckkodsinventering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Streckkodsnomenklatur" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Klientåtgärd Streckkodsplockning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Streckkoden skannad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Streckkoden skannad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Streckkodsskanningen är tvetydig med flera modeller: %s. Använd det mest " +"troliga." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Kabelhanteringslåda" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Avbryt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Avbryt Operation" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Avbryt Operation" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Stäng" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Inställningar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Konfigurera produktstreckkoder" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Bekräfta" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontakt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Räknad kvantitet" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Skapa en ny överföring" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Anpassat skåp (metriskt)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Anpassat skåp (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Ta bort" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Demodata aktiv" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Destinationsplats" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Destinationsförpackning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Destinationplats måste skannas" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Förkasta" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Måste plockaren lägga de skannade produkterna i en förpackning? Om ja, i " +"vilken takt?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "Måste plockaren skanna destinationen? Om ja, till vilken hastighet?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Avbryt inte" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Visa inte det här meddelandet igen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Ladda ner" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Test" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Tomt Rörelseräkning" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Slutlig validering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Forcera skanning av destinationsplats?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Tvinga parti/serienummer skanning?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Tvinga produkt skanning?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Tvinga ursprungsplats skanning?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Tvinga en destination på alla produkter" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Tvinga alla produkter att packas" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Tvinga lägg i förpackning?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Om källplatsen måste skannas, måste målplatsen antingen skannas efter varje " +"produkt eller inte skannas alls." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Bild" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "I #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"European Article Number eller EAN som används för produktidentifiering." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Lagerinventering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Inventeringsställe" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad den" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Lämna" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Linjens produkt måste skannas innan linjen kan redigeras" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Plats" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Plats Bearbetad" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Parti/Serie" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Obligatorisk destination Plats" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Obligatorisk skanning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Obligatorisk ursprungsplats" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Nej" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Ingen %(picking_type)s redo för detta %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Ingen skanning" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Ingen intern operationstyp. Vänligen konfigurera en i lagerinställningarna." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Inget plock eller plats eller produkt som motsvarar streckkoden %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Inget plock eller produkt som motsvarar streckkoden %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Nomenklatur" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Inte den förväntade scanningen" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Öppna plock" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Öppna plockformulär" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operationer" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Valfri skanning" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Ägare" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Emballage" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Emballage typ %s användes korrekt på emballage %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Förpackning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Förpackning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Förpackningskvantitet" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Överliggande lagerplats" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Partiell flytträkning" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Plockning" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Plockdetaljer" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Plocktyp" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Vänligen skanna destinationsplats för %s innan du skannar annan produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Vänligen skanna igen!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Tryck på Validera eller skanna en annan produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Skriv ut följesedel" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Skriv ut inventering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Skriv ut förpackningar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Skriv ut plockoperationer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Produktstreckkoder" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Produktflyttar (lagerflyttsrad)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Produktförpackning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Produktlager Antal" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Produktens måttenhet" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Produktvariant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Lägg i förpackning" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Lägg i förpackning" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Antal klara" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Antal" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Antal färdiga" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Kvantitet av förpackningen i Stock Move Lines måttenhet." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Kvantiteter" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Ta bort den" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Returnera produkter" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Scanna en" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Skanna en plats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Skanna ett partinummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Skanna ett partinummer eller ett paket och sedan destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Skanna ett partinummer och sedan destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Skanna ett paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Skanna ett paket eller lägg i förpackning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Skanna ett paket eller destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Skanna ett paket, destinationsplatsen eller en annan produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Scanna en produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Skanna en produkt innan du skannar ett spårningsnummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Skanna en produkt från %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Skanna en produkt i %s eller skanna en annan plats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Skanna en produkt eller ett paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Skanna en produkt eller ett annat paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Skanna en produkt eller destinationsplatsen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Skanna en produkt och sedan destinationsplatsen" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Skanna en produkt, ett paket eller destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Skanna en produkt, ett paket eller destinationsplatsen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Skanna ett serienummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Skanna ett serienummer eller ett paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Skanna ett serienummer eller ett paket och sedan destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Skanna ett serienummer och sedan destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Skanna en överföring eller en produkt för att filtrera dina poster" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Skanna en överföring, en produkt eller ett paket för att filtrera dina " +"poster" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Scanna en" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Skanna ett annat serienummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Skanna partinummer för produkt %s för att ändra deras kvantitet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Skanna fler partinummer" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Skanna fler partinummer eller en förpackning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Skanna fler produkter i %s eller skanna en annan plats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Skanna fler produkter eller ett paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Skanna fler produkter eller skanna en ny källplats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Skanna serienummer för produkt %s för att ändra dess antal" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Skanna destinationsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Skanna paketet %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Skanna källplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Skanna källplatsen eller ett paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Skannad kvantitet använder %s som måttenhet, men denna måttenhet är inte " +"kompatibel med radens (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Skannad kvantitet använder %s som måttenhet, men denna måttenhet är inte " +"kompatibel med produktens (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Skrota" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Välj en produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Serie- / partinummer" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Visa streckkodsnomenklatur" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Visa Streckkod Validering" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Ursprungsplats" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Ursprungsförpackning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Lagerflytt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Lager Emballagetyp" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Klicka för att scanna" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Tekniskt fält som används för att beräkna om ”Slutgiltig Validering”-gruppen" +" bör visas, löser kombinerade grupper/osynlig komplexitet." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Lagerjusteringen har validerats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Det skannade serienummret används redan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Flytten har avbrutits" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Flytten har validerats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Det finns inget att tillämpa på denna sida." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Det finns inget att skriva ut på den här sidan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Detta emballage har redan skannats." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Denna plock är redan klar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Denna plock är avbruten" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Detta serienummer används redan." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Att behandla" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Att göra" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "För att använda embalage, aktivera \"Embalage\" i inställningarna" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Flytt" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Flyttnamn" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "Med flytt kan du flytta produkter från en plats till en annan." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Måttenhet" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Måttenhet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Bekräfta" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Värde på senast skannade streckkod." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Åskådare" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Lager" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Vi har skapat några demodata med streckkoder så att du kan utforska " +"funktionerna. Skriv ut" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Fel måttenhet" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Du förväntas skanna en eller flera produkter eller ett emballage " +"tillgängligt på plockningsplatsen" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Du förväntas skanna en eller flera produkter." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Du ska scanna %s eller en annan källplats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Du kan inte tillämpa ett emballage. Skanna först produkten eller välj en rad" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Du har bearbetat färre produkter än den ursprungliga efterfrågan:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Du måste skanna ett paket eller lägga i förpackning" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Du måste skanna en produkt" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "dokument" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "plats" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "operationstyp" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "produkt" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "produkter bearbetades inte alls." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "produkterna var delvis bearbetade." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "lager streckkodsrapport" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"för att se vad den här modulen kan göra! Du kan också skriva ut streckkoden" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "för att skapa en ny flytt från den här platsen." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "för att skapa en ny flytt." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "för att känna till dess innehåll." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "för att öppna det." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "för att visa dess plats och kvantitet." diff --git a/stock_barcode/i18n/th.po b/stock_barcode/i18n/th.po new file mode 100644 index 0000000..ea3ff62 --- /dev/null +++ b/stock_barcode/i18n/th.po @@ -0,0 +1,1808 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Rasareeyar Lappiam, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s ไม่สามารถจัดเก็บในสินค้าคงคลังได้ " +"สามารถจัดเก็บได้เฉพาะสินค้าที่จัดเก็บได้เท่านั้น" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " พิมพ์คำสั่งบาร์โค้ดและประเภทการดำเนินการ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " พิมพ์บาร์โค้ดใบการสาธิต" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " พิมพ์สถานที่จัดเก็บ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"สินค้าที่ติดตามด้วยหมายเลขซีเรียลไม่สามารถมีหมายเลขซีเรียลเดียวกันหลายจำนวนได้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "เพิ่มสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "เพิ่มสินค้า?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "หลังสินค้าแต่ละชิ้น" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "หลังกลุ่มสินค้า" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "สินค้าทั้งหมดได้รับการส่งคืนเรียบร้อยแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "สินค้าทั้งหมดจะต้องได้รับการบรรจุ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "การจัดสรร" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "อนุญาตให้มีการตรวจสอบความถูกต้องของการเบิกสินค้าแบบสมบูรณ์" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"อนุญาตให้ตรวจสอบความถูกต้องของการเบิกสินค้า แม้ว่าจะยังไม่ได้สแกน " +"(และทำการโอนย้ายทันที)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"สแกนประเภทบรรรจุภัณฑ์ที่ไม่มีอยู่แล้ว " +"ซึ่งไม่สามารถประมวลผลบาร์โค้ดส่วนนี้ได้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "นำไปใช้" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "คุณแน่ใจหรือไม่ว่าต้องการยกเลิกการดำเนินการนี้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "รายการสั่งซื้อล่วงหน้า" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "ยืนยันสั่งซื้อล่วงหน้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "บาร์โค้ด" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "แอปบาร์โค้ด" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "การดำเนินการของลูกค้าในบาร์โค้ดสินค้าคงคลัง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "การป้อนบาร์โค้ดด้วยตนเอง" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "การตีความบาร์โค้ด" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "การดำเนินการของลูกค้าในการเลือกบาร์โค้ด" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "สแกนบาร์โค้ดแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "การสแกนบาร์โค้ด" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"การสแกนบาร์โค้ดมีความคลุมเครือในหลายรุ่น: %s " +"ใช้อันที่มีความเป็นไปได้มากที่สุด" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "บาร์โค้ดไม่พร้อมใช้งาน" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "กล่องการจัดการสายเคเบิล" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "ยกเลิกการดำเนินการ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "ยกเลิกการโอนย้าย" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "ยกเลิกการดำเนินการ" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "ยกเลิกการดำเนินการนี้หรือไม่?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "ปิด" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "ตั้งค่าการกำหนดค่า" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "กำหนดค่าบาร์โค้ดของสินค้า" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "ยืนยัน" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "ติดต่อ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "จำนวนที่นับแล้ว" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "สร้างการจัดส่งใหม่" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "สร้างโดย" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "สร้างเมื่อ" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "ตู้สั่งทำพิเศษ (เมตริก)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "ตู้สั่งทำพิเศษ (สหรัฐอเมริกา)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "ลบ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "ข้อมูลสาธิตที่ใช้งานอยู่" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "ตำแหน่งปลายทาง" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "แพ็คเกจปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "ต้องสแกนตำแหน่งปลายทาง" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "ละทิ้ง" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "แสดงชื่อ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"คุณต้องการลบข้อความนี้อย่างถาวรหรือไม่ มันจะไม่แสดงอีกต่อไป " +"ดังนั้นตรวจสอบให้แน่ใจว่าคุณไม่จำเป็นต้องใช้แผ่นบาร์โค้ดหรือคุณมีสำเนาแล้ว" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"ผู้เบิกต้องใส่สินค้าที่สแกนลงในบรรจุภัณฑ์หรือไม่? ถ้าใช่ ต้องการใช้อัตราไหน?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "ผู้เบิกต้องสแกนปลายทางหรือไม่? ถ้าใช่ ต้องการใช้อัตราไหน?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "ไม่ยกเลิก" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "ไม่ต้องแสดงข้อความนี้อีก" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "เสร็จสิ้น /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "ดาวน์โหลด" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "ตัวจำลอง" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "จำนวนการย้ายที่ว่างเปล่า" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "การตรวจสอบความถูกต้องครั้งสุดท้าย" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "มีการสร้างการสั่งซื้อล่วงหน้าต่อไปนี้แล้ว:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "มีการสร้างการสั่งซื้อล่วงหน้าต่อไปนี้แล้ว:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "บังคับให้สแกนจากตำแหน่งปลายทางหรือไม่" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "บังคับให้สแกนล็อต/ซีเรียล?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "บังคับสแกนสินค้า?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "บังคับการสแกนจากตำแหน่งต้นทางหรือไม่" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "บังคับปลายทางกับสินค้าทั้งหมด" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "บังคับให้สินค้าทั้งหมดถูกบรรจุ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "บังคับให้ใส่ในแพ็ค?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "ซ่อนล็อต" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "ซ่อนชื่อล็อต" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ไอดี" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"หากจำเป็นต้องสแกนตำแหน่งต้นทาง " +"สินค้าในตำแหน่งปลายทางจะต้องถูกสแกนหรือไม่ถูกสแกนเลย" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "หากคุณตรวจสอบตอนนี้ สินค้าที่เหลือจะถูกเพิ่มไปยังคำสั่งซื้อล่วงหน้า" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "รูปภาพ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "ใน #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "การโอนไม่สมบูรณ์" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "หมายเลขบทความสากลที่ใช้เพื่อระบุสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "การปรับปรุงสินค้าคงคลัง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "การปรับสินค้าคงคลัง (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "ตำแหน่งคลังสินค้า" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "เป็นประเภทเบิกบาร์โค้ด" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "อัปเดตครั้งล่าสุดโดย" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "อัปเดตครั้งล่าสุดเมื่อ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "ทิ้งไว้" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "ต้องสแกนสินค้าของรายการก่อนจึงจะแก้ไขรายการได้" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "สถานที่" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "ประมวลผลตำแหน่งแล้ว" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "ล็อต/ซีเรียล" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "ตำแหน่งปลายทางที่จำเป็น" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "การสแกนที่จำเป็น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "ตำแหน่งต้นทางบังคับ" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "ไม่" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "เลขที่ %(picking_type)s พร้อมสำหรับ %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "ไม่มีการสแกน" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "ไม่มีประเภทการดำเนินการภายใน โปรดกำหนดค่าหนึ่งในการตั้งค่าคลังสินค้า" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "ไม่มีการเบิก ตำแหน่ง หรือสินค้าที่สอดคล้องกับบาร์โค้ด %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "ไม่มีการเบิกหรือสินค้าที่สอดคล้องกับบาร์โค้ด %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "ไม่พบผลิตภัณฑ์ ล็อต หรือบรรจุภัณฑ์สำหรับบาร์โค้ด %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "การตีความ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "ไม่ใช่การสแกนที่คาดไว้" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "เปิดการเบิกสินค้า" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "เปิดแบบฟอร์มการเบิกสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "การปฏิบัติการ" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "ตัวเลือกสแกน" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "เจ้าของ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "แพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "ประเภทบรรจุภัณฑ์ %s ถูกนำไปใช้กับบรรจุภัณฑ์ %s อย่างถูกต้อง" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "แพ็คเกจ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "การบรรจุหีบห่อ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "จำนวนบรรจุภัณฑ์" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "ตำแหน่งแม่" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "สถานที่ตั้งหลักปลายทาง" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "จำนวนการย้ายบางส่วน" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "การรับ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "รายละเอียดการเบิกสินค้า" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "ประเภทการรับ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "โปรดสแกนตำแหน่งปลายทางสำหรับ %s ก่อนที่จะสแกนสินค้าอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "กรุณาสแกนอีกครั้ง!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "กดตรวจสอบหรือสแกนสินค้าอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "พิมพ์บาร์โค้ด" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "พิมพ์ใบส่งสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "พิมพ์สินค้าคงคลัง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "พิมพ์แพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "พิมพ์การดำเนินการเบิกสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "สินค้า" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "บาร์โค้ดของสินค้า" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "ย้ายสินค้า ( ไลน์เคลื่อนย้ายสต๊อก )" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "บรรจุภัณฑ์ของสินค้า" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "รหัสอ้างอิงสินค้า" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "ปริมาณสต็อกสินค้า" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "หน่วยวัดสินค้า" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "ตัวแปรสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "ใส่แพ็ค" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "ใส่ในแพ็ค" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "จำนวนที่เสร็จแล้ว" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "ปริมาณ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "ปริมาณที่ทำเสร็จแล้ว" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "ปริมาณบรรจุภัณฑ์ใน UoM ของรายการย้ายสต็อก" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "วิเคราะห์เชิงปริมาณ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "ลบออก" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "คืนสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"สามารถสร้างการคืนสินค้าได้สำหรับการเบิกสินค้าที่เสร็จสิ้นแล้วเท่านั้น " +"โปรดตรวจสอบความถูกต้องก่อน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "สแกน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "สแกนตำแหน่ง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "สแกนเลขล็อต" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "สแกนหมายเลขล็อตหรือแพ็คเกจแล้วระบุตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "สแกนเลขล็อตแล้วระบุตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "สแกนแพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "สแกนแพ็คเกจหรือใส่แพ็ค" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "สแกนแพ็คเกจหรือตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "สแกนแพ็คเกจ สถานที่ปลายทาง หรือสินค้าอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "สแกนสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "สแกนสินค้าก่อนที่จะสแกนหมายเลขติดตาม" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "สแกนสินค้าจาก %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "สแกนสินค้าใน %s หรือสแกนตำแหน่งอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "สแกนสินค้าหรือแพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "สแกนสินค้าหรือแพ็คเกจอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "สแกนสินค้าหรือตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "สแกนสินค้าแล้วระบุตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "สแกนสินค้า ล็อต/ซีเรียลนัมเบอร์ หรือบรรจุภัณฑ์ เพื่อกรองการโอนเงิน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "สแกนสินค้า แพ็คเกจ หรือตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "สแกนสินค้า แพ็คเกจ หรือตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "สแกนหมายเลขซีเรียล" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "สแกนหมายเลขซีเรียลหรือแพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "สแกนหมายเลขซีเรียลหรือแพ็คเกจแล้วระบุตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "สแกนหมายเลขซีเรียลแล้วระบุตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "สแกนการโอนย้ายหรือสินค้าเพื่อกรองบันทึกของคุณ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "สแกนการโอนย้าย สินค้า หรือแพ็คเกจเพื่อกรองบันทึกของคุณ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "สแกน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "สแกนหมายเลขซีเรียลอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "สแกนหมายเลขล็อตสำหรับสินค้า %s เพื่อเปลี่ยนปริมาณ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "สแกนเลขล็อตเพิ่มเติม" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "สแกนหมายเลขล็อตหรือแพ็คเกจเพิ่มเติม" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "สแกนสินค้าเพิ่มเติมใน %s หรือสแกนตำแหน่งอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "สแกนสินค้าหรือแพ็คเกจเพิ่มเติม" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "สแกนสินค้าเพิ่มเติมหรือสแกนตำแหน่งต้นทางใหม่" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "สแกนหมายเลขซีเรียลของสินค้า %s เพื่อเปลี่ยนปริมาณ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "สแกนตำแหน่งปลายทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "สแกนแพ็คเกจ %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "สแกนตำแหน่งต้นทาง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "สแกนตำแหน่งต้นทางหรือบรรจุภัณฑ์" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"ปริมาณที่สแกนใช้ %s เป็นหน่วยวัด แต่ UoM นี้เข้ากันไม่ได้กับปริมาณของรายการ " +"(%s)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"ปริมาณที่สแกนใช้ %s เป็นหน่วยวัด แต่ UoM นี้เข้ากันไม่ได้กับปริมาณของสินค้า " +"(%s)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "กำลังสแกนแพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "เศษสินค้า" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "เลือกสินค้า" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "หมายเลขซีเรียล/ล็อต" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "แสดงระบบการตั้งชื่อบาร์โค้ด" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "แสดงการตรวจสอบบาร์โค้ด" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "ตำแหน่งต้นทาง" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "ตำแหน่งบรรจุภัณฑ์" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "อยู่ในการโอนย้าย" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "ย้ายสต็อก" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "ประเภทบรรจุภัณฑ์ของสต็อก" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "แตะเพื่อสแกน" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"ข้อมูลทางเทคนิคที่ระบุว่าควรใช้ในแอปบาร์โค้ดหรือไม่ " +"และใช้เพื่อควบคุมการมองเห็นใน UI ที่เกี่ยวข้อง" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"ฟิลด์เทคนิคที่ใช้ในการคำนวณว่าควรแสดงกลุ่ม \"การตรวจสอบขั้นสุดท้าย\" หรือไม่" +" เพื่อแก้ไขกลุ่มที่รวมกัน/ความซับซ้อนที่มองไม่เห็น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "การปรับสินค้าคงคลังได้รับการตรวจสอบแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "ตำแหน่งที่สแกนไม่ได้เป็นของปลายทางของการดำเนินการนี้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "ตำแหน่งที่สแกนไม่ได้เป็นของตำแหน่งของการดำเนินการนี้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "หมายเลขซีเรียลที่สแกนถูกใช้ไปแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "การโอนย้ายถูกยกเลิก" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "การโอนย้ายได้รับการตรวจสอบแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "ไม่มีอะไรที่จะใช้ในหน้านี้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "ไม่มีอะไรจะพิมพ์ในหน้านี้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "แพ็คเกจนี้ถูกสแกนแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "การเบิกสินค้านี้เสร็จสิ้นแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "การเบิกสินค้านี้ถูกยกเลิกแล้ว" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "หมายเลขซีเรียลนี้ถูกใช้ไปแล้ว" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "ที่จะดำเนินการ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "To do" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "หากต้องการใช้แพ็คเกจ ให้เปิดใช้งาน 'แพ็คเกจ' ในการตั้งค่า" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "โอน" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "ชื่อการโอนย้าย" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "การโอนย้ายทำให้คุณสามารถย้ายสินค้าจากที่หนึ่งไปยังอีกที่หนึ่งได้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "พิมพ์บาร์โค้ดที่คุณต้องการสแกนที่นี่" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "หน่วยวัด" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "หน่วยวัด" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "ใช้กล้องในการสแกน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "ตรวจสอบ" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "ค่าของบาร์โค้ดล่าสุดที่ถูกสแกน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "ผู้ดู" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "โกดังสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"เราได้สร้างข้อมูลสาธิตบางส่วนพร้อมบาร์โค้ด เพื่อให้คุณสำรวจคุณสมบัติต่างๆ " +"พิมพ์" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "หน่วยวัดที่ไม่ถูกต้อง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"คุณกำลังจะนำสินค้า %(productName)s จากสถานที่ %(locationName)s แต่สินค้านี้ไม่ได้ถูกจองไว้ในสถานที่นี้\n" +"สแกนตำแหน่งปัจจุบันเพื่อยืนยัน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"คุณจะต้องสแกนสินค้าหรือแพ็คเกจตั้งแต่หนึ่งรายการขึ้นไปที่ตำแหน่งเบิกสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "คุณจะต้องสแกนสินค้าอย่างน้อยหนึ่งรายการ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "คุณควรจะสแกน %s หรือตำแหน่งต้นทางอื่น" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"คุณไม่สามารถใช้ประเภทแพ็คเกจได้ ขั้นแรกให้สแกนสินค้าหรือเลือกรายการก่อน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "คุณไม่สามารถลงทะเบียนเศษสินค้าในสถานะการดำเนินการนี้ได้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"คุณได้สแกน %s รายการของแพ็คเกจนี้แล้ว คุณต้องการสแกนแพ็คเกจทั้งหมดหรือไม่" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "คุณได้ดำเนินการสินค้าน้อยกว่าความต้องการในตอนแรก:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "คุณต้องสแกนแพ็คเกจหรือใส่แพ็ค" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "คุณต้องสแกนสินค้า" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "คำสั่งและประเภทการดำเนินการ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "เอกสาร" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "ตำแหน่ง" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "ประเภทการดำเนินงาน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "แพ็คเกจ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "สินค้า" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "สินค้าไม่ได้รับการดำเนินการเลย" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "สินค้าได้รับการดำเนินการบางส่วน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "แผ่นบาร์โค้ดสต็อก" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "ดูว่าโมดูลนี้ทำอะไรได้บ้าง! คุณยังสามารถพิมพ์บาร์โค้ดได้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "เพื่อสร้างการโอนย้ายใหม่จากตำแหน่งนี้" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "เพื่อสร้างการโอนย้ายใหม่" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "เพื่อทราบข้อมูลเนื้อหา" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "เพื่อเปิดมัน" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "เพื่อแสดงตำแหน่งและปริมาณ" diff --git a/stock_barcode/i18n/tr.po b/stock_barcode/i18n/tr.po new file mode 100644 index 0000000..09c0c39 --- /dev/null +++ b/stock_barcode/i18n/tr.po @@ -0,0 +1,1789 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Ramiz Deniz Öner , 2023 +# Buket Şeker , 2023 +# Ertuğrul Güreş , 2023 +# Halil, 2023 +# Güven YILMAZ , 2023 +# Emre Akayoğlu , 2023 +# abc Def , 2023 +# Levent Karakaş , 2023 +# Ediz Duman , 2023 +# Ozlem Cikrikci , 2023 +# Ahmet Altinisik , 2023 +# Umur Akın , 2023 +# Murat Kaplan , 2023 +# Tugay Hatıl , 2023 +# Sinem Cil, 2024 +# Martin Trigaux, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Martin Trigaux, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Ürün Ekle" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Tahsis" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Uygula" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Ön Teslimat Onayı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Barkod" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Barkod Kural Seti" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Barkod Operasyon İstemcisi İşlemi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Barkod Tarandı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Barkod Taranıyor" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Yönetim Kutusu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "İptal" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Kapat" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Ürün Barkodlarını Yapılandır" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Onayla" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Kontak" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Sayılan Miktar" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Transfer oluştur" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Oluşturulma" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Sil" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Hedef Konum" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Hedef Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Vazgeç" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Bu mesajı bir daha gösterme" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "İndir" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Sahte" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Final Onaylama" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Görsel" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "#{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Uluslararası Makale numarası ürün tanımlama için kullanılır." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Sayım Farkı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Stok Konumları" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Son Güncelleyen" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Son Güncelleme" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Ayrıl" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Konum" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "İşlenen Konum" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lot/Seri" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Hayır" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Hiç bir iç operasyon türü yok. Lütfen depo ayarlarından bir tane " +"yapılandırın." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Sınıflandırma" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Açık toplama formu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Operasyonlar" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Sahibi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Paketler" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Paketleme" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Ambalajlama Miktarı" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Üst Konum" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Toplama" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Transfer Detayları" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Toplama Türü" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Lütfen Tekrar Tarayın!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Teslimat Makbuzunu Yazdır" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Envanteri Yazdır" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Toplama İşlemleri Yazdır" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Ürün" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Ürün Barkodları" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Ürün Hareketleri (Stok Hareket Satırları)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Ürün Paketleme" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Ürün Ölçü Birimi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Ürün Varyantı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Pakete Koy" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Pakete Koy" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Yapılan Miktar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Miktar" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Yapılan Miktar" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Stoklar" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Onu Kaldır" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "İadeler" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Tara" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Tara" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Daha fazla ürün tarayın veya yeni bir kaynak konum tarayın" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Stok Konumlarını Tara" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Hurda" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Bir Ürün Seç" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Seri/Lot Numarası" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Kaynak Konum" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Kaynak Paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Stok Hareketi" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Stok Paket Türü" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Taramak için Dokunun" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Envanter ayarlaması doğrulandı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Taranan seri numarası zaten kullanılıyor." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Aktarım iptal edildi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Aktarım doğrulandı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Bu paket zaten tarandı." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Bu operasyon zaten yapıldı" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "İşlenecek" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Yapılacak" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Aktarım" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Transferler, ürünleri bir yerden başka bir yere taşımanıza izin verir." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Ölçü Birimi" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Ölçü Birimi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Doğrula" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Son taranan barkodun değeri" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Görüntüleyici" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Depo" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Özellikleri keşfetmeniz için barkodlarla birlikte bir kaç demo oluşturduk. " +"Çıkarın" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Bir veya daha fazla ürünü taramanız bekleniyor." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "belge" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "Konum" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "Operasyon Türü" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "paket" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "ürün" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "Stok barkodları sayfası" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"Bu modülün neler yapabileceğini kontrol edin! Barkodu da yazdırabilirsiniz" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "bu konumdan yeni bir aktarma oluşturmak için." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "Transfer oluştur" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "Açmak için" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "" diff --git a/stock_barcode/i18n/uk.po b/stock_barcode/i18n/uk.po new file mode 100644 index 0000000..9967f5a --- /dev/null +++ b/stock_barcode/i18n/uk.po @@ -0,0 +1,1838 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2023 +# Alina Lisnenko , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s не можливо інвентаризувати. Інвентаризувати можна лише товари, що " +"зберігаються." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " Друк штрих-кодів команд і типів операцій" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " Друк демо-листка зі штрих-кодом" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " Друк місцезнаходжень запасів" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Товар, який відстежується за серійними номерами, не може мати декілька " +"кількостей для одного серійного номера." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Додати товар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Додати додатковий товар?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Після кожного товару" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Після групи товарів" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Усі товари вже повернено" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Усі товари необхідно запакувати" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Бронювання" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Дозволити підтвердження повного комплектування" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Дозволяє підтверджувати комплектування, навіть якщо ще нічого не було " +"відскановано (і тому виконайте негайну переміщення)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Було відскановано неіснуючий тип упаковки. Цю частину штрих-коду обробити " +"неможливо." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Застосувати" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Ви впевнені, що хочете скасувати цю операцію?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Дозамовлення" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Підтвердження дозамовлення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Штрих-код" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Додаток Штрих-код" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Дія клієнта інвентаризації штрих-коду" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Ручне введення штрих-коду" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Номенклатура штрих-кодів" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Дія клієнта штрих-коду комплектування" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Штрих-код проскановано" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Сканування штрих-коду " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Сканування штрих-коду неоднозначне з кількома моделями: %s. Використовуйте " +"найімовірніше." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Штрих-коди недоступні." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Коробка управління кабелем" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Скасувати" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Скасувати операцію" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Скасувати переміщення" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Скасувати операцію" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Скасувати цю операцію?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Закрити" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Налаштування" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Налаштуйте штрих-коди товарів" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Підтвердити" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Контакт" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Підрахована кількість" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Створіть нове переміщення" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Створив" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Створено" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Кастомна тумба (Metric)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Кастомна тумба (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Видалити" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Активні демо-дані" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Розташування призначення" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Призначення упаковки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Необхідно відсканувати місцезнаходження призначення" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Відмінити" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Ви хочете остаточно видалити це повідомлення? Воно більше не з’являтиметься," +" тому переконайтеся, що вам не потрібен аркуш зі штрих-кодами або у вас є " +"його копія." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Комплектувальник повинен покласти в упаковку відсканований товар? Якщо так, " +"яка ставка?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Складник повинен відсканувати розташування призначення? Якщо так, по якій " +"ставці?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Не скасовувати" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Не показувати це повідомлення ще раз" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Виконано /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Завантажити" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Порожньо" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Підрахунок пустих переміщень" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Остаточне підтвердження" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Наступне дозамовлення було створене:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Наступні дозамовлення були створені:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Запустити сканування розташування призначення?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Запустити скан партії/серійного номера?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Запустити сканування товару?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Запустити сканування Джерела розташування?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Застосувати розташування на всі товари" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Застосувати пакуванння на всі товари" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Запустити пакування?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Приховати партію" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Приховати назву партії" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Якщо необхідно сканувати вихідне розташування, то цільове розташування " +"потрібно або сканувати після кожного товару, або не сканувати взагалі." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Якщо ви підтвердите зараз, решту товарів буде додано до незавершеного " +"замовлення." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Зображення" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "В #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Неповне переміщення" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "" +"Міжнародний номер статті, що використовується для ідентифікації товару." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Коригування залишків" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Інвентаризація (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Розташування складів" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Тип вибору штрих-коду" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Востаннє оновив" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Останнє оновлення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Залишити це" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "" +"Товар рядка має бути відсканований перед тим як рядок може редагуватися" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Розташування" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Місцезнаходження оброблено" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Партія/Серійний номер" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Розташування призначення мандату" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Сканування мандату" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Розташування джерела мандату" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Ні" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Жоден %(picking_type)s не готовий до цього %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Немає сканувань" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Немає внутрішнього типу операції. Будь ласка, налаштуйте його в " +"налаштуваннях складу." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Немає комплектування, розташування чи товару, що відповідає штрих-коду " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "Немає комплектування чи товару, що відповідає штрих-коду %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "За штрих-кодом не знайдено товару, партії чи упаковки %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Номенклатура" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Не очікуване сканування" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Відкрити надходження" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Відкрити форму комплектування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Операції" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Опциональне сканування" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Власник" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Упаковка" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Тип упаковки %s було правильно застосовано до упаковки %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Упаковки" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Упаковка" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Кількість упаковок" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Головне розташування" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Батьківське місцезнаходження призн." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Підрахунок часткових переміщень" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Комплектування" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Деталі комплектування" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Тип комплектування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "" +"Відскануйте розташування призначення для %s перед скануванням іншого товару" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Відскануйте знову!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Натисніть Підтвердити або відскануйте інший товар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "Друк штрих-кодів" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "Друк транспортної накладної" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "Друк інвентаризації" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "Друк упаковок" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "Друкувати операції комплектування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Товар" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Штрих-коди товарів" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Переміщення товару (Рядок складського переміщення)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Пакування товару" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Код референсу товару" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "К-сть запасу товару" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Одиниця вимірювання товару" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Варіант товару" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Запакувати" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Запакувати" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "Кількість виконано" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Кількість" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Кількість виконано" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "" +"Кількість упаковки в одиницях вимірювання рядка складського переміщення." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Залишки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Вилучити це" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Повернути товари" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Повернення можна створити лише для готових комплектувань, спочатку " +"перевірте." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Сканувати" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Відскануйте розташування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Відскануйте партійний номер" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "" +"Відскануйте партійний номер або упаковки, потім розташування призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Відскануйте партійний номер, потім розташування призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Відскануйте упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Віскануйте упаковку або запакуйте" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Відскануйте упаковку або розташування призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Відскануйте упаковку, розташування призначення або інший товар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Відскануйте товар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Відскануйте товар перед скануванням номеру відстеження" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Відскануйте товар з %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Скануйте товар в %s або відскануйте інше розташування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Відскануйте товар або упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Відскануйте товар або іншу упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Відскануйте товар або розташування призначення." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Відскануйте товар, потім розташування призначення" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Відскануйте товар, партію/серійний номер або упаковку, щоб відфільтрувати " +"перекази." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Відскануйте товар, упаковку або місце призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Відскануйте товар, упаковку або місце призначення." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Відскануйте серійний номер" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Відскануйте серійний номер або упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Відскануйте серійний номер або упаковку, потім місце призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Відскануйте серійний номер, потім місце призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Відскануйте переміщення або товар, щоби фільтрувати ваші записи" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "Відскануйте переміщення, товар або упаковку для фільтру ваших записів" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Сканувати" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Відскануйте інший серійний номер" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Скануйте партійні номери вашого товару %s щоби змінити їх кількість" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Відскануйте більше партій" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Відскануйте більше партійних номерів або упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Відскануйте більше товарів в %s або відскануйте інше розташування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Відскануйте більше товарів або упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "" +"Сканувати більшу кількості товарів або сканувати нове джерело " +"місцезнаходження" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Відскануйте серійні номери для товару %s для зміни їх кількості" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Відскануйте місце призначення" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Відскануйте упаковку %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Сканувати джерело місцезнаходження" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Відскануйте розташування джерела або упаковку" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Відсканована кількість використовує %s як одиницю вимірювання, але ця од. " +"вим. несумісна з рядком (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Відсканована кількість використовує %s як одиницю вимірювання, але ця од. " +"вим. несумісна з од. вим. товару (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Сканування упаковки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Брак" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Виберіть товар" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Серійний/партійний номер" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Показати номенклатуру штрих-коду" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Показати підтвердження сканування штрих-коду" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Місцезнаходження джерела" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Вихідна упаковка" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Залишитись на переміщенні" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Складське переміщення " + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Тип складської упаковки" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Натисніть, щоб сканувати" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Технічне поле, яке вказує, чи слід використовувати в модулі штрих-коду та " +"використовувати для керування видимістю у пов’язаному інтерфейсі " +"користувача." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Технічне поле, яке використовується для обчислення того, чи слід відображати" +" групу «Остаточна перевірка», розв’язуючи комбіновані групи/невидиму " +"складність." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Налаштування інвентаризації підтверджено" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "" +"Відскановане розташування не належить до місцепризначення цієї операції" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Відскановане розташування не належить до розташування цієї операції" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Відсканований серійний номер вже використовується." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Переміщення скасоване" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Переміщення підтверджене" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "На цій сторінці немає що застосувати." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "На цій сторінці немає що друкувати." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Цей пакунок вже відскановано." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Це комплектування виконано" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Це копмлектування скасоване" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Цей серійний номер вже використовується." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "В процесі" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Зробити" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Щоби використовувати упаковки, увімкніть 'Упаковки' у налаштуваннях" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Переміщення" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Назва переміщення" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Переміщення дозволяють вам перемістити товари з одного місцезнаходження на " +"інше." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Тип штрих-коду, який ви хочете відсканувати" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Одиниця вимірювання" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "Одиниця вимірювання" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Використовуйте камеру для сканування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Підтвердити" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Значення останнього відсканованого штрих-коду." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Глядач" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Склад" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Ми створили декілька демонстраційних даних зі штрих-кодами, щоб ви могли " +"вивчити їх. Надрукуйте" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Невірна одиниця вимірювання" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Ви майже взяли товар %(productName)s з місцезнаходження %(locationName)s але цей товар не зарезервований на цьому місцезнаходженні.\n" +"Відскануйте поточне місцезнаходження для підтвердження." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Очікується, що ви відскануєте один або кілька товарів або упаковку, доступну" +" у місці комплектування" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Від вас очікується сканування одного або кількох товарів." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Ви повинні відсканувати %s або інше розташування джерела" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Ви не можете застосувати тип упаковки. Спочатку відскануйте товар або " +"виберіть рядок" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Ви не можете зареєструвати брак на цьому статусі операції" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Ви вже відсканували елементи %s цієї упаковки. Ви хочете відсканувати всю " +"упаковку?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Ви обробили менше товарів, ніж початковий попит:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Ви повинні відсканувати упаковку або запакувати" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Ви повинні відсканувати товар" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "команди та типи операцій" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "документ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "місцезнаходження" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "тип операції" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "package" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "товар" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "товари не були оброблені повністю." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "товари були оброблені частково." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "звіт складських штрих-кодів" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"перевірити, що може робити цей модуль! Можна також надрукувати штрих-код" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "щоб створити нове переміщення з цього місцезнаходження." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "щоб створити нове переміщення." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "щоби знати її вміст." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "щоби відкрити це." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "щоб показати його розташування та кількість." diff --git a/stock_barcode/i18n/vi.po b/stock_barcode/i18n/vi.po new file mode 100644 index 0000000..7733df8 --- /dev/null +++ b/stock_barcode/i18n/vi.po @@ -0,0 +1,1829 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Martin Trigaux, 2023 +# Thang Nguyen, 2024 +# Thi Huong Nguyen, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "" +"%s không thể kiểm kê được. Chỉ những sản phẩm lưu trữ mới có thể được kiểm " +"kê." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " In lệnh mã vạch và loại hoạt động" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " In một trang mã vạch demo" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " In vị trí lưu kho" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "" +"Một sản phẩm được theo dõi bằng số sê-ri không thể có nhiều số lượng cho " +"cùng một số sê-ri." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "Thêm sản phẩm" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "Thêm sản phẩm bổ sung?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "Sau mỗi sản phẩm" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "Sau nhóm sản phẩm" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "Tất cả sản phẩm đã được trả lại" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "Tất cả sản phẩm cần phải được đóng gói" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "Phân bổ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "Cho phép xác nhận lấy hết hàng" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "" +"Cho phép xác nhận phiếu lấy hàng ngay cả khi chưa có gì được quét (và do đó," +" thực hiện điều chuyển ngay lập tức)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "" +"Một loại kiện hàng không tồn tại đã được quét. Không thể xử lý phần này của " +"mã vạch." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "Áp dụng" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "Bạn có chắc chắn muốn huỷ hoạt động này không?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "Đơn hàng chậm trễ" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "Xác nhận đơn hàng chậm trễ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "Mã vạch" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "Ứng dụng mã vạch" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "Hành động máy khách Tồn kho Mã vạch" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "Nhập thủ công Mã vạch" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "Phép đặt tên mã vạch" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "Hành động máy khách Phiếu lấy hàng Mã vạch" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "Mã vạch được quét" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "Quét mã vạch" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "" +"Quét mã vạch một số mô hình không rõ ràng: %s. Sử dụng khả năng cao nhất." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "Mã vạch không khả dụng." + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "Hộp quản lý cáp" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "Hủy" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "Hủy hoạt động" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "Huỷ điều chuyển" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "Hủy hoạt động" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "Hủy hoạt động này?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "Đóng" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "Cài đặt cấu hình" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "Cấu hình mã vạch sản phẩm" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "Xác nhận" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "Liên hệ" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "Số lượng đã đếm" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "Tạo một điều chuyển mới" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "Được tạo bởi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "Được tạo vào" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "Tủ theo yêu cầu (Metric)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "Tủ theo yêu cầu (USA)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "Xoá" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "Dữ liệu demo đang hoạt động" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "Vị trí đích" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "Kiện hàng đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "Vị trí đích phải được quét" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "Huỷ bỏ" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "" +"Bạn có muốn xóa vĩnh viễn thông báo này không? Thông báo sẽ không xuất hiện " +"nữa, vì vậy hãy đảm bảo rằng bạn không cần trang mã vạch hoặc bạn có một bản" +" sao." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "" +"Người lấy hàng có phải đặt sản phẩm đã quét vào kiện hàng không? Nếu có, " +"theo tỷ lệ nào?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "" +"Người lấy hàng có phải quét vị trí đích không? Nếu có, theo tỷ lệ nào?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "Đừng hủy bỏ" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "Không hiển thị lại thông báo này" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "Hoàn thành /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "Tải xuống" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "Dummy" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "Số dịch chuyển trống" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "Xác nhận cuối cùng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "Đơn hàng chậm trễ sau đã được tạo:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "Các đơn hàng chậm trễ sau đã được tạo:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "Buộc quét vị trí đích?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "Buộc quét lô/sê-ri?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "Buộc quét sản phẩm?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "Buộc quét vị trí nguồn?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "Buộc có một vị trí đích cho tất cả sản phẩm" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "Buộc tất cả các sản phẩm phải được đóng gói" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "Buộc đưa vào gói?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "Ẩn lô" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "Ẩn tên lô" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "" +"Nếu phải quét vị trí nguồn, thì vị trí đích phải được quét sau mỗi sản phẩm " +"hoặc không quét gì cả." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "" +"Nếu bạn xác nhận ngay bây giờ, các sản phẩm còn lại sẽ được thêm vào đơn " +"hàng chậm trễ." + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "Hình ảnh" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "Trong #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "Điều chuyển chưa hoàn tất" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "Mã số quốc tế được sử dụng để xác định sản phẩm." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "Điều chỉnh hàng tồn kho" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "Điều chỉnh tồn kho (" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "Vị trí kiểm kho" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "Là kiểu lấy hàng theo mã vạch" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "Cập nhật lần cuối bởi" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "Thoát ra" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "Sản phẩm của dòng phải được quét trước khi có thể chỉnh sửa dòng này" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "Vị trí" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "Vị trí đã xử lý" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "Lô/sê-ri" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "Vị trí đích bắt buộc" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "Quét bắt buộc" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "Vị trí nguồn bắt buộc" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "Không" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "Không %(picking_type)s nào sẵn sàng cho %(barcode_type)s" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "Không quét" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "" +"Chưa có loại hoạt động nội bộ. Hãy cấu hình một hoạt động trong cài đặt kho " +"hàng." + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "" +"Không có phiếu lấy hàng, vị trí hay sản phẩm nào tương ứng với mã vạch " +"%(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "" +"Không có phiếu lấy hàng hoặc sản phẩm nào tương ứng với mã vạch %(barcode)s" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "Không tìm thấy sản phẩm, lô hoặc kiện hàng nào có mã vạch %s" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "Phép đặt tên" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "Không phải là lần quét dự kiến" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "Mở phiếu lấy hàng" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "Mở biểu mẫu lấy hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "Hoạt động" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "Quét tùy chọn" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "Người phụ trách" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "Kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "Loại kiện hàng %s đã được áp dụng chính xác cho kiện hàng %s" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "Kiện hàng" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "Bao bì" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "Số lượng đóng gói" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "Vị trí chính" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "Parent Location Dest" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "Số dịch chuyển một phần" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "Phiếu lấy hàng" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "Chi tiết phiếu lấy hàng" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "Kiểu lấy hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "Vui lòng quét vị trí đích cho %s trước khi quét sản phẩm khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "Vui lòng quét lại!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "Nhấn xác nhận hoặc quét sản phẩm khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "In mã vạch" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "In phiếu giao hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "In kiểm kho" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "In kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "In hoạt động lấy hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "Sản phẩm" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "Mã vạch sản phẩm" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "Dịch chuyển sản phẩm (Dòng dịch chuyển tồn kho)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "Bao bì sản phẩm" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "Mã tham chiếu sản phẩm" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "Quant tồn kho sản phẩm" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "Đơn vị tính sản phẩm" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "Biến thể sản phẩm" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "Đóng gói" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "Đóng gói" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "SL hoàn tất" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "Số lượng" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "Số lượng hoàn tất" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "Số lượng kiện hàng trong ĐVT của Dòng dịch chuyển tồn kho." + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "Quant" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "Xóa" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "Trả hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "" +"Chỉ có thể tạo phiếu trả hàng cho các phiếu lấy hàng đã hoàn tất, vui lòng " +"xác thực trước." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "Quét một" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "Quét một vị trí" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "Quét một số lô" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "Quét một số lô hoặc một kiện hàng, sau đó là vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "Quét một số lô, sau đó là vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "Quét một kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "Quét một kiện hàng hoặc đóng gói" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "Quét một kiện hàng hoặc vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "Quét một kiện hàng, vị trí đích hoặc sản phẩm khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "Quét một sản phẩm" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "Quét một sản phẩm trước khi quét mã số theo dõi" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "Quét một sản phẩm từ %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "Quét một sản phẩm trong %s hoặc quét vị trí khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "Quét một sản phẩm hoặc một kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "Quét một sản phẩm hoặc một kiện hàng khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "Quét một sản phẩm hoặc vị trí đích." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "Quét một sản phẩm sau đó là vị trí đích" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "" +"Quét một sản phẩm, một số lô/sê-ri hoặc một kiện hàng để lọc các chuyển đổi." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "Quét một sản phẩm, kiện hàng hoặc vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "Quét một sản phẩm, kiện hàng hoặc vị trí đích." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "Quét một số sê-ri" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "Quét một số sê-ri hoặc một kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "Quét một số sê-ri hoặc kiện hàng, sau đó là vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "Quét một số sê-ri, sau đó là vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "Quét một điều chuyển hoặc một sản phẩm để lọc dữ liệu của bạn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "" +"Quét một điều chuyển, một sản phẩm hoặc một kiện hàng để lọc dữ liệu của bạn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "Quét một" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "Quét một số sê-ri khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "Quét số lô cho sản phẩm %s để thay đổi số lượng của chúng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "Quét thêm số lô" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "Quét thêm số lô hoặc một kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "Quét thêm sản phẩm trong %s hoặc quét vị trí khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "Quét thêm sản phẩm hoặc một kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "Quét thêm sản phẩm, hoặc quét một vị trí nguồn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "Quét số sê-ri cho sản phẩm %s để thay đổi số lượng của chúng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "Quét vị trí đích" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "Quét kiện hàng %s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "Quét vị trí nguồn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "Quét vị trí nguồn hoặc một kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "" +"Số lượng đã quét đang dùng %s làm Đơn vị tính, nhưng ĐVT này không tương " +"thích với ĐVT của dòng (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "" +"Số lượng đã quét đang dùng %s làm Đơn vị tính, nhưng ĐVT này không tương " +"thích với ĐVT của sản phẩm (%s)." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "Quét kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "Phế phẩm" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "Chọn một sản phẩm" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "Số lô/sê-ri" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "Hiển thị phép đặt tên mã vạch" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "Hiển thị xác nhận mã vạch" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "Vị trí nguồn" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "Kiện hàng nguồn" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "Ở lại điều chuyển" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "Dịch chuyển tồn kho" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "Loại kiện hàng tồn kho" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "Bấm để quét" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "" +"Trường kỹ thuật cho biết liệu có nên sử dụng trong ứng dụng mã vạch hay " +"không và dùng để kiểm soát chế độ hiển thị trong giao diện người dùng liên " +"quan." + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "" +"Trường kỹ thuật được sử dụng để tính toán xem có nên hiển thị nhóm \"Xác " +"nhận cuối cùng\" hay không, giải quyết các nhóm kết hợp/tính phức tạp." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "Điều chỉnh tồn kho này đã được xác nhận" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "Vị trí được quét không nằm trong đích của hoạt động này" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "Vị trí được quét không thuộc về vị trí của hoạt động này" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "Số sê-ri được quét đã được sử dụng." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "Điều chuyển đã bị hủy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "Điều chuyển đã được xác nhận" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "Không có gì để áp dụng trong trang này." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "Không có gì để in trong trang này." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "Kiện hàng này đã được quét." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "Phiếu lấy hàng này đã hoàn tất" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "Phiếu lấy hàng này đã bị hủy" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "Số sê-ri này đã được sử dụng." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "Cần xử lý" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "Cần làm" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "Để sử dụng kiện hàng, vui lòng bật 'Kiện hàng' trong cài đặt" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "Điều chuyển" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "Tên điều chuyển" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "" +"Điều chuyển cho phép bạn chuyển sản phẩm từ vị trí này sang vị trí khác." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "Nhập mã vạch bạn muốn quét ở đây" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "Đơn vị tính" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "ĐVT" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "Sử dụng camera để quét" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "Xác nhận" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "Giá trị mã vạch quét cuối cùng. " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "Người xem" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "Kho hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "" +"Chúng tôi đã tạo ra một vài dữ liệu demo với mã vạch để bạn khám phá các " +"tính năng. In" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "Sai đơn vị tính" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"Bạn sắp lấy sản phẩm %(productName)s từ vị trí %(locationName)s nhưng sản phẩm này không được dự trữ ở vị trí đó.\n" +"Hãy quét vị trí hiện tại để xác nhận." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "" +"Bạn sẽ quét một hoặc nhiều sản phẩm hoặc kiện hàng có sẵn tại vị trí lấy " +"hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "Bạn sẽ quét một hoặc nhiều sản phẩm." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "Bạn sẽ quét %s hoặc một vị trí nguồn khác" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "" +"Bạn không thể áp dụng một loại kiện hàng. Đầu tiên, quét sản phẩm hoặc chọn " +"một dòng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "Bạn không thể ghi nhận phế phẩm ở trạng thái hoạt động này" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "" +"Bạn đã quét %s mặt hàng của kiện hàng này. Bạn có muốn quét toàn bộ kiện " +"hàng không?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "Bạn đã xử lý ít sản phẩm hơn nhu cầu ban đầu:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "Bạn phải quét một kiện hàng hoặc đóng gói" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "Bạn phải quét một sản phẩm" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "lệnh và loại hoạt động" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "tài liệu" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "vị trí" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "loại hoạt động" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "kiện hàng" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "sản phẩm" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "sản phẩm không hề được xử lý." + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "sản phẩm đã được xử lý một phần." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "trang mã vạch tồn kho" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "" +"để có thể biết những gì phân hệ này có thể làm! Bạn có thể tiến hành in mã " +"vạch" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "để tạo một điều chuyển mới từ vị trí này." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "để tạo một điều chuyển mới." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "để biết thành phần." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "để mở." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "để hiển thị vị trí và số lượng." diff --git a/stock_barcode/i18n/zh_CN.po b/stock_barcode/i18n/zh_CN.po new file mode 100644 index 0000000..283e501 --- /dev/null +++ b/stock_barcode/i18n/zh_CN.po @@ -0,0 +1,1782 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023 +# 湘子 南 <1360857908@qq.com>, 2024 +# Chloe Wang, 2024 +# Jeffery CHEN , 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 2024\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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%s 不能盘点。只有可存储的产品可以盘点。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr "打印条码命令和操作类型" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " 打印条码演示表" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr "打印储存位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr " 由序列号追踪的产品,不能有多个产品共用 序列号。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "添加产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "添加额外产品?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "在每个产品后" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "在每组产品后" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "所有产品均已退回" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "所有产品都需要包装" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "分配" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "允许完整拣货验证" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "允许验证拣货单,即使尚未扫描任何内容(并且,立即进行库存调拨)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "扫描了 不存在的包裹类型。条形码的这一部分不能被处理。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "应用" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "您确定要取消此操作吗?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "欠单" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "欠单确认" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "条码" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "条码应用" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "条形码库存客户端动作" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "手动输入条码" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "条码命名规则" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "条码拣货客户端动作" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "扫描到条码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "条码扫描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "条形码扫描在几个模型上是模糊:%s.使用最可能的。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "条码不可用。" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "理线盒" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "取消" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "取消作业" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "取消调拨" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "取消作业" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "取消此作业?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "关闭" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "配置设置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "配置产品的条码" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "确认" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "联系人" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "盘点数量" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "创建新调拨" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "创建人" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "创建日期" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "定制橱柜(公制)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "定制橱柜(美国)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "删除" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "演示数据启用" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "目的位置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "目的包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "必须扫描目的位置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "丢弃" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "您想永久删除这条信息吗?它不会再出现了,所以请确保您不需要条形码表,或者您有一份副本。" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "拣货员是否必须将扫描的产品放入包裹中?如果是,以什么速度?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "拣货员必须扫描目的位置吗?如果是,以什么速度?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "不取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "不再显示此消息" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "完成 /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "下载" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "模拟" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "空的移动计数" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "最终验证" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "以下是已创建的欠单:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "以下是已创建的欠单:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "必须扫描目标位置?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "强制扫描批次/序列号?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "强制扫描产品?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "强制扫描来源位置?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "强制所有产品扫描目的位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "强制包装所有产品" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "强制放入包装?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "隐藏批次" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "隐藏批次名称" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "ID" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "如果必须扫描来源地,则须在各产品之后扫描目标地点,或者完全不扫描。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "如果您现在验证,剩余产品将被添加到欠单中。" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "图像" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "在 #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "调拨未完成" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "国际物品编码用于产品标识。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "库存调整" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "库存调整(" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "库存位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "条码拣货类型" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "最后更新人" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "上次更新日期" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "就这样" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "在编辑产品行之前,必须扫描行内产品" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "处理的位置" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "批次/序列号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "强制性目的位置" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "强制性扫描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "强制性源位置" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "否" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "没有 %(picking_type)s为 %(barcode_type)s设置" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "没有扫描" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "没有内部操作类型。 请在仓库设置中配置 。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "没有找到对应条码%(barcode)s的拣货单或库存产品或产品" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "没有找到对应的条码%(barcode)s的拣货单或者产品" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "未找到条形码 %s 的产品、批次或包装" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "命名规则" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "不是预计的扫描" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "打开拣货单" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "打开拣货表单" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "作业" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "可选的扫描" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "所有者" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "包裹类型%s被正确地应用于%s包裹" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "包裹" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "包装" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "包装数量" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "上级位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "上级位置目的地" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "部分移动计数" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "拣货" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "拣货明细" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "拣货类型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "在扫描其他产品前,请为 %s扫描目标位置, " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "请再次扫描!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "点击验证按钮或扫描其他产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "打印条形码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "打印送货单" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "打印库存" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "打印包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "打印拣货作业" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "产品" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "产品条码" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "产品移动(移库明细)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "产品包装" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "产品参考编码" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "产品库存量" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "产品计量单位" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "产品变体" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "放入包裹" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "放入包裹" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "完成数量" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "数量" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "完成数量" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "库存移动中计量单位的包装数量。" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "量化" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "移除它" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "退返产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "只能为已完成的拣货创建退货,请先验证。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "扫描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "扫描 位置条码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "扫描 批次号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "先扫描 批次号或者 包裹,然后扫描目的位置。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "先扫描 批次号,然后扫描目的位置。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "扫描 包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "扫描 包裹或放入包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "扫描 包裹或者目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "扫描 包裹,目的位置或者另 产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "扫描 产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "在扫描追踪号码之前扫描产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "扫描来自 %s的产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "扫描 来自 %s 的产品或者扫描另外 位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "扫描 产品或者 包裹号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "扫描 产品或者另 包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "扫描 产品或者目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "扫描 产品,然后扫描目的位置" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "扫描产品、批次/序列号或包装,过滤转运信息。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "扫描 产品,包裹号或者目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "扫描 产品,包裹号或者目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "扫描 序列号码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "扫描序列号码或者包裹号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "扫描序列号码或者包裹号,然后扫描目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "扫描序列号码,然后扫描目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "通过扫描调拨单号或者产品筛选记录" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "通过扫描调拨单号,产品或者包裹号筛选记录" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "扫描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "扫描其他的序列号码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "扫描产品批次号%s以更改其数量" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "扫描更多的批次号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "扫描更多的批次号或者包裹号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "在 %s扫描更多的产品或者扫描其他的位置条码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "扫描更多的产品或者包裹号" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "扫描更多产品,或扫描新的源位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "扫描产品序列号码%s以更改其数量" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "扫描目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "扫描包裹%s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "扫描源位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "扫描源位置,或扫描 包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "扫描数量使用 %s 作为计量单位,但此计量单位与行的计量单位 (%s) 不兼容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "扫描的数量使用%s作为计量单位,但这个计量单位与产品的计量单位(%s)不兼容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "扫描包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "报废" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "选择 产品" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "序列号/批次号码" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "显示条码命名规则" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "显示条码验证" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "源位置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "源包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "继续调拨" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "库存移动" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "库存包裹类型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "点击即可扫描" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "表示是否应在条形码应用程序中使用的技术字段,用于控制相关用户界面中的可见性。" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "计算是否显示“最终确认”组的技术领域,解决组合组/不可见复杂性。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "库存调整已验证" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "扫描的位置不属于此操作的目标位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "扫描的位置不属于此操作的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "扫描的序列号已被使用。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "调拨已取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "调拔已验证" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "这一页中没有任何东西可以应用。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "此页面中没有任何要打印的内容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "这个包裹已扫描过。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "拣货早已完成" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "此拣货已取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "该序列号已被使用。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "待处理" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "待处理" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "要使用包裹,在设置中启用 “包裹”" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "调拨" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "调拨名称" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "调拨允许您将产品从一个位置调拨到另外一个位置。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "输入您想要在此扫描的条码" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "计量单位" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "计量单位" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "使用相机扫描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "验证" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "上次扫描到的条码的值。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "查看器" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "仓库" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "我们已经创建了一些带有条码的演示数据,供您探索这些功能。 打印" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "错误的计量单位" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"您准备从位置 %(locationName)s 提取产品 %(productName)s,但该产品未在此位置保留。\n" +"扫描当前位置确认。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "你要扫描 或多个产品或 拣货单可获得的包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "你需要扫描 或多个产品。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "您应该扫描 %s 或者其他的源位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "你不能应用包裹类型。首先,扫描产品或选择 行" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "在此运行状态下,无法登记报废" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "这个包您已经扫描了 %s 项包裹. 您要扫描全部包裹吗?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "您处理的产品少于初始需求:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "你必须扫描包裹或放入包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "必须扫描 产品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}]" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "指令及操作类型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "单据" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "操作类型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "产品" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "产品未被处理" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "产品部分处理" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "库存条码表格" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "看看这个模块可以做什么!您还可以打印条码" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "从此位置创建新调拔。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "去创建 新的调拨。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "了解其内容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "打开它。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "以显示其位置和数量。" diff --git a/stock_barcode/i18n/zh_TW.po b/stock_barcode/i18n/zh_TW.po new file mode 100644 index 0000000..ad59a87 --- /dev/null +++ b/stock_barcode/i18n/zh_TW.po @@ -0,0 +1,1773 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_barcode +# +# Translators: +# Tony Ng, 2024 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-13 10:41+0000\n" +"PO-Revision-Date: 2023-10-26 23:10+0000\n" +"Last-Translator: Wil Odoo, 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: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "%s can't be inventoried. Only storable products can be inventoried." +msgstr "%s 不能盤點。只有可儲存產品可以盤點。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" +"" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +"" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban_2 +msgid "" +msgstr "" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode commands and operation types" +msgstr " 列印條碼指令及操作類型" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print barcode demo sheet" +msgstr " 列印條碼示範單張" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid " Print storage locations" +msgstr " 列印儲存位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"A product tracked by serial numbers can't have multiple quantities for the " +"same serial number." +msgstr "以序號追蹤的產品,同一個序號中不可有多個數量。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#, python-format +msgid "Add Product" +msgstr "加入產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Add extra product?" +msgstr "加入額外產品?" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__mandatory +msgid "After each product" +msgstr "在每個產品後" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__optional +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__optional +msgid "After group of Products" +msgstr "在產品組別後" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "All products have been returned already" +msgstr "所有產品都已經退貨" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "All products need to be packed" +msgstr "所有產品都需要包裝" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Allocation" +msgstr "分配" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "Allow full picking validation" +msgstr "允許完整揀貨驗證" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__barcode_validation_full +msgid "" +"Allow to validate a picking even if nothing was scanned yet (and so, do an " +"immediate transfert)" +msgstr "允許驗證揀貨單,即使尚未掃瞄任何內容(即是,立即進行庫存調撥)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"An unexisting package type was scanned. This part of the barcode can't be " +"processed." +msgstr "掃瞄的包裹類型不存在。此部份條碼未能處理。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Apply" +msgstr "套用" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Are you sure you want to cancel this operation?" +msgstr "確定要取消此操作?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Backorder" +msgstr "缺貨訂單" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_backorder_confirmation +msgid "Backorder Confirmation" +msgstr "缺貨訂單確認" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.client,name:stock_barcode.stock_barcode_action_main_menu +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap__product_barcode +#: model:ir.ui.menu,name:stock_barcode.stock_barcode_menu +#, python-format +msgid "Barcode" +msgstr "條碼" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Barcode App" +msgstr "條碼應用程式" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_inventory_client_action +msgid "Barcode Inventory Client Action" +msgstr "條碼庫存客戶端動作" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.js:0 +#, python-format +msgid "Barcode Manual Entry" +msgstr "手動輸入條碼" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Barcode Nomenclature" +msgstr "條碼命名規則" + +#. module: stock_barcode +#: model:ir.actions.client,name:stock_barcode.stock_barcode_picking_client_action +msgid "Barcode Picking Client Action" +msgstr "條碼揀貨客戶端動作" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Barcode Scanned" +msgstr "掃瞄到條碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Barcode Scanning" +msgstr "條碼掃描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "Barcode scan is ambiguous with several model: %s. Use the most likely." +msgstr "條碼掃描不確定,有幾個模型:%s。請使用最可能的。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "Barcodes are not available." +msgstr "條碼不可用。" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_cable_management_box_2_product_template +msgid "Cable Management Box" +msgstr "理線盒" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +#, python-format +msgid "Cancel" +msgstr "取消" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_barcode_cancel_operation +msgid "Cancel Operation" +msgstr "取消操作" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Cancel Transfer" +msgstr "取消調撥" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Cancel operation" +msgstr "取消操作" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "Cancel this operation?" +msgstr "取消此操作?" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Close" +msgstr "關閉" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_config_settings +msgid "Config Settings" +msgstr "配置設定" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.res_config_settings_view_form +msgid "Configure Product Barcodes" +msgstr "配置產品的條碼" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Confirm" +msgstr "確認" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_res_partner +msgid "Contact" +msgstr "聯絡人" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Counted Quantity" +msgstr "盤點實數" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Create a new transfer" +msgstr "建立新調撥" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_uid +msgid "Created by" +msgstr "建立人員" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__create_date +msgid "Created on" +msgstr "建立於" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_metric_product_template +msgid "Customized Cabinet (Metric)" +msgstr "定制櫥櫃(公制)" + +#. module: stock_barcode +#: model:product.template,name:stock_barcode.product_custom_cabinet_usa_product_template +msgid "Customized Cabinet (USA)" +msgstr "定制櫥櫃(美國)" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Delete" +msgstr "刪除" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__stock_barcode_demo_active +msgid "Demo Data Active" +msgstr "演示數據啟用" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Destination Location" +msgstr "目的地位置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Destination Package" +msgstr "目的地包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Destination location must be scanned" +msgstr "必須掃描目標位置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Discard" +msgstr "捨棄" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "" +"Do you want to permanently remove this message ? It won't appear anymore, so" +" make sure you don't need the barcodes sheet or you have a copy." +msgstr "確定永久移除此訊息?它不會再出現,因此請確保你不再需要條碼表,或已有副本。" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "" +"Does the picker have to put in a package the scanned products? If yes, at " +"which rate?" +msgstr "揀貨員是否必須將掃描的產品放入包裹中?如果是,以什麼速度?" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Does the picker have to scan the destination? If yes, at which rate?" +msgstr "揀貨員必須掃描目的位置嗎?如果是,以什麼速度?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_cancel_operation_view +msgid "Don't cancel" +msgstr "不取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Don't show this message again" +msgstr "不再顯示此消息" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Done /" +msgstr "完成 /" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Download" +msgstr "下載" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__dummy_id +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__dummy_id +msgid "Dummy" +msgstr "模擬" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__empty_move_count +msgid "Empty Move Count" +msgstr "空的移動計數" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Final Validation" +msgstr "最終確認" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorder was created:" +msgstr "以下是已創建的欠單:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Following backorders were created:" +msgstr "以下是已創建的欠單:" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_dest_location +msgid "Force Destination Location scan?" +msgstr "必須掃描目標位置?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_tracking_number +msgid "Force Lot/Serial scan?" +msgstr "強制掃描批次/序號?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Force Product scan?" +msgstr "強制掃描產品?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_scan_source_location +msgid "Force Source Location scan?" +msgstr "強制掃描來源位置?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_after_dest_location +msgid "Force a destination on all products" +msgstr "強制所有產品掃描目的位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__barcode_validation_all_product_packed +msgid "Force all products to be packed" +msgstr "強制包裝所有產品" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__restrict_put_in_pack +msgid "Force put in pack?" +msgstr "強制放入包裝?" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot +msgid "Hide Lot" +msgstr "隱藏批次" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__hide_lot_name +msgid "Hide Lot Name" +msgstr "隱藏批次名稱" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__id +msgid "ID" +msgstr "識別號" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"If the source location must be scanned, then the destination location must " +"either be scanned after each product or not scanned at all." +msgstr "如果必須掃描來源地,則須在各產品之後掃描目標地點,或者完全不掃描。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "" +"If you validate now, the remaining products will be added to a backorder." +msgstr "如果您現在驗證,剩餘產品將被添加到欠單中。" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__image_1920 +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__image_1920 +msgid "Image" +msgstr "圖片" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "In #{kanban_getcolorname(record.color.raw_value)}" +msgstr "在 #{kanban_getcolorname(record.color.raw_value)}" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.js:0 +#, python-format +msgid "Incomplete Transfer" +msgstr "調撥未完成" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap__product_barcode +msgid "International Article Number used for product identification." +msgstr "國際物品編碼用於產品標識" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Inventory Adjustment" +msgstr "庫存盤點" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Inventory Adjustments (" +msgstr "庫存調整(" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_location +msgid "Inventory Locations" +msgstr "盤點位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "Is Barcode Picking Type" +msgstr "是條碼提取類型" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_uid +msgid "Last Updated by" +msgstr "最後更新者" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__write_date +msgid "Last Updated on" +msgstr "最後更新於" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Leave it" +msgstr "就這樣" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__restrict_scan_product +msgid "Line's product must be scanned before the line can be edited" +msgstr "在編輯產品行之前,必須掃描行內產品" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Location" +msgstr "地點" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__location_processed +msgid "Location Processed" +msgstr "處理的位置" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_lot +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Lot/Serial" +msgstr "批次/序列號" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Destination Location" +msgstr "強制性目的位置" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__mandatory +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__mandatory +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Mandatory Scan" +msgstr "強制掃描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Mandatory Source Location" +msgstr "強制性源位置" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_put_in_pack__no +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_dest_location__no +msgid "No" +msgstr "否" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No %(picking_type)s ready for this %(barcode_type)s" +msgstr "沒有 %(picking_type)s為 %(barcode_type)s設置" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_source_location__no +msgid "No Scan" +msgstr "沒有掃描" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "" +"No internal operation type. Please configure one in warehouse settings." +msgstr "沒有內部操作類型。 請在倉庫設置中配置 。" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or location or product corresponding to barcode %(barcode)s" +msgstr "沒有找到對應條碼%(barcode)s的揀貨單或庫存產品或產品" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/controllers/stock_barcode.py:0 +#, python-format +msgid "No picking or product corresponding to barcode %(barcode)s" +msgstr "沒有找到對應的條碼%(barcode)s的揀貨單或者產品" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "No product, lot or package found for barcode %s" +msgstr "找不到條碼為 %s 的產品、批次或包裝" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__barcode_nomenclature_id +msgid "Nomenclature" +msgstr "命名規則" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Not the expected scan" +msgstr "不是預計的掃描" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.picking_view_kanban_inherit_barcode +msgid "Open picking" +msgstr "打開揀貨單" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#: model:ir.actions.act_window,name:stock_barcode.open_picking +#, python-format +msgid "Open picking form" +msgstr "打開揀貨表單" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_kanban +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_type_action_kanban +#, python-format +msgid "Operations" +msgstr "製程" + +#. module: stock_barcode +#: model:ir.model.fields.selection,name:stock_barcode.selection__stock_picking_type__restrict_scan_tracking_number__optional +msgid "Optional Scan" +msgstr "可選的掃描" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Owner" +msgstr "所有者" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Package" +msgstr "包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Package type %s was correctly applied to the package %s" +msgstr "包裹類型%s被正確地應用於%s包裹" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant_package +msgid "Packages" +msgstr "包裹" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_id +msgid "Packaging" +msgstr "包裝" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Packaging Quantity" +msgstr "包裝數量" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_id +msgid "Parent Location" +msgstr "上級位置" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__parent_location_dest_id +msgid "Parent Location Dest" +msgstr "母項位置目的地" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_backorder_confirmation__partial_move_count +msgid "Partial Move Count" +msgstr "部分移動計數" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.stock_picking_action_form +msgid "Picking" +msgstr "揀貨" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_barcode +msgid "Picking Details" +msgstr "揀貨明細" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking_type +msgid "Picking Type" +msgstr "揀貨類型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Please scan destination location for %s before scanning other product" +msgstr "在掃描其他產品前,請為 %s掃描目標位置, " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.js:0 +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js:0 +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Please, Scan again!" +msgstr "請再次掃描!" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Press Validate or scan another product" +msgstr "點擊驗證按鈕或掃描其他產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Barcodes" +msgstr "列印條碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Delivery Slip" +msgstr "列印送貨單" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Print Inventory" +msgstr "打印庫存" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Packages" +msgstr "打印包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Print Picking Operations" +msgstr "打印揀貨操作" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +#, python-format +msgid "Product" +msgstr "商品" + +#. module: stock_barcode +#: model:ir.actions.act_window,name:stock_barcode.product_action_barcodes +#: model_terms:ir.ui.view,arch_db:stock_barcode.product_view_list_barcodes +msgid "Product Barcodes" +msgstr "產品條碼" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move_line +msgid "Product Moves (Stock Move Line)" +msgstr "產品移動(移庫明細)" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_packaging +msgid "Product Packaging" +msgstr "產品包裝" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_reference_code +#: model:ir.model.fields,field_description:stock_barcode.field_stock_quant__product_reference_code +msgid "Product Reference Code" +msgstr "產品參考代碼" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__product_stock_quant_ids +msgid "Product Stock Quant" +msgstr "產品庫存量" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_uom_uom +msgid "Product Unit of Measure" +msgstr "產品測量單位" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_product_product +msgid "Product Variant" +msgstr "產品款式" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Put In Pack" +msgstr "放入包裹" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +msgid "Put in Pack" +msgstr "放入包裹" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_move_line__qty_done +msgid "Qty Done" +msgstr "已完成數量" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Quantity" +msgstr "數量" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Quantity Done" +msgstr "完成數量" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_move_line__product_packaging_uom_qty +msgid "Quantity of the Packaging in the UoM of the Stock Move Line." +msgstr "庫存移動中計量單位的包裝數量。" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_quant +msgid "Quants" +msgstr "數量" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.js:0 +#, python-format +msgid "Remove it" +msgstr "移除它" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Return Products" +msgstr "退回產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Returns can only be created for pickings that are done, please validate " +"first." +msgstr "只能為已完成的揀貨創建退貨,請先驗證。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan a" +msgstr "掃描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a location" +msgstr "掃描位置條碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number" +msgstr "掃描批次" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number or a packages then the destination location" +msgstr "先掃描批次或者包裹,然後掃描目的位置。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a lot number then the destination location" +msgstr "先掃描批次,然後掃描目的位置。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package" +msgstr "掃描包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or put in pack" +msgstr "掃描包裹或放入包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package or the destination location" +msgstr "掃描包裹或者目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a package, the destination location or another product" +msgstr "掃描包裹,目的位置或者另一產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product" +msgstr "掃描產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product before scanning a tracking number" +msgstr "在掃描追蹤號碼之前掃描產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product from %s" +msgstr "掃描來自 %s的產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan a product in %s or scan another location" +msgstr "掃描來自 %s 的產品或者掃描另一位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or a package" +msgstr "掃描產品或者包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or another package" +msgstr "掃描產品或者另一包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product or the destination location." +msgstr "掃描產品或者目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product then the destination location" +msgstr "掃描產品,然後掃描目的位置" + +#. module: stock_barcode +#. odoo-python +#: code:addons/stock_barcode/models/stock_picking.py:0 +#, python-format +msgid "" +"Scan a product, a lot/serial number or a package to filter the transfers." +msgstr "掃瞄產品、批次/序號或包裝,以篩選轉移。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location" +msgstr "掃描產品,包裹或目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a product, a package or the destination location." +msgstr "掃描產品,包裹或目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number" +msgstr "掃描序列號碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package" +msgstr "掃描序列號碼或者包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number or a package then the destination location" +msgstr "掃描序列號碼或者包裹,然後掃描目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan a serial number then the destination location" +msgstr "掃描序列號碼,然後掃描目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer or a product to filter your records" +msgstr "通過掃描調撥單號或者產品篩選記錄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml:0 +#, python-format +msgid "Scan a transfer, a product or a package to filter your records" +msgstr "通過掃描調撥單號,產品或者包裹號篩選記錄" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Scan an" +msgstr "掃描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan another serial number" +msgstr "掃描其他的序列號碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan lot numbers for product %s to change their quantity" +msgstr "掃描產品批次號%s以更改其數量" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers" +msgstr "掃描更多的批次" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more lot numbers or a package" +msgstr "掃描更多的批次或者包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan more products in %s or scan another location" +msgstr "在 %s掃描更多的產品或者掃描其他的位置條碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products or a package" +msgstr "掃描更多的產品或者包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan more products, or scan a new source location" +msgstr "掃描更多產品,或掃描新的來源位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Scan serial numbers for product %s to change their quantity" +msgstr "掃描產品序列號碼%s,以更改其數量" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the destination location" +msgstr "掃描目的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the package %s" +msgstr "掃描包裹%s" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location" +msgstr "掃描來源位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scan the source location or a package" +msgstr "掃描來源位置,或掃描包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the line's one (%s)." +msgstr "掃描數量使用 %s 作為計量單位,但此計量單位與行的計量單位 (%s) 不兼容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "" +"Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible " +"with the product's one (%s)." +msgstr "掃描的數量使用%s作為計量單位,但這個計量單位與產品的計量單位(%s)不兼容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "Scanning package" +msgstr "掃瞄包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: model:ir.model,name:stock_barcode.model_stock_scrap +#, python-format +msgid "Scrap" +msgstr "報廢" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Select a Product" +msgstr "選擇產品" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode +msgid "Serial/Lot Number" +msgstr "序列號/批次號碼" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_res_config_settings__show_barcode_nomenclature +msgid "Show Barcode Nomenclature" +msgstr "顯示條碼命名規則" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "Show Barcode Validation" +msgstr "顯示條碼驗證" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/line.xml:0 +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_barcode_view_picking_type_form +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#, python-format +msgid "Source Location" +msgstr "來源位置" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +msgid "Source Package" +msgstr "來源包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "Stay on transfer" +msgstr "繼續調撥" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_move +msgid "Stock Move" +msgstr "庫存移動" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_package_type +msgid "Stock package type" +msgstr "庫存包裝類型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "Tap to scan" +msgstr "點擊即可掃描" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__is_barcode_picking_type +msgid "" +"Technical field indicating if should be used in barcode app and used to " +"control visibility in the related UI." +msgstr "技術欄位,表示是否應在條碼應用程式使用,及用於控制是否在相關操作界面中顯示。" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_picking_type__show_barcode_validation +msgid "" +"Technical field used to compute whether the \"Final Validation\" group " +"should be displayed, solving combined groups/invisible complexity." +msgstr "計算是否顯示「最終確認」組的技術領域,解決組合群組/不可見的複雜性。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "The inventory adjustment has been validated" +msgstr "庫存調整已驗證" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's destination" +msgstr "掃瞄的位置不屬於此操作的目標位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The scanned location doesn't belong to this operation's location" +msgstr "掃瞄的位置不屬於此操作的位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "The scanned serial number is already used." +msgstr "掃描的序列號已被使用。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been cancelled" +msgstr "調撥已取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "The transfer has been validated" +msgstr "調撥已驗證" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to apply in this page." +msgstr "此頁面沒有任何東西可以應用。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "There is nothing to print in this page." +msgstr "此頁面中沒有任何要打印的內容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "This package is already scanned." +msgstr "這個包裹已掃描過。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is already done" +msgstr "揀貨早已完成" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "This picking is cancelled" +msgstr "此揀貨已取消" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "This serial number is already used." +msgstr "該序列號已被使用。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_picking_type_kanban +msgid "To Process" +msgstr "待處理" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#, python-format +msgid "To do" +msgstr "待辦" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "To use packages, enable 'Packages' in the settings" +msgstr "要使用包裹,在設置中啟用 「包裹」" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_picking +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_id +msgid "Transfer" +msgstr "轉移" + +#. module: stock_barcode +#: model:ir.model.fields,field_description:stock_barcode.field_stock_barcode_cancel_operation__picking_name +msgid "Transfer Name" +msgstr "調撥名稱" + +#. module: stock_barcode +#: model_terms:ir.actions.act_window,help:stock_barcode.stock_picking_action_kanban +msgid "Transfers allow you to move products from one location to another." +msgstr "調撥允許您將產品從一個位置移動到另一個位置。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Type barcode you want to scan here" +msgstr "輸入您想要在此掃描的條碼" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_move_line_product_selector +#: model_terms:ir.ui.view,arch_db:stock_barcode.stock_quant_barcode_kanban +msgid "Unit of Measure" +msgstr "量度單位" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_stock_quant_tree +msgid "UoM" +msgstr "計量單位" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/manual_barcode.xml:0 +#, python-format +msgid "Use camera to scan" +msgstr "使用相機掃描" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/components/backorder_dialog.xml:0 +#: code:addons/stock_barcode/static/src/components/main.xml:0 +#, python-format +msgid "Validate" +msgstr "核實" + +#. module: stock_barcode +#: model:ir.model.fields,help:stock_barcode.field_stock_scrap___barcode_scanned +msgid "Value of the last barcode scanned." +msgstr "上次掃瞄到的條碼的值." + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/widgets/image_preview.xml:0 +#, python-format +msgid "Viewer" +msgstr "查看者" + +#. module: stock_barcode +#: model:ir.model,name:stock_barcode.model_stock_warehouse +msgid "Warehouse" +msgstr "倉庫" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "" +"We have created a few demo data with barcodes for you to explore the " +"features. Print the" +msgstr "我們已經創建了一些帶有條碼的演示數據,供您探索這些功能。 打印" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#: code:addons/stock_barcode/static/src/models/barcode_quant_model.js:0 +#, python-format +msgid "Wrong Unit of Measure" +msgstr "錯誤的計量單位" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You are about to take the product %(productName)s from the location %(locationName)s but this product isn't reserved in this location.\n" +"Scan the current location to confirm that." +msgstr "" +"你即將從位置 %(locationName)s 取得產品 %(productName)s,但此產品未在此位置保留。\n" +"請掃瞄目前位置,以確認這一點。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "" +"You are expected to scan one or more products or a package available at the " +"picking location" +msgstr "你要掃描一或多個產品,或揀貨位置可獲得的包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_model.js:0 +#, python-format +msgid "You are expected to scan one or more products." +msgstr "你需要掃描一或多個產品。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You are supposed to scan %s or another source location" +msgstr "您應該掃描 %s 或者其他的來源位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't apply a package type. First, scan product or select a line" +msgstr "你不能應用包裹類型。首先,掃描產品或選擇資料行" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You can't register scrap at this state of the operation" +msgstr "在此運行狀態下,無法登記報廢" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "" +"You have already scanned %s items of this package. Do you want to scan the " +"whole package?" +msgstr "你已掃瞄此包裹中的 %s 個項目。要掃瞄整個包裹嗎?" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "You have processed less products than the initial demand:" +msgstr "您處理的產品少於初始需求:" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a package or put in pack" +msgstr "你必須掃描包裹或放入包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "You must scan a product" +msgstr "必須掃描產品" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/models/barcode_picking_model.js:0 +#, python-format +msgid "[${product.code}] " +msgstr "[${product.code}] " + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "commands and operation types" +msgstr "指令及操作類型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "document" +msgstr "單據" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "location" +msgstr "位置" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "operation type" +msgstr "操作類型" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "package" +msgstr "包裹" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "product" +msgstr "商品" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were not processed at all." +msgstr "產品未被處理。" + +#. module: stock_barcode +#: model_terms:ir.ui.view,arch_db:stock_barcode.view_backorder_confirmation +msgid "products were partially processed." +msgstr "產品部份處理。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "stock barcodes sheet" +msgstr "庫存條碼表格" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to check out what this module can do! You can also print the barcode" +msgstr "看看這個模組可以做什麼!您還可以打印條碼" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer from this location." +msgstr "從此位置創建新調撥。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to create a new transfer." +msgstr "以創建新的調撥。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to know its content." +msgstr "了解其內容。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to open it." +msgstr "打開它。" + +#. module: stock_barcode +#. odoo-javascript +#: code:addons/stock_barcode/static/src/main_menu.xml:0 +#, python-format +msgid "to show its location and quantity." +msgstr "以顯示其位置和數量。" diff --git a/stock_barcode/models/__init__.py b/stock_barcode/models/__init__.py new file mode 100644 index 0000000..12e803d --- /dev/null +++ b/stock_barcode/models/__init__.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- + +from . import stock_picking +from . import stock_quant +from . import stock_scrap +from . import stock_location +from . import stock_move +from . import stock_move_line +from . import stock_package_type +from . import stock_lot +from . import stock_quant_package +from . import stock_warehouse +from . import product_product +from . import product_packaging +from . import res_config_settings +from . import res_partner +from . import uom_uom diff --git a/stock_barcode/models/product_packaging.py b/stock_barcode/models/product_packaging.py new file mode 100644 index 0000000..a1dfb5b --- /dev/null +++ b/stock_barcode/models/product_packaging.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api + + +class ProductPackaging(models.Model): + _inherit = 'product.packaging' + _barcode_field = 'barcode' + + def _get_stock_barcode_specific_data(self): + products = self.product_id + return { + 'product.product': products.read(self.env['product.product']._get_fields_stock_barcode(), load=False), + 'uom.uom': products.uom_id.read(self.env['uom.uom']._get_fields_stock_barcode(), load=False) + } + + @api.model + def _get_fields_stock_barcode(self): + return ['barcode', 'product_id', 'qty', 'name'] diff --git a/stock_barcode/models/product_product.py b/stock_barcode/models/product_product.py new file mode 100644 index 0000000..b7cae7a --- /dev/null +++ b/stock_barcode/models/product_product.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api +from odoo.osv import expression + + +class Product(models.Model): + _inherit = 'product.product' + _barcode_field = 'barcode' + + @api.model + def _search(self, domain, offset=0, limit=None, order=None, access_rights_uid=None): + # sudo is added for external users to get the products + domain = self.env.company.sudo().nomenclature_id._preprocess_gs1_search_args(domain, ['product']) + return super()._search(domain, offset=offset, limit=limit, order=order, access_rights_uid=access_rights_uid) + + @api.model + def _get_fields_stock_barcode(self): + return ['barcode', 'default_code', 'categ_id', 'code', 'detailed_type', 'tracking', 'display_name', 'uom_id'] + + def _get_stock_barcode_specific_data(self): + return { + 'uom.uom': self.uom_id.read(self.env['uom.uom']._get_fields_stock_barcode(), load=False) + } + + def prefilled_owner_package_stock_barcode(self, lot_id=False, lot_name=False): + domain = [ + lot_id and ('lot_id', '=', lot_id) or lot_name and ('lot_id.name', '=', lot_name), + ('product_id', '=', self.id), + '|', ('package_id', '!=', False), ('owner_id', '!=', False), + ] + + location_id = self.env.context.get('location_id', {}).get('id') + if location_id: + domain = expression.AND([domain, [('location_id', '=', location_id)]]) + else: + domain = expression.AND([domain, [('location_id.usage', '=', 'internal')]]) + + quant = self.env['stock.quant'].search_read( + domain, + ['package_id', 'owner_id'], + limit=1, load=False, order='package_id', + ) + if quant: + quant = quant[0] + res = {'quant': quant, 'records': {}} + if quant and quant['package_id']: + res['records']['stock.quant.package'] = self.env['stock.quant.package'].browse(quant['package_id']).read(self.env['stock.quant.package']._get_fields_stock_barcode(), load=False) + if quant and quant['owner_id']: + res['records']['res.partner'] = self.env['res.partner'].browse(quant['owner_id']).read(self.env['res.partner']._get_fields_stock_barcode(), load=False) + + return res diff --git a/stock_barcode/models/res_config_settings.py b/stock_barcode/models/res_config_settings.py new file mode 100644 index 0000000..c11d489 --- /dev/null +++ b/stock_barcode/models/res_config_settings.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + barcode_nomenclature_id = fields.Many2one('barcode.nomenclature', related='company_id.nomenclature_id', readonly=False) + stock_barcode_demo_active = fields.Boolean("Demo Data Active", compute='_compute_stock_barcode_demo_active') + show_barcode_nomenclature = fields.Boolean(compute='_compute_show_barcode_nomenclature') + + @api.depends('company_id') + def _compute_show_barcode_nomenclature(self): + self.show_barcode_nomenclature = self.module_stock_barcode and self.env['barcode.nomenclature'].search_count([]) > 1 + + @api.depends('company_id') + def _compute_stock_barcode_demo_active(self): + for rec in self: + rec.stock_barcode_demo_active = bool(self.env['ir.module.module'].search([('name', '=', 'stock_barcode'), ('demo', '=', True)])) diff --git a/stock_barcode/models/res_partner.py b/stock_barcode/models/res_partner.py new file mode 100644 index 0000000..7fea992 --- /dev/null +++ b/stock_barcode/models/res_partner.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api + + +class Partner(models.Model): + _inherit = 'res.partner' + + @api.model + def _get_fields_stock_barcode(self): + return ['display_name'] diff --git a/stock_barcode/models/stock_location.py b/stock_barcode/models/stock_location.py new file mode 100644 index 0000000..71bd783 --- /dev/null +++ b/stock_barcode/models/stock_location.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api + + +class Location(models.Model): + _inherit = 'stock.location' + _barcode_field = 'barcode' + + @api.model + def _search(self, domain, offset=0, limit=None, order=None, access_rights_uid=None): + domain = self.env.company.nomenclature_id._preprocess_gs1_search_args(domain, ['location', 'location_dest']) + return super()._search(domain, offset=offset, limit=limit, order=order, access_rights_uid=access_rights_uid) + + @api.model + def _get_fields_stock_barcode(self): + return ['barcode', 'display_name', 'name', 'parent_path', 'usage'] diff --git a/stock_barcode/models/stock_lot.py b/stock_barcode/models/stock_lot.py new file mode 100644 index 0000000..bffa09a --- /dev/null +++ b/stock_barcode/models/stock_lot.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api + + +class StockLot(models.Model): + _inherit = 'stock.lot' + _barcode_field = 'name' + + @api.model + def _search(self, domain, offset=0, limit=None, order=None, access_rights_uid=None): + # sudo is added for external users to get the lots + domain = self.env.company.sudo().nomenclature_id._preprocess_gs1_search_args(domain, ['lot'], field='name') + return super()._search(domain, offset=offset, limit=limit, order=order, access_rights_uid=access_rights_uid) + + def _get_stock_barcode_specific_data(self): + products = self.product_id + return { + 'product.product': products.read(self.env['product.product']._get_fields_stock_barcode(), load=False), + 'uom.uom': products.uom_id.read(self.env['uom.uom']._get_fields_stock_barcode(), load=False) + } + + @api.model + def _get_fields_stock_barcode(self): + return ['name', 'ref', 'product_id'] diff --git a/stock_barcode/models/stock_move.py b/stock_barcode/models/stock_move.py new file mode 100644 index 0000000..a7b0b49 --- /dev/null +++ b/stock_barcode/models/stock_move.py @@ -0,0 +1,49 @@ + +from odoo import models +from odoo.tools.float_utils import float_compare + + +class StockMove(models.Model): + _inherit = 'stock.move' + + def split_uncompleted_moves(self): + """ Creates a new move for every uncompleted move in order to get one picked move + with the picked quantity, and one not picked move with the remaining quantity.""" + # Backport of `stock.move` `_create_backorder` method. For more details, see + # https://github.com/odoo/odoo/commit/7472d5546580f28d58abfd20774b6e3eedc9f29a + # Split moves where necessary and move quants + new_moves_vals = [] + for move in self: + if move.picked and move.quantity == 0: + move.move_line_ids.unlink() + move.quantity = move.product_uom_qty + move.picked = False + if not move.picked: + continue + # To know whether we need to split a move, rounds to the general + # product's decimal precision and not the product's UOM. + rounding = self.env['decimal.precision'].precision_get('Product Unit of Measure') + if float_compare(move.quantity, move.product_uom_qty, precision_digits=rounding) < 0: + # Need to do some kind of conversion here + qty_split = move.product_uom._compute_quantity( + move.product_uom_qty - move.quantity, + move.product_id.uom_id, + rounding_method='HALF-UP') + new_move_vals = move._split(qty_split) + new_moves_vals += new_move_vals + new_moves = self.env['stock.move'].create(new_moves_vals) + # The new moves are not yet in their own picking. We do not want to check entire packs for those + # ones as it could messed up the result_package_id of the moves being currently validated + new_moves.with_context(bypass_entire_pack=True)._action_confirm(merge=False) + if new_moves: + # In some case, we already split the move lines in the front end. + # Those move lines are linked to the original move. If their quantity + # is 0 and they are already picked, there is no reason to keep them. + moves_to_clean = self - new_moves + move_lines_to_unlink = self.env['stock.move.line'] + for move in moves_to_clean: + for move_line in move.move_line_ids: + if move_line.quantity == 0 and move_line.picked: + move_lines_to_unlink |= move_line + move_lines_to_unlink.unlink() + return new_moves diff --git a/stock_barcode/models/stock_move_line.py b/stock_barcode/models/stock_move_line.py new file mode 100644 index 0000000..3c4f0d3 --- /dev/null +++ b/stock_barcode/models/stock_move_line.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models +from odoo.tools import frozendict + + +class StockMoveLine(models.Model): + _inherit = 'stock.move.line' + + product_barcode = fields.Char(related='product_id.barcode') + location_processed = fields.Boolean() + dummy_id = fields.Char(compute='_compute_dummy_id', inverse='_inverse_dummy_id') + parent_location_id = fields.Many2one('stock.location', compute='_compute_parent_location_id') + parent_location_dest_id = fields.Many2one('stock.location', compute='_compute_parent_location_id') + product_stock_quant_ids = fields.One2many('stock.quant', compute='_compute_product_stock_quant_ids') + product_packaging_id = fields.Many2one(related='move_id.product_packaging_id') + product_packaging_uom_qty = fields.Float('Packaging Quantity', compute='_compute_product_packaging_uom_qty', help="Quantity of the Packaging in the UoM of the Stock Move Line.") + hide_lot_name = fields.Boolean(compute='_compute_hide_lot_name') + hide_lot = fields.Boolean(compute='_compute_hide_lot_name') + image_1920 = fields.Image(related="product_id.image_1920") + product_reference_code = fields.Char(related="product_id.code", string="Product Reference Code") + qty_done = fields.Float(compute='_compute_qty_done', inverse='_inverse_qty_done') # Dummy field + + @api.depends('tracking', 'picking_type_use_existing_lots', 'picking_type_use_create_lots', 'lot_name') + def _compute_hide_lot_name(self): + for line in self: + if line.tracking == 'none': + line.hide_lot_name = True + line.hide_lot = True + continue + line.hide_lot_name = not line.picking_type_use_create_lots or (line.picking_type_use_existing_lots and not line.lot_name) + line.hide_lot = not line.picking_type_use_existing_lots or (line.picking_type_use_create_lots and line.lot_name) + + @api.depends('picking_id') + def _compute_parent_location_id(self): + for line in self: + line.parent_location_id = line.picking_id.location_id + line.parent_location_dest_id = line.picking_id.location_dest_id + + def _compute_product_stock_quant_ids(self): + for line in self: + line.product_stock_quant_ids = line.product_id.stock_quant_ids.filtered(lambda q: q.company_id in self.env.companies and q.location_id.usage == 'internal') + + def _compute_dummy_id(self): + self.dummy_id = '' + + def _compute_qty_done(self): + for line in self: + line.qty_done = line.quantity if line.picked else 0 + + def _compute_product_packaging_uom_qty(self): + for sml in self: + sml.product_packaging_uom_qty = sml.product_packaging_id.product_uom_id._compute_quantity(sml.product_packaging_id.qty, sml.product_uom_id) + + def _inverse_dummy_id(self): + pass + + def _inverse_qty_done(self): + for line in self: + line.quantity = line.qty_done + line.picked = line.quantity > 0 + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + # To avoid a write on `quantity` at the creation of the record (in the `qty_done` + # inverse, when the line's move is not created yet), we set the `quantity` directly at + # the creation and remove `qty_done` in the meantime. + if 'qty_done' in vals: + vals['quantity'] = vals['qty_done'] + vals['picked'] = vals['qty_done'] > 0 + del vals['qty_done'] + # Also delete the default value in the context. + self.env.context = frozendict({k: v for k, v in self.env.context.items() if k != 'default_qty_done'}) + return super().create(vals_list) + + + def _get_fields_stock_barcode(self): + return [ + 'product_id', + 'product_category_name', + 'location_id', + 'location_dest_id', + 'move_id', + 'qty_done', + 'quantity', + 'display_name', + 'product_uom_id', + 'product_barcode', + 'owner_id', + 'lot_id', + 'lot_name', + 'package_id', + 'result_package_id', + 'dummy_id', + 'picked', + 'product_packaging_id', + 'product_packaging_uom_qty', + 'move_id', + ] diff --git a/stock_barcode/models/stock_package_type.py b/stock_barcode/models/stock_package_type.py new file mode 100644 index 0000000..51d5d39 --- /dev/null +++ b/stock_barcode/models/stock_package_type.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, models + + +class PackageType(models.Model): + _inherit = 'stock.package.type' + + @api.model + def _get_fields_stock_barcode(self): + return ['barcode', 'name'] diff --git a/stock_barcode/models/stock_picking.py b/stock_barcode/models/stock_picking.py new file mode 100644 index 0000000..f0a49a4 --- /dev/null +++ b/stock_barcode/models/stock_picking.py @@ -0,0 +1,375 @@ +# -*- coding: utf-8 -*- + +from odoo import fields, models, api, _ +from odoo.tools import html2plaintext, is_html_empty +from odoo.exceptions import UserError + + +class StockPicking(models.Model): + _inherit = 'stock.picking' + _barcode_field = 'name' + + def action_cancel_from_barcode(self): + self.ensure_one() + view = self.env.ref('stock_barcode.stock_barcode_cancel_operation_view') + return { + 'name': _('Cancel this operation?'), + 'type': 'ir.actions.act_window', + 'view_mode': 'form', + 'res_model': 'stock_barcode.cancel.operation', + 'views': [(view.id, 'form')], + 'view_id': view.id, + 'target': 'new', + 'context': dict(self.env.context, default_picking_id=self.id), + } + + @api.model + def action_open_new_picking(self): + """ Creates a new picking of the current picking type and open it. + + :return: the action used to open the picking, or false + :rtype: dict + """ + context = self.env.context + if context.get('active_model') == 'stock.picking.type': + picking_type = self.env['stock.picking.type'].browse(context.get('active_id')) + if picking_type.exists(): + new_picking = self._create_new_picking(picking_type) + return new_picking._get_client_action()['action'] + return False + + def action_open_picking(self): + """ method to open the form view of the current record + from a button on the kanban view + """ + self.ensure_one() + view_id = self.env.ref('stock.view_picking_form').id + return { + 'name': _('Open picking form'), + 'res_model': 'stock.picking', + 'view_mode': 'form', + 'view_id': view_id, + 'type': 'ir.actions.act_window', + 'res_id': self.id, + } + + def action_open_picking_client_action(self): + """ method to open the form view of the current record + from a button on the kanban view + """ + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id("stock_barcode.stock_barcode_picking_client_action") + action = dict(action, target='fullscreen') + action['context'] = {'active_id': self.id} + return action + + def action_create_return_picking(self): + """ + Create a return picking for the current picking and open it in the barcode app + """ + self.ensure_one() + return_picking = self.with_context(active_model='stock.picking', active_id=self.id).env['stock.return.picking'].create({}) + if sum(return_picking.product_return_moves.mapped('quantity')) <= 0: + raise UserError(_("All products have been returned already")) + picking_id, _pt = return_picking._create_returns() + new_picking = self.env['stock.picking'].browse(picking_id) + return new_picking._get_client_action()['action'] + + def action_print_barcode(self): + return self.action_open_label_type() + + def action_print_delivery_slip(self): + return self.env.ref('stock.action_report_delivery').report_action(self) + + def action_print_packges(self): + return self.env.ref('stock.action_report_picking_packages').report_action(self) + + def _get_stock_barcode_data(self): + # Avoid to get the products full name because code and name are separate in the barcode app. + self = self.with_context(display_default_code=False) + move_lines = self.move_line_ids + lots = move_lines.lot_id + owners = move_lines.owner_id + # Fetch all implied products in `self` and adds last used products to avoid additional rpc. + products = move_lines.product_id + packagings = products.packaging_ids + + uoms = products.uom_id | move_lines.product_uom_id + # If UoM setting is active, fetch all UoM's data. + if self.env.user.has_group('uom.group_uom'): + uoms |= self.env['uom.uom'].search([]) + + # Fetch `stock.location` + source_locations = self.env['stock.location'].search([('id', 'child_of', self.location_id.ids)]) + destination_locations = self.env['stock.location'].search([('id', 'child_of', self.location_dest_id.ids)]) + package_locations = self.env['stock.location'].search([('id', 'child_of', self.location_dest_id.ids), ('usage', '!=', 'customer')]) + locations = move_lines.location_id | move_lines.location_dest_id | source_locations | destination_locations + + # Fetch `stock.quant.package` and `stock.package.type` if group_tracking_lot. + packages = self.env['stock.quant.package'] + package_types = self.env['stock.package.type'] + if self.env.user.has_group('stock.group_tracking_lot'): + packages |= move_lines.package_id | move_lines.result_package_id + packages |= self.env['stock.quant.package'].with_context(pack_locs=package_locations.ids)._get_usable_packages() + package_types = package_types.search([]) + + data = { + "records": { + "stock.picking": self.read(self._get_fields_stock_barcode(), load=False), + "stock.picking.type": self.picking_type_id.read(self.picking_type_id._get_fields_stock_barcode(), load=False), + "stock.move.line": move_lines.read(move_lines._get_fields_stock_barcode(), load=False), + # `self` can be a record set (e.g.: a picking batch), set only the first partner in the context. + "product.product": products.with_context(partner_id=self[:1].partner_id.id).read(products._get_fields_stock_barcode(), load=False), + "product.packaging": packagings.read(packagings._get_fields_stock_barcode(), load=False), + "res.partner": owners.read(owners._get_fields_stock_barcode(), load=False), + "stock.location": locations.read(locations._get_fields_stock_barcode(), load=False), + "stock.package.type": package_types.read(package_types._get_fields_stock_barcode(), False), + "stock.quant.package": packages.read(packages._get_fields_stock_barcode(), load=False), + "stock.lot": lots.read(lots._get_fields_stock_barcode(), load=False), + "uom.uom": uoms.read(uoms._get_fields_stock_barcode(), load=False), + }, + "nomenclature_id": [self.env.company.nomenclature_id.id], + "source_location_ids": source_locations.ids, + "destination_locations_ids": destination_locations.ids, + } + # Extracts pickings' note if it's empty HTML. + for picking in data['records']['stock.picking']: + picking['note'] = False if is_html_empty(picking['note']) else html2plaintext(picking['note']) + + data['config'] = self.picking_type_id._get_barcode_config() + if self.return_id: + data['config']['create_backorder'] = 'never' + data['line_view_id'] = self.env.ref('stock_barcode.stock_move_line_product_selector').id + data['form_view_id'] = self.env.ref('stock_barcode.stock_picking_barcode').id + data['package_view_id'] = self.env.ref('stock_barcode.stock_quant_barcode_kanban').id + return data + + @api.model + def _create_new_picking(self, picking_type): + """ Create a new picking for the given picking type. + + :param picking_type: + :type picking_type: :class:`~odoo.addons.stock.models.stock_picking.PickingType` + :return: a new picking + :rtype: :class:`~odoo.addons.stock.models.stock_picking.Picking` + """ + # Find source and destination Locations + location_dest_id, location_id = picking_type.warehouse_id._get_partner_locations() + if picking_type.default_location_src_id: + location_id = picking_type.default_location_src_id + if picking_type.default_location_dest_id: + location_dest_id = picking_type.default_location_dest_id + + # Create and confirm the picking + return self.env['stock.picking'].create({ + 'user_id': False, + 'picking_type_id': picking_type.id, + 'location_id': location_id.id, + 'location_dest_id': location_dest_id.id, + }) + + def _get_client_action(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id("stock_barcode.stock_barcode_picking_client_action") + action = dict(action, target='fullscreen') + action['context'] = {'active_id': self.id} + return {'action': action} + + def _get_fields_stock_barcode(self): + """ List of fields on the stock.picking object that are needed by the + client action. The purpose of this function is to be overridden in order + to inject new fields to the client action. + """ + return [ + 'move_ids', + 'move_line_ids', + 'picking_type_id', + 'location_id', + 'location_dest_id', + 'name', + 'state', + 'picking_type_code', + 'company_id', + 'note', + 'picking_type_entire_packs', + 'use_create_lots', + 'use_existing_lots', + 'user_id', + 'return_id', + ] + + @api.model + def filter_on_barcode(self, barcode): + """ Searches ready pickings for the scanned product/package/lot. + """ + barcode_type = None + nomenclature = self.env.company.nomenclature_id + if nomenclature.is_gs1_nomenclature: + parsed_results = nomenclature.parse_barcode(barcode) + if parsed_results: + # filter with the last feasible rule + for result in parsed_results[::-1]: + if result['rule'].type in ('product', 'package', 'lot'): + barcode_type = result['rule'].type + break + + active_id = self.env.context.get('active_id') + picking_type = self.env['stock.picking.type'].browse(self.env.context.get('active_id')) + base_domain = [ + ('picking_type_id', '=', picking_type.id), + ('state', 'not in', ['cancel', 'done', 'draft']) + ] + + picking_nums = 0 + additional_context = {'active_id': active_id} + if barcode_type == 'product' or not barcode_type: + product = self.env['product.product'].search([('barcode', '=', barcode)], limit=1) + if product: + picking_nums = self.search_count(base_domain + [('product_id', '=', product.id)]) + additional_context['search_default_product_id'] = product.id + if self.env.user.has_group('stock.group_tracking_lot') and (barcode_type == 'package' or (not barcode_type and not picking_nums)): + package = self.env['stock.quant.package'].search([('name', '=', barcode)], limit=1) + if package: + pack_domain = ['|', ('move_line_ids.package_id', '=', package.id), ('move_line_ids.result_package_id', '=', package.id)] + picking_nums = self.search_count(base_domain + pack_domain) + additional_context['search_default_move_line_ids'] = barcode + if self.env.user.has_group('stock.group_production_lot') and (barcode_type == 'lot' or (not barcode_type and not picking_nums)): + lot = self.env['stock.lot'].search([ + ('name', '=', barcode), + ('company_id', '=', picking_type.company_id.id), + ], limit=1) + if lot: + lot_domain = [('move_line_ids.lot_id', '=', lot.id)] + picking_nums = self.search_count(base_domain + lot_domain) + additional_context['search_default_lot_id'] = lot.id + if not barcode_type and not picking_nums: # Nothing found yet, try to find picking by name. + picking_nums = self.search_count(base_domain + [('name', '=', barcode)]) + additional_context['search_default_name'] = barcode + + if not picking_nums: + if barcode_type: + return { + 'warning': { + 'message': _("No %(picking_type)s ready for this %(barcode_type)s", picking_type=picking_type.name, barcode_type=barcode_type), + } + } + return { + 'warning': { + 'title': _('No product, lot or package found for barcode %s', barcode), + 'message': _('Scan a product, a lot/serial number or a package to filter the transfers.'), + } + } + + action = picking_type._get_action('stock_barcode.stock_picking_action_kanban') + action['context'].update(additional_context) + return {'action': action} + + +class StockPickingType(models.Model): + _inherit = 'stock.picking.type' + + barcode_validation_after_dest_location = fields.Boolean("Force a destination on all products") + barcode_validation_all_product_packed = fields.Boolean("Force all products to be packed") + barcode_validation_full = fields.Boolean( + "Allow full picking validation", default=True, + help="Allow to validate a picking even if nothing was scanned yet (and so, do an immediate transfert)") + restrict_scan_product = fields.Boolean( + "Force Product scan?", help="Line's product must be scanned before the line can be edited") + restrict_put_in_pack = fields.Selection( + [ + ('mandatory', "After each product"), + ('optional', "After group of Products"), + ('no', "No"), + ], "Force put in pack?", + help="Does the picker have to put in a package the scanned products? If yes, at which rate?", + default="optional", required=True) + restrict_scan_tracking_number = fields.Selection( + [ + ('mandatory', "Mandatory Scan"), + ('optional', "Optional Scan"), + ], "Force Lot/Serial scan?", default='optional', required=True) + restrict_scan_source_location = fields.Selection( + [ + ('no', "No Scan"), + ('mandatory', "Mandatory Scan"), + ], "Force Source Location scan?", default='no', required=True) + restrict_scan_dest_location = fields.Selection( + [ + ('mandatory', "After each product"), + ('optional', "After group of Products"), + ('no', "No"), + ], "Force Destination Location scan?", + help="Does the picker have to scan the destination? If yes, at which rate?", + default='optional', required=True) + show_barcode_validation = fields.Boolean( + compute='_compute_show_barcode_validation', + help='Technical field used to compute whether the "Final Validation" group should be displayed, solving combined groups/invisible complexity.') + is_barcode_picking_type = fields.Boolean( + compute='_compute_is_barcode_picking_type', + help="Technical field indicating if should be used in barcode app and used to control visibility in the related UI.") + + + @api.depends('restrict_scan_product', 'restrict_put_in_pack', 'restrict_scan_dest_location') + def _compute_show_barcode_validation(self): + for picking_type in self: + # reflect all fields invisible conditions + hide_full = picking_type.restrict_scan_product + hide_all_product_packed = not self.user_has_groups('stock.group_tracking_lot') or\ + picking_type.restrict_put_in_pack != 'optional' + hide_dest_location = not self.user_has_groups('stock.group_stock_multi_locations') or\ + (picking_type.code == 'outgoing' or picking_type.restrict_scan_dest_location != 'optional') + # show if not all hidden + picking_type.show_barcode_validation = not (hide_full and hide_all_product_packed and hide_dest_location) + + @api.depends('code') + def _compute_is_barcode_picking_type(self): + for picking_type in self: + if picking_type.code in ['incoming', 'outgoing', 'internal']: + picking_type.is_barcode_picking_type = True + else: + picking_type.is_barcode_picking_type = False + + @api.constrains('restrict_scan_source_location', 'restrict_scan_dest_location') + def _check_restrinct_scan_locations(self): + for picking_type in self: + if picking_type.code == 'internal' and\ + picking_type.restrict_scan_dest_location == 'optional' and\ + picking_type.restrict_scan_source_location == 'mandatory': + raise UserError(_("If the source location must be scanned, then the destination location must either be scanned after each product or not scanned at all.")) + + def get_action_picking_tree_ready_kanban(self): + return self._get_action('stock_barcode.stock_picking_action_kanban') + + def _get_barcode_config(self): + self.ensure_one() + # Defines if all lines need to be packed to be able to validate a transfer. + locations_enable = self.env.user.has_group('stock.group_stock_multi_locations') + lines_need_to_be_packed = self.env.user.has_group('stock.group_tracking_lot') and ( + self.restrict_put_in_pack == 'mandatory' or ( + self.restrict_put_in_pack == 'optional' + and self.barcode_validation_all_product_packed + ) + ) + config = { + # Boolean fields. + 'barcode_validation_after_dest_location': self.barcode_validation_after_dest_location, + 'barcode_validation_all_product_packed': self.barcode_validation_all_product_packed, + 'barcode_validation_full': not self.restrict_scan_product and self.barcode_validation_full, # Forced to be False when scanning a product is mandatory. + 'create_backorder': self.create_backorder, + 'restrict_scan_product': self.restrict_scan_product, + # Selection fields converted into boolean. + 'restrict_scan_tracking_number': self.restrict_scan_tracking_number == 'mandatory', + 'restrict_scan_source_location': locations_enable and self.restrict_scan_source_location == 'mandatory', + # Selection fields. + 'restrict_put_in_pack': self.restrict_put_in_pack, + 'restrict_scan_dest_location': self.restrict_scan_dest_location if locations_enable else 'no', + # Additional parameters. + 'lines_need_to_be_packed': lines_need_to_be_packed, + } + return config + + def _get_fields_stock_barcode(self): + return [ + 'default_location_dest_id', + 'default_location_src_id', + ] diff --git a/stock_barcode/models/stock_quant.py b/stock_barcode/models/stock_quant.py new file mode 100644 index 0000000..2236c5a --- /dev/null +++ b/stock_barcode/models/stock_quant.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api + + +class StockQuant(models.Model): + _inherit = 'stock.quant' + + dummy_id = fields.Char(compute='_compute_dummy_id', inverse='_inverse_dummy_id') + image_1920 = fields.Image(related="product_id.image_1920") + product_reference_code = fields.Char(related="product_id.code", string="Product Reference Code") + + def _compute_dummy_id(self): + self.dummy_id = '' + + def _inverse_dummy_id(self): + pass + + @api.model + def barcode_write(self, vals): + """ Specially made to handle barcode app saving. Avoids overriding write method because pickings in barcode + will also write to quants and handling context in this case is non-trivial. This method is expected to be + called only when no record and vals is a list of lists of the form: [[1, quant_id, {write_values}], + [0, 0, {write_values}], ...]} where [1, quant_id...] updates an existing quant or {[0, 0, ...]} + when creating a new quant.""" + Quant = self.env['stock.quant'].with_context(inventory_mode=True) + + # TODO batch + + for val in vals: + if val[0] in (0, 1) and not val[2].get('lot_id') and val[2].get('lot_name'): + quant_db = val[0] == 1 and Quant.browse(val[1]) or False + val[2]['lot_id'] = self.env['stock.lot'].create({ + 'name': val[2].pop('lot_name'), + 'product_id': val[2].get('product_id', quant_db and quant_db.product_id.id or False), + 'company_id': self.env['stock.location'].browse(val[2].get('location_id') or quant_db.location_id.id).company_id.id + }).id + + quant_ids = [] + for val in vals: + if val[0] == 1: + quant_id = val[1] + Quant.browse(quant_id).write(val[2]) + quant_ids.append(quant_id) + elif val[0] == 0: + quant = Quant.create(val[2]) + # in case an existing quant is written on instead (happens when scanning a product + # with quants, but not assigned to user or doesn't have an inventory date to normally show up in view) + if val[2].get('dummy_id'): + quant.write({'dummy_id': val[2].get('dummy_id')}) + quant.write({'inventory_date': val[2].get('inventory_date')}) + user_id = val[2].get('user_id') + # assign a user if one isn't assigned to avoid line disappearing when page left and returned to + if not quant.user_id and user_id: + quant.write({'user_id': user_id}) + quant_ids.append(quant.id) + return self.browse(quant_ids)._get_stock_barcode_data() + + def action_validate(self): + quants = self.with_context(inventory_mode=True).filtered(lambda q: q.inventory_quantity_set) + quants._compute_inventory_diff_quantity() + res = quants.action_apply_inventory() + if res: + return res + return True + + def action_client_action(self): + """ Open the mobile view specialized in handling barcodes on mobile devices. + """ + action = self.env['ir.actions.actions']._for_xml_id('stock_barcode.stock_barcode_inventory_client_action') + return dict(action, target='fullscreen') + + @api.model + def get_existing_quant_and_related_data(self, domain): + quants = self.search(domain) + return quants.get_stock_barcode_data_records() + + def _get_stock_barcode_data(self): + locations = self.env['stock.location'] + company_id = self.env.company.id + package_types = self.env['stock.package.type'] + if not self: # `self` is an empty recordset when we open the inventory adjustment. + if self.env.user.has_group('stock.group_stock_multi_locations'): + locations = self.env['stock.location'].search([('usage', 'in', ['internal', 'transit']), ('company_id', '=', company_id)], order='id') + else: + locations = self.env['stock.warehouse'].search([('company_id', '=', company_id)], limit=1).lot_stock_id + self = self.env['stock.quant'].search([('user_id', '=?', self.env.user.id), ('location_id', 'in', locations.ids), ('inventory_date', '<=', fields.Date.today())]) + if self.env.user.has_group('stock.group_tracking_lot'): + package_types = package_types.search([]) + + data = self.with_context(display_default_code=False, barcode_view=True).get_stock_barcode_data_records() + if locations: + data["records"]["stock.location"] = locations.read(locations._get_fields_stock_barcode(), load=False) + if package_types: + data["records"]["stock.package.type"] = package_types.read(package_types._get_fields_stock_barcode(), load=False) + data['line_view_id'] = self.env.ref('stock_barcode.stock_quant_barcode').id + return data + + def get_stock_barcode_data_records(self): + products = self.product_id + companies = self.company_id or self.env.company + lots = self.lot_id + owners = self.owner_id + packages = self.package_id + uoms = products.uom_id + # If UoM setting is active, fetch all UoM's data. + if self.env.user.has_group('uom.group_uom'): + uoms = self.env['uom.uom'].search([]) + + data = { + "records": { + "stock.quant": self.read(self._get_fields_stock_barcode(), load=False), + "product.product": products.read(products._get_fields_stock_barcode(), load=False), + "stock.quant.package": packages.read(packages._get_fields_stock_barcode(), load=False), + "res.company": companies.read(['name']), + "res.partner": owners.read(owners._get_fields_stock_barcode(), load=False), + "stock.lot": lots.read(lots._get_fields_stock_barcode(), load=False), + "uom.uom": uoms.read(uoms._get_fields_stock_barcode(), load=False), + }, + "nomenclature_id": [self.env.company.nomenclature_id.id], + "user_id": self.env.user.id, + } + return data + + def _get_fields_stock_barcode(self): + return [ + 'product_id', + 'location_id', + 'inventory_date', + 'inventory_quantity', + 'inventory_quantity_set', + 'quantity', + 'product_uom_id', + 'lot_id', + 'package_id', + 'owner_id', + 'inventory_diff_quantity', + 'dummy_id', + 'user_id', + ] + + def _get_inventory_fields_write(self): + return ['dummy_id'] + super()._get_inventory_fields_write() diff --git a/stock_barcode/models/stock_quant_package.py b/stock_barcode/models/stock_quant_package.py new file mode 100644 index 0000000..f6f84b0 --- /dev/null +++ b/stock_barcode/models/stock_quant_package.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models, api +from odoo.osv import expression + + +class QuantPackage(models.Model): + _inherit = 'stock.quant.package' + _barcode_field = 'name' + + @api.model + def _search(self, domain, offset=0, limit=None, order=None, access_rights_uid=None): + domain = self.env.company.nomenclature_id._preprocess_gs1_search_args(domain, ['package'], 'name') + return super()._search(domain, offset=offset, limit=limit, order=order, access_rights_uid=access_rights_uid) + + @api.model + def action_create_from_barcode(self, vals_list): + """ Creates a new package then returns its data to be added in the client side cache. + """ + res = self.create(vals_list) + return { + 'stock.quant.package': res.read(self._get_fields_stock_barcode(), False) + } + + @api.model + def _get_fields_stock_barcode(self): + return ['name', 'location_id', 'package_type_id', 'quant_ids'] + + @api.model + def _get_usable_packages(self): + usable_packages_domain = [ + '|', + ('package_use', '=', 'reusable'), + ('location_id', '=', False), + ] + loc_ids = self._context.get('pack_locs') + if loc_ids: + usable_packages_domain = expression.OR([usable_packages_domain, [('location_id', 'in', loc_ids)]]) + return self.env['stock.quant.package'].search(usable_packages_domain) diff --git a/stock_barcode/models/stock_scrap.py b/stock_barcode/models/stock_scrap.py new file mode 100644 index 0000000..bfbd40f --- /dev/null +++ b/stock_barcode/models/stock_scrap.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class StockScrap(models.Model): + _name = 'stock.scrap' + _inherit = ['stock.scrap', 'barcodes.barcode_events_mixin'] + + product_barcode = fields.Char(related='product_id.barcode', string='Barcode', readonly=False) + + def on_barcode_scanned(self, barcode): + self.ensure_one() + product = self.env['product.product'].search([('barcode', '=', barcode)]) + if product and self.product_id == product: + self.scrap_qty += 1 + elif product: + self.scrap_qty = 1 + self.product_id = product + self.lot_id = False + else: + lot = self.env['stock.lot'].search([('name', '=', barcode)]) + if lot and self.lot_id == lot: + self.scrap_qty += 1 + elif lot: + self.scrap_qty = 1 + self.lot_id = lot.id + self.product_id = lot.product_id diff --git a/stock_barcode/models/stock_warehouse.py b/stock_barcode/models/stock_warehouse.py new file mode 100644 index 0000000..eb23bdd --- /dev/null +++ b/stock_barcode/models/stock_warehouse.py @@ -0,0 +1,24 @@ +from odoo import models + + +class StockWarehouse(models.Model): + _inherit = 'stock.warehouse' + + def _get_picking_type_create_values(self, max_sequence): + values = super()._get_picking_type_create_values(max_sequence) + values[0]['pick_type_id']['restrict_scan_source_location'] = 'mandatory' + values[0]['pick_type_id']['restrict_scan_dest_location'] = 'no' + return values + + def _get_picking_type_update_values(self): + values = super()._get_picking_type_update_values() + # When multi-steps delivery is enabled, the source scan setting for the pick is equal to the + # delivery type's one, and the scan source for the delivery is disabled (by default). + if values['pick_type_id'].get('active'): + if self.out_type_id.restrict_scan_source_location == 'mandatory' and self.pick_type_id.restrict_scan_dest_location == 'optional': + values['out_type_id']['restrict_scan_source_location'] = 'no' + values['pick_type_id']['restrict_scan_source_location'] = self.out_type_id.restrict_scan_source_location + values['pick_type_id']['restrict_scan_dest_location'] = 'no' + elif not values['pick_type_id'].get('active') and self.pick_type_id.active: + values['out_type_id']['restrict_scan_source_location'] = self.pick_type_id.restrict_scan_source_location + return values diff --git a/stock_barcode/models/uom_uom.py b/stock_barcode/models/uom_uom.py new file mode 100644 index 0000000..e8adb43 --- /dev/null +++ b/stock_barcode/models/uom_uom.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- + +from odoo import models, api + + +class UoM(models.Model): + _inherit = 'uom.uom' + + @api.model + def _get_fields_stock_barcode(self): + return [ + 'name', + 'category_id', + 'factor', + 'rounding', + ] diff --git a/stock_barcode/security/ir.model.access.csv b/stock_barcode/security/ir.model.access.csv new file mode 100644 index 0000000..1122f4b --- /dev/null +++ b/stock_barcode/security/ir.model.access.csv @@ -0,0 +1,2 @@ +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" +"access_stock_barcode_cancel_operation","access.stock_barcode.cancel.operation","model_stock_barcode_cancel_operation","stock.group_stock_user",1,1,1,0 diff --git a/stock_barcode/static/description/icon.png b/stock_barcode/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..72b585cc6483314d15987b506b9c4a5b2a2f4fea GIT binary patch literal 535 zcmeAS@N?(olHy`uVBq!ia0vp^DImk|5uUWtI)$UuU;@R z(fgNFcJ{C*$J^&8KmPc%%=pf!T75^evupng-s0aG$PwglXU5*|VZUwCrztGmF*mMU z?^|#(i>CUK*?$wWIuuk{n>sjeujFj%Q0$NxV8WCAqk*x=rsuoQ=lS=UFP*6VE@AJR{d-qy+|9aBKL7oW t+qrwfq#v8En{Q(JKYAZKEL0Ed|Hdib)aB#W8d(Jr^K|udS?83{1OSkz(J%l2 literal 0 HcmV?d00001 diff --git a/stock_barcode/static/description/icon.svg b/stock_barcode/static/description/icon.svg new file mode 100644 index 0000000..7ae16f9 --- /dev/null +++ b/stock_barcode/static/description/icon.svg @@ -0,0 +1 @@ + diff --git a/stock_barcode/static/img/barcode.svg b/stock_barcode/static/img/barcode.svg new file mode 100644 index 0000000..546eba1 --- /dev/null +++ b/stock_barcode/static/img/barcode.svg @@ -0,0 +1,20 @@ + + + image/svg+xml + + Barcode Icon + + + + + + + + + + + + + + + diff --git a/stock_barcode/static/img/barcode_white.png b/stock_barcode/static/img/barcode_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b00ef903a9289811f7ccbeafb968dd97cb80db8f GIT binary patch literal 2476 zcmchZe@qj16u?gqXmEs~2>zIQDH?U!-dz!-g`!=r9gV9$u$wIEptM)oVDD;sv{zVA z_Qw_mVu%r{BQA59ZgaC_vM3XOY(pB7LY;=SIw{*g8B#>8f@F&OmO@$LSTZ!byvz4} zzj^QTeeZqWeRJiTH@+Sdy&xKbpcq*eo((}WJmAe_MS>M>^NheSpO)m%TPY1~Q5p$I zq^9x-Sf*DN5ZQ!MZQb2UWI#~(3Y{W{&XK<%P*HlWGGN1H^akJ!K^f~9gHlyU&~QFc zpd*Fs!Lt|Guud&xZ%dJ*a)X%A>avQB#Ma`C3RQ8Timzs`%Y-u+0RZR;S_w1yU8G6C z2-#y?0nh`>2pb+Vp$moVU{E>o&9Im<5^xGPm7~JepzvBg7fVIgq+qLI9*V6+&=dqs z<)D}VO%w1ic>H05-Hd9DARCvC?*(Q;ww9(10tB&GEL=-6mogS07@yBaP#(hLaexKK zWF=`O!y!#c69k+vsf;=Ut)oadKvd>aMYNC&A`PaXH-xaHX}nCJUhD zm;bw|ULUeH(b>dgy#EL`DXazp$tFxxkx>N>PLmYa${-LM2_;P#6%@5=qKccf6iu15 zlmQlt1650dSICtr9T`|$Ip!so3uL5;R+1`0h6~w%!`1230$d~#Nu&}fpT9w>Vz*&sfzRjNl*ByL%vdUO5Z?3=nY_JoG|Llgj#B(^zc~X0^QWH z;8XI(ebrOOB9Tn#i-2H|!14a=xF?oC4+Ydv^MXmJ{RtBEyb(0F+wb;4P~-v`E>bYp zeV(=r3T6Do-&RI`sEvD|d!Wa&;_C8SUFP7cn!T@L=KfMI5qUK`$z@9>)Lle zf9XEXscP9l{^aj+cG!O8>}f&r-21x!F~8k>BKEVsNOCA`q)8kz@Z@Mql&|`I^D75$)QA9JZLDy>!?tC?u@aP*C7{ zC@6a`h6QE1Mu7L?U?CDvo;$J-EJOmzbklqmHc1NWUj{*C5#us50Sd~?IZ#m6=gkPp zbd3P-#lb=(pgebEAy|k6lV9d@7Y9IhES zmGi6RXpg^SuK(ms7n9OgSBp`Op2mjnuiADdof&i;c2n_8?D<5`EzX-)H5DC~D>rpi zRy67#?7H>1c=W&_tg~dE$Gx~KcU1DyWLx~7AKTYg7Ik;JF73$5^pj5M@77+`vDvPL z%{OGDhY*FGsM&YB$Vso%@a{D&!G;f5>Z<@_Uzx7OwWYQ>?f411z~ zsnyYsMa^+-FSph-b+_4`l=pHjWz;$c=6J%f!~?FT+IPL5^eozw$nsT#A%W$??^itu zD-+fNK0@zsp;s5{u literal 0 HcmV?d00001 diff --git a/stock_barcode/static/img/barcodes_actions.pdf b/stock_barcode/static/img/barcodes_actions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..643563b35721ebbbd50bae09b7f44952351321be GIT binary patch literal 7901 zcmb_Bc|4T+`nJ%N7^El}(-=v!nHd_)*akC<2t}4M%nZXYni*> zX+RM$>#g1X6D2|1}lWe7BB$_U%=o735Z6((l$sC7$mS@ zbC|-<|49-E4?#n?p1vSMLllh};4Sch=mHRX6u?EmW_ocMOcDvi7x0*L ze^BTp|4Y_<4L#nexgQ%tvG}ELajwyi@8jPlra!d|a*dW1Klw}(e*X65)7*>fq2tTb_l=gl*0|N7 zY}J0w+)+FB^XvO>qqb@&>zCom*7FNpgQMxF+>0fPv&-LSr{`zCFQCe}_YLnII}-Nu z>-6_;6OGvxly3xY`5!-K-hZ1*pZgge@pI;Tf~O#Mda%)J;rs0PmqXQMTc26YEqz(k zbPQ--Y#A+^GBP3^U-~xKcPIT$;*`-c&hn}R>i+#>OB0LVmr$sglXud8{`lp1KjJ3e z{Ks71+>~0u$CiSr9AA%6=J)xDB^gDOn(gtUaqkJl<=XHc=>^K)zerDa3`-{(DY~vp z{CVX2a`%-M`{&)+H+G0z4qPd@YqPIYGctR5 zf8(9ed=N|xR(cY0ETjH%#`Re8NX3)1edR4FTF)zB_Gd*tj|1$S&L+`mP-S<1!oz>!3XcpfasZdS{x+$*Z-PTkoVL&xZm zh;DT2VaQC>NBx?CqvRob_tDJQ=#k2s!zHgRVNovY;bO_QU2#M)vWllqnQ_1JSo1b7 z=t59g$76WsKyLyO`extJkFny+spE_z0boMHcXR zTfy#8F4a*<^?8Kr3DE+UwK`t4mWH$gefo$4)DXX^w5bOYJFz)6)_6qaf@c6+B6+T2 z!*vWTH`%loj$JU+x|n*IYK~yLS4tf&{lfVf5v+QfR;tI-8P!jnOP;H8GpF2ZsCC-1 zw%Ky$-Vfrt3=HyMU2HPRf!+L7HTlZ3B&~E(_XdUdVB1|b?)<8Gx~ENPvp_AiHyC?1 zBeyo_47c3ZE2I9!{#IvC9?5l!u3YCvpR9E%UF^a#FwE<8^ZSo&S@4woi9MDBH^@WH zJ6I$Zk8OdK${H6KoZhx&$D$#2kJss@_nAGHPSKpM($iox@2m3m-IGjDo3%ZyduT|T zwU6ASGtTLzS3PaN);4mfWL;4mbEdX;UsGI?+f~K3@RQ9_R{I9mFx4I(%*xC?#M@vm z#Z)_X*=c8C^PJ^2mgv)wt>-}G>Ki{J{$EsBc=gJLA9IyWz5>1H)AI=5_5I6*P{+TfPv z0-M5}VGLN0T>4O(*^@mrfD=pZEe&hxhO+(FvF7C#o>qfff7OuhIJhpT zNP{Oc7L+ATR=K9vHB7cQ@YHLdj3CaXwMA+0;7@OzjHigTp>5O@*#1@S#v?Yg8p$~6 zaa^(~y5R{--208ZpG*8mXYMVfx&uHGw$X|+##Mr~@{2A%7&%droPY8XwZ1grc0%Mx z1M-Oe_YAkJ^ObB_AVDwkW1BArYFQ3q$w*gZ$8P9MKTlRyF6G63LBP|BmfO7!Pj!-C zIJ)45qbM)dyTwjDxgfwR#Or@{?o(=|mC<vDo@I z$``K;&`5*PcjKU@y#86@wh0DwQ(?4E>1H6Bt9m|ujETkjp*%{r&`35k)?0LKTA8Y2 z`y`!r@ZHv@>yksMPiXP9A#2~RP<0-=0tqVLrNz_Tv=^T3d3kqug$^}FzOCwfv+|C% zt%mRf^a-|Ra`&Xclkcw3n>TxUp$n4T0Z1P0xo3RySBYfVZjX@dP?%bw%ncx3W|urv zw~~=|Wgo;Iz+|R~nE{$JYzrN2M|e7`oApC};elZ<(!D`$fwQP}K3F|D5jU|hVf^;( zU@KPTgOQ4xms6DSv`PI(Tk?Y3Z!PB6c`i5Ki`{p&WZ7e;S$jhCFWyJa}FTy*~ zY z1{z9WLIHp#lakwiM5D-W+SY#k1Y*Y`>+POc4f1pG$@Aosf;B4DT`~2lue8cznwU49 z1gj>q{2qj=zjNsiYYQ-g)Z%ImdCDZ`K3GcWhA!azgS!~e^!!Iym`ntW^<8Hmwox;!{`%PS+`EZwC_R;uS4 zqN*%0Mw&BAQFr0sZ^QLg1crn4$QOn|JW!8o4#|U4rsi_6xHR{WUyo50DI|r-baHg= zmu(D}MU5^!+OFc7LS$u;r;1*ftWT`{`{cEd8b>eBEGV(apY6^_1*HI~qT>z9qSBvj-1pxkVqE ziEC?DGVU+PSj>Yb%Pr)8R^C}8-Mo;|rW*qk0{@dSm-6K8_gd4utK~nhfA%=5B74Z` zrvK=^;C7|MD$Vs9j6Q#GG=XVBUx}rJ%9Y{hPP~L?tw*vuJzD2y$y9bP?*un zUR`^bT`;M*p#rlY*~3!uqLJk4&D2$3+}b=28Hi%-uJxOt4 z>VC)0qYXRU)4QE}6(8wFQT#^HvoR4N=Qw9JCr58?$dn-8lfh;rD5gedG`n?W+^){5 z+L)@Qw|Fo0oNZ2Js&7n+M9cH{12^C@4;eZWPWwM(foEN_{RU3G)}U*}&R%Kv=F7BV z&J;@TtJ&-1q@mF9OB5rX^g`mC!xmR=@uGuTU_S$X_g=8(lqSooEE%cR>?4HF79 z->BSb^1#(o?5C0`w%Cv8MoDVdS>>~Pb8kGr1`n@kF34=S=yir6#>B?NMyR~x<2Q;H z?KoZ7uxEr;(&pGbY|DVQa<+@O!|hYN#F*KhWtw$6BXN{-olD!i`rN9zVrdhF1Bb{T1?}7O zUY%W=+rs{|*K%`m$N&p_Fsam76`8xsv~Jh8UcoJ(?ubu5s*t3*lC1O&CLvLa377Jr z5E+bv4m=52P`P1PteJoiJ&4qlNq!Dj&s0ckD$rVt_`I{YabIGVL$5ilK`so1xp?5p z*oN*lX2w{>`L{vlO6m)oBFTN-9*MF@k52T-i%nAfiBa7$DZz&VSQ|7t2YS}o-)V7j z=tG?qg>kP6u;pNOTvee?qwKh^H-crXuz(B7V4tFNeYP|Xf16a=`?gIQ{NAg(QgSjP zMv~I?)kl)p(UTQW=1V5EN%wEX!)&lTT}zp9-?n4k`(cmfcP#EZfR7Z&wD-po(3I!z zT^bc9)6oE=WXsg(GM&eYwz>gsGXY_@g3TpX)3_6X`!?G?LE zeJSN_THm7W)zeViEO(dYa3ciP8~B$VJ6^lixE4CwiznpEE?Mu{N6pdBjYX+rr zwW%jYHKAfN{?zyF=gk~K)%NZa6__jc?&@S}K00{boZ?-4iL(K_Igv}9J-SWRm2&US zthS_u_z3Up_Qu^jJH>kK$11sgio@|BsF=RP#G=K32TZ1G5a+dZTt}xu`549f9GJ5q z_r~blmUkBCyL!HePZq?9jcpK5JWQ4l1hpJfGaUuzV*Ac^)R=Ul6|PuXA(D#Pd_B@p zi3&q>`L#*bM&~4kDaLgB7z?r>nmW&`+cDD-N0n8w?ud#kMq{V*!9Fgv*IUgnvgR&#!-x=azAk%9@PfWv5sqjb^ZaX( z>e?)8k-7Rjr7^3DHz(=9zm>H-ofd8A8*Ald9SfXs7VG|D^`N#5cMMM}n^Rm|Pb9>R z*w#4Cs6Ts>IA8TsHeWU=LflF_KbcaUE&m3S)M3RC>o~L~*v0~u@o)YmNI&h-TLX?Iq7nvk}-G|CN=Gx8+e)rWf9VJHizg8l9A?{JW z_6Bz&){&Sq1;a<$&u#dWriN?UK;U`)a~f;jSzuDA!<_FB4Z_*1|LXy zl$g}Q+kgWZv? zXZ4+9>RZxUGc5#C#Vlhv_cRx^aEX|R>Z8?u5SV}1nYlb5gl9T0Rv$?(Q@oyW#iXu& zlABs2o2%UwdEaIuIO)ad>@GQ(p>OqK2_6HdM#S3+_Gd44Oh*dxGHl#G&-A<_ z_`ldbPH6ZkaGX)d9LNgV3J#NE9{OSvLz=XBn0?Bor!{=fuDwX4-97uqp7~p$U%m__ z0JR$O5CQLaJE0kSi-l1TZSLM*IR>fQ1+N+139VQAL}R#@n=F7*_&O8hx)Zl^ytgD9 zjcFwMii<87o0oCy?!8hp=umLaw8C2(sK1@7W?f_DnbBK!rT;i~9PxEEy`QdcODA10yLgxSh$iIRlqZ*;bU(2gxv{syr^3wM0a2YlhyGPvs}Uk+Gh)=B{m4h;(v!`O!7k%P(l2i= z@Rf@wj(HOgTN{}lchst9=fQ3EG!?Z6jkdovPV5q`;lOJ~$|cKAI~50Hop|do;nYC6 z74H;t_Rtt?%`Y2ssOQ{q>K;d%_tkv;I&FR8Md>xkUwuDj?Wwv8#y!7MnO7!vyW(j{ z2N)@Zx4ka<8=~a5*V1Vs8Czd(m5$c7Jh@MUE$3L7&-NERq1XPFBx3!WQq=M>I6m^~ z1=Yz&dyR+hOZ$pD!1Yl>ZR*A~4?o{&8VTG!kG@WpIT@(x|6^vYpGYbCx^D>7Ent>U z=zzEtv6SxL9qXdiY%Lclb41#J0!J0`5+obY{IqeWNR6YPA2F{(0>0j`?X6Yh;2GK@ zyKXhhmlbv!A2I{)2NY)o<4&xfG#XWql}@?TFoyXV4CdBK z3~c(b#%dk}0uFR;mmh7%L7NAbLnR_Lrrp;NCUzG!9B-0qIB7Y3AhB$5qtg%NMcSg? zm|nAr)^5Bv1$U2n%kM6V2aB~usR2LS^TXFHCx|gZPc8}A$__H z>Gb16*~@B`(;JeQ0gTn*DzFj`WQAi`;Tw;`6F{pl+@Hf*$FM*q%8u^MMA)A@D`i^brUG^--vhkPu`D7Rlv#qc8*l0fp8<>F6K;35@>UdKJO6_$fR9|!3F*c4N3oqz7$h3?hafU=93DGRcoPB<3Z{DsZ!DnDRW86~ z#^196HUK_Y;CR4F9|%@PkQb9j)U>ptK`ec^e8KN*Ap|5Ik3?&tR?qcc!~wSadvSmR zR@F8HaP)1s3^pr_4CD|=2d#reV9*FG#u0%o<5oD732?82r8MV85G23=riazEMvD03*m`I z??zxSECK=zJO~^evm1le#qUPrSpTcD7+(L-BQS`^SqV#q7mCSY3Pth(e_;Sc7+(4; zF3+DX01_iGkOSnoFxF5&)M%0nflUEhz+sYBg5HE9_^LG4w;%Na*LKyIX$%P@mgRC#i7YrJU!C>(^E2*N1Mr#6SKuY}= zjMeDf0bPx8=zj`$EfQ(97lrbeED#!kL4$;m_WJ|T#pAJf2n(_b!xOMT-w{5LfInb* zSUsSv{VNQ=TMszj16rFZ>8VoBj(-7rh(kYk%Mgcy!<% zmj~R-LQoFua3*jz2+-2GKqD2lI|zyzz~VxLP6B#5l?-t;)Y*-(Fu|MPEzHc(CTOgw sxf#xsjMv3raaf$0p1CRMzhk%ydo*7_=LuE}s)xtz2JW%VZ7o3m2SL&g&Hw-a literal 0 HcmV?d00001 diff --git a/stock_barcode/static/img/barcodes_demo.pdf b/stock_barcode/static/img/barcodes_demo.pdf new file mode 100644 index 0000000000000000000000000000000000000000..02ec9cb1a19f111b2639cce8c7a838bfa6795264 GIT binary patch literal 64016 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 OmS+Bu%MIt^KmHHN@_jP^ literal 0 HcmV?d00001 diff --git a/stock_barcode/static/img/make_barcodes.py b/stock_barcode/static/img/make_barcodes.py new file mode 100644 index 0000000..87dff92 --- /dev/null +++ b/stock_barcode/static/img/make_barcodes.py @@ -0,0 +1,117 @@ +# Note to run this script (specifically for datamatrix generation) you will need the following installed: +# - reportlab version 3.4 or higher (available on pip3) + + +from io import BytesIO +from PyPDF2 import PdfFileReader, PdfFileMerger + +from reportlab.graphics import renderPDF +from reportlab.graphics.barcode import createBarcodeDrawing +from reportlab.pdfgen import canvas +from reportlab.lib.pagesizes import A4 + + +OTHER_DEMO_FILENAME = "barcodes_demo.pdf" +FONT = "Helvetica" +HEADER_FONT_SIZE = 16 +LABEL_FONT_SIZE = 14 +TITLE_FONT_SIZE = 11 +CODE_FONT_SIZE = 8 +FOOTER_FONT_SIZE = 8 +PAGE_SIZE = A4 + + +def create_page(barcodes, font_size_and_texts): + kwargs = { + 'width': 75, + 'height': 75, + } + packet = BytesIO() + can = canvas.Canvas(packet, pagesize=PAGE_SIZE) + for barcode in barcodes: + d = createBarcodeDrawing('ECC200DataMatrix', value=barcode[2], **kwargs) + renderPDF.draw(d, can, barcode[0], barcode[1]) + + # add text + for font_size, texts in font_size_and_texts: + can.setFont(FONT, font_size) + for text in texts: + can.drawString(text[0], text[1], text[2]) + can.save() + packet.seek(0) + return PdfFileReader(packet) + + +# same on all GS1 pages +footer = [(45, 45, "Don't have any barcode scanner? Right click on your screen > Inspect > Console and type the following command:"), + (45, 35, ' odoo.__WOWL_DEBUG__.root.env.services.barcode.bus.trigger("barcode_scanned", {barcode:"setyourbarcodehere"})'), + (45, 25, 'and replace "setyourbarcodehere" by the barcode you would like to scan OR use our mobile app.'), + (45, 15, 'For GS1 barcodes, remove all "("s and ")"s')] + +# page 1 +# format is (x, y, "barcode") +# barcodes to generate +barcodes = [(75, 640, "WH-RECEIPTS"), (260, 640, "0106016478556677300000000510Lot0001"), (445, 640, "0106016478556677300000000510Lot0002"), + (75, 505, "0106016478556677300000000510Lot0003"), (260, 505, "O-BTN.validate"), + (75, 350, "WH-RECEIPTS"), (260, 350, "01060164785599993650000010"), (445, 350, "01060164785599823160000002"), + (75, 220, "O-BTN.validate")] + +header = [(45, 785, "GS1 Barcodes (set Barcode Nomenclature to Default GS1 Nomenclature)")] +# text to describe barcode flow +flow_labels = [(45, 752, "Receive products tracked by lot (activate Lots & Serial Numbers) "), + (45, 460, "Receive products with different unit of measures (activate Units of Measure)")] + +# text to describe (above) each barcode +barcode_titles = [(55, 733, "YourCompany Receipts"), (215, 733, "Cable Management Box x5 Lot0001"), (400, 733, "Cable Management Box x5 Lot0002"), + (45, 600, "Cable Management Box x5 Lot0003"), (275, 600, "Validate"), + (55, 444, "YourCompany Receipts"), (230, 444, "Customized Cabinet (USA) 10 ft³"), (415, 444, "Customized Cabinet (Metric) 2 m³"), + (93, 315, "Validate")] + +# text of barcode code (below), but made to look pretty (not literal barcode) +barcode_code = [(85, 631, "WH-RECEIPTS"), (220, 631, "(01)06016478556677(30)00000005(10)Lot0001"), (405, 631, "(01)06016478556677(30)00000005(10)Lot0002"), + (45, 495, "(01)06016478556677(30)00000005(10)Lot0003"), (270, 495, "O-BTN.validate"), + (85, 340, "WH-RECEIPTS"), (238, 340, "(01)06016478559999(3650)000010"), (425, 340, "(01)06016478559982(3160)000002"), + (85, 212, "O-BTN.validate")] + + +font_size_and_texts = [(HEADER_FONT_SIZE, header), + (LABEL_FONT_SIZE, flow_labels), + (TITLE_FONT_SIZE, barcode_titles), + (CODE_FONT_SIZE, barcode_code), + (FOOTER_FONT_SIZE, footer)] + +page1 = create_page(barcodes, font_size_and_texts) + +# page 2 +# format is (x, y, "barcode") +# barcodes to generate +barcodes = [(75, 640, "WH-RECEIPTS"), (260, 640, "0106016478556332305"), (445, 640, "0006016471234567890591PAL"), + (75, 505, "O-BTN.validate")] + +header = [] +# text to describe barcode flow +flow_labels = [(45, 752, "Put in Pack (activate Packages)")] + +# text to describe (above) each barcode +barcode_titles = [(55, 733, "YourCompany Receipts"), (233, 733, "Individual Workplace x10"), (410, 733, "Put in Pack: Pallet with SSCC"), + (93, 600, "Validate")] + +# text of barcode code (below), but made to look pretty (not literal barcode) +barcode_code = [(85, 631, "WH-RECEIPTS"), (245, 631, "(01)06016478556332(30)10"), (425, 631, "(00)060164712345678905(91)PAL"), + (85, 495, "O-BTN.validate")] + +font_size_and_texts = [(HEADER_FONT_SIZE, header), + (LABEL_FONT_SIZE, flow_labels), + (TITLE_FONT_SIZE, barcode_titles), + (CODE_FONT_SIZE, barcode_code), + (FOOTER_FONT_SIZE, footer)] + +page2 = create_page(barcodes, font_size_and_texts) + + +# merge with other demo barcodes +merger = PdfFileMerger() +merger.append(PdfFileReader(open(OTHER_DEMO_FILENAME, "rb"))) +merger.append(page1) +merger.append(page2) +merger.write(OTHER_DEMO_FILENAME) diff --git a/stock_barcode/static/img/make_barcodes.sh b/stock_barcode/static/img/make_barcodes.sh new file mode 100644 index 0000000..e0348fb --- /dev/null +++ b/stock_barcode/static/img/make_barcodes.sh @@ -0,0 +1,194 @@ +#!/bin/sh + +barcode -t 2x7+40+40 -m 50x30 -p "210x297mm" -e code128b -n > barcodes_actions_barcode.ps << BARCODES +O-CMD.MAIN-MENU +O-CMD.DISCARD +O-BTN.validate +O-CMD.cancel +O-BTN.print-op +O-BTN.print-slip +O-BTN.pack +O-BTN.scrap +O-BTN.record-components +O-CMD.PREV +O-CMD.NEXT +O-CMD.PAGER-FIRST +O-CMD.PAGER-LAST +O-BTN.return +BARCODES + +cat > barcodes_actions_header.ps << HEADER +/showTitle { /Helvetica findfont 12 scalefont setfont moveto show } def +(MAIN MENU) 89 768 showTitle +(DISCARD) 348 768 showTitle +(VALIDATE) 89 660 showTitle +(CANCEL) 348 660 showTitle +(PRINT PICKING OPERATION) 89 551 showTitle +(PRINT DELIVERY SLIP) 348 551 showTitle +(PUT IN PACK) 89 444 showTitle +(SCRAP) 348 444 showTitle +(RECORD COMPONENTS) 89 337 showTitle +(PREVIOUS PAGE) 348 337 showTitle +(NEXT PAGE) 89 230 showTitle +(FIRST PAGE) 348 230 showTitle +(LAST PAGE) 89 123 showTitle +(RETURN) 348 123 showTitle + +HEADER + +cat barcodes_actions_header.ps barcodes_actions_barcode.ps | ps2pdf - - > barcodes_actions.pdf +rm barcodes_actions_header.ps barcodes_actions_barcode.ps + +# pg 1 of demo barcodes due to ps headers being restricted to 1 page. Some blanks may exist due to flows having a rows with less than 3 barcodes. +barcode -t 3x7+20+35 -m 25x30 -p "210x297mm" -e code128b -n > barcodes_demo_barcode_pg_1.ps << BARCODES +WH-RECEIPTS +601647855638 +O-BTN.validate +WH/OUT/00005 +601647855644 +O-BTN.validate +WH-RECEIPTS +601647855640 +601647855631 +LOT-000002 +LOT-000003 +O-BTN.validate +WH-STOCK +601647855649 +2601892 +O-BTN.validate + + +WH-RECEIPTS +601647855650 +O-BTN.pack +BARCODES + +# blank lines included for easier visual matching to barcode spacing +cat > barcodes_demo_header_pg_1.ps << HEADER +/showLabel { /Helvetica findfont 14 scalefont setfont moveto show } def +/showTitle { /Helvetica findfont 11 scalefont setfont moveto show } def +/showCode { /Helvetica findfont 8 scalefont setfont moveto show } def +/showFooter { /Helvetica findfont 8 scalefont setfont moveto show } def +(Receive products in stock) 45 797 showLabel +(YourCompany Receipts) 45 777 showTitle +(WH-RECEIPTS) 85 718 showCode +(Desk Stand with Screen) 230 777 showTitle +(601647855638) 271 718 showCode +(Validate) 415 777 showTitle +(O-BTN.validate) 456 718 showCode +(Deliver products to your customers) 45 687 showLabel +(WH/OUT/00005) 45 667 showTitle +(WH/OUT/00005) 85 608 showCode +(Desk Combination) 230 667 showTitle +(601647855644) 271 608 showCode +(Validate) 415 667 showTitle +(O-BTN.validate) 456 608 showCode +(Receive products tracked by lot number (activate Lots & Serial Numbers)) 45 577 showLabel +(YourCompany Receipts) 45 557 showTitle +(WH-RECEIPTS) 85 498 showCode +(Corner Desk Black) 230 557 showTitle +(601647855640) 271 498 showCode +(Cable Management Box) 415 557 showTitle +(601647855631) 456 498 showCode +(LOT-000002) 45 447 showTitle +(LOT-000002) 85 388 showCode +(LOT-000003) 230 447 showTitle +(LOT-000003) 271 388 showCode +(Validate) 415 447 showTitle +(O-BTN.validate) 456 388 showCode +(Internal transfer (activate Storage Locations)) 45 357 showLabel +(WH/Stock) 45 337 showTitle +(WH-STOCK) 85 278 showCode +(Pedal Bin) 230 337 showTitle +(601647855649) 271 278 showCode +(WH/Stock/Shelf1) 415 337 showTitle +(2601892) 456 278 showCode +(Validate) 45 227 showTitle +(O-BTN.validate) 85 168 showCode + + +(Put in Pack (activate Packages)) 45 137 showLabel +(YourCompany Receipts) 45 117 showTitle +(WH-RECEIPTS) 85 58 showCode +(Large Cabinet) 230 117 showTitle +(601647855650) 271 58 showCode +(Put in Pack) 415 117 showTitle +(O-BTN.pack) 456 58 showCode + +(Don't have any barcode scanner? Right click on your screen > Inspect > Console and type the following command:) 45 35 showFooter +( odoo.__WOWL_DEBUG__.root.env.services.barcode.bus.trigger("barcode_scanned", {barcode:"setyourbarcodehere"})) 45 25 showFooter +(and replace "setyourbarcodehere" by the barcode you would like to scan OR use our mobile app.) 45 15 showFooter +HEADER + +# pg 2 of demo barcodes. Some blanks may exist due to flows having a rows with less than 3 barcodes. +barcode -t 3x7+20+35 -m 25x30 -p "210x297mm" -e code128b -n > barcodes_demo_barcode_pg_2.ps << BARCODES +O-BTN.validate + + +BATCH/00002 +601647855637 +601647855651 +601647855635 +O-BTN.validate + +BATCH/00001 +601647855652 +CLUSTER-PACK-1 +601647855653 +CLUSTER-PACK-1 +601647855651 +CLUSTER-PACK-2 +O-BTN.validate + +BARCODES + +cat > barcodes_demo_header_pg_2.ps << HEADER +/showLabel { /Helvetica findfont 14 scalefont setfont moveto show } def +/showTitle { /Helvetica findfont 11 scalefont setfont moveto show } def +/showCode { /Helvetica findfont 8 scalefont setfont moveto show } def +/showFooter { /Helvetica findfont 8 scalefont setfont moveto show } def +(Validate) 45 777 showTitle +(O-BTN.validate) 85 718 showCode + + +(Batch picking (activate Batch Pickings)) 45 687 showLabel +(BATCH/00002) 45 667 showTitle +(BATCH/00002) 85 608 showCode +(Large Meeting Table) 230 667 showTitle +(601647855637) 271 608 showCode +(Four Person Desk) 415 667 showTitle +(601647855651) 456 608 showCode +(Three-Seat Sofa) 45 557 showTitle +(601647855635) 85 498 showCode +(Validate) 230 557 showTitle +(O-BTN.validate) 271 498 showCode + +(Batch picking with cluster pickings (activate Batch Pickings and Packages)) 45 467 showLabel +(BATCH/00001) 45 447 showTitle +(BATCH/00001) 85 388 showCode +(Cabinet with Doors) 230 447 showTitle +(601647855652) 271 388 showCode +(CLUSTER-PACK-1) 415 447 showTitle +(CLUSTER-PACK-1) 456 388 showCode +(Acoustic Bloc Screens) 45 337 showTitle +(601647855653) 85 278 showCode +(CLUSTER-PACK-1) 230 337 showTitle +(CLUSTER-PACK-1) 271 278 showCode +(Four Person Desk) 415 337 showTitle +(601647855651) 456 278 showCode +(CLUSTER-PACK-2) 45 227 showTitle +(CLUSTER-PACK-2) 85 168 showCode +(Validate) 230 227 showTitle +(O-BTN.validate) 271 168 showCode + +(Don't have any barcode scanner? Right click on your screen > Inspect > Console and type the following command:) 45 35 showFooter +( odoo.__WOWL_DEBUG__.root.env.services.barcode.bus.trigger("barcode_scanned", {barcode:"setyourbarcodehere"})) 45 25 showFooter +(and replace "setyourbarcodehere" by the barcode you would like to scan OR use our mobile app.) 45 15 showFooter +HEADER + +cat barcodes_demo_header_pg_1.ps barcodes_demo_barcode_pg_1.ps barcodes_demo_header_pg_2.ps barcodes_demo_barcode_pg_2.ps | ps2pdf - - > barcodes_demo.pdf +rm barcodes_demo_header_pg_1.ps barcodes_demo_barcode_pg_1.ps +rm barcodes_demo_header_pg_2.ps barcodes_demo_barcode_pg_2.ps + +python3 make_barcodes.py diff --git a/stock_barcode/static/src/audio/error.mp3 b/stock_barcode/static/src/audio/error.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..451ef4fec0e939f14ce9cb6a28b58ee807e60e1d GIT binary patch literal 33600 zcmdSAi(eAyA3r+Wk&A+g;vF%skb;_;xrv5mrDbVEW;x&`Ew{9+v~?2%@orjaSXOFg zW>#qJX04lmVy0Hwy{#=TX|>hnrERq(=ZxRqd7anmod4j=z%cX7Gdj<_KhNj-9%$xG z0s!!k0MH@<00|mEYzBb9<$*cjK@lNd?pzLM|MFZYx1Gvk}l|bw@#nqOm2)FU30glTXVQ% z)&YX%eRscq|LMfEeU+I7kE){3v%=EjAPDL@G7u;P6YL#-!{PFR2BK}e1~Q!Cc4+R) z+;>OE!&Drih?Go^_C{|LofTo<3mX?sLeMwu>3NH{b8k;Egpug9?Z|L7hjJSrv0vWT z^{xm{wOLBG{`dd%gywGt8b&TurnH;;Dbf+Z?9C^&iB))1vwllShB zg(dO-?*G4^&%biMK{IdokfYeT0dY4K2pd?Mj5*l^tUW|OWc~duG(UG-^ykq$35kw4 z2oz{?6@KV=XyNKh7kL!QiTQ}^jm5>=iq6Nyt;?_|{vT8~2Bzch!ic3aPlqdrz?7^;n zlv|m)YgqN08vg`K!V%X^-FF`UH%Q%^Tg$0UMkoM~!Ppu`XCu+FGhZGCo%`}$;zC*_ zNj5|x02eySkO=5_01_n`G=W~l2FpD0o=D;mULrMlGX<2SrQ#6kZg6m%r>-r(3W^4= zK;K9oGAv`gcbrgeu5IP1cm*y9o{EDvB_g_OQ3wtR1E?brQe-w;vBl^x1kLRE@0SR_ z$8sTX839k>+PJBjd9pR~+>19FcU}F3mMHt!=?5 z@SMFpUv`(?^X;5Z%|yz{)RWlT1}16kyc?Qw+p&z@f&3UO%|b%2>iM4JKi?7myIpjad^zh7i}{f=Ckhetb}?5{oIQ4 z_J~|%6*&y}xvObMt z(d$1rPRAZ|lq{ti0w@GE>Ggh)~{ zr=7b-zjdQpkf!39Y`b=Fb1hGKC)NRd42=vcIi++eII*>5=`mp2uPOugr>DJ7ftOkc zXV$qP7x3j;-nk!z{uBUsADzBX_*@Ab<3IOo$JU!ZJCrM1ZLi4nE_f`iVcqt(^FN*J zQ0m_Md?UXP*?n;dUTpIeD&QGb$9d{b`TvfveN^vu^4blLyx#@4I+`ng-~JW-@apPq zmoqN!`|s;vx4JW95s&XCMKtVW{`Sp1nmm+ov)lP@bLm|xL&4{y=^y%|u~{9jZ+-nK zB?p>2cOpkWo%QqeH&8!x5}N#1->b{&Xp8thF#|#0=U#Mf=vJ%cfy>+@66W#~Ts&8= z@uyo{+EU78Tr{dXbmC!*ec@r>>ihSr)+6h{NM4rka0E8f{al}RHp`^flx`k*o3x~u zV}|c$dUZz^5av8%efN9WqF!4pI`6y&S;3p@qJ?Q~`KL2I(@!klX4yb>Jhg;f9{gqI z%<+ga!*wOoEAKTuk17)>Oke4s zK&w{1s5hYeML}@QWs6yR-_pZid=sLqcc6mnQpC@ep8c9#|Kdf-w4*os!)q@9D;+BJ z_sFxcPVpH?n|-Pm=axygG>y4m>AAJUa{JoW@`Powv)5^cV_wuhM9S(URC~Xt7l(F8 z48|)b{GkgUzFj;xzw@Nq&gSIiBDd7GiO!RYM-dUJ&qJOp@%E)SLC{H$=IbZsu0YVF zy+jIXP}W3D2`L#uU~*9?jgj6OO<^$7hiikY=?woX{$4)&|0<%;YtvjXT+%FJ%V5|^ z`6@+2LwtPFAwYS!utiT9DL!a<}%_ABz=YfqhQ z9{j_vvi|0>wV3#}3^xC#%}WLI@2{M^8?o!uFN)vJNBp?*&dv9+S9}W}{(61u(;Yhn zGg+^9?ELHT&g*L*cNB1j6%G||z*i7`gDXYUdAvKV4}!)Yp6`U_HqFJ&t=|nn{@eV2 zHkl0$CtwYlhnmA9`n{BW+Vqxt8VtLMEs z-(EF-KY-+%EYW9W-^q0?UL+1va5>_jx~TK$X2KkuzWE;~i)zi&JN6X0-`jNxO^l1n zM!>Os@t39RLPZ5{NuliZP9FBunKvIiv4ocq5$#%y@sl?RZf4$X_be0W+UhUf!ybPf zm?$#-&uLCx77^O?Tk!jsUG_id9_&0GJ=8e*zDZftJd^RK(^0QqF0MPe7y2)%>i&bj zTAn;^TD{_D;iZV_%g#a9OvLq_Y(HUi^d3%~Bh$2XiS5esZ?hg$)4!(uTQ)lN)2aKm z_uqQWJ-nSW*LAzhE@02rW$v?IJ=WcO>s-9=$)%i6$L_fKEgvGWNgC``!(Y582ms0_6ax%@Oy1_Z;y0gKjNK-#&K$4YyP^Goxz`*4 zI(pT=IGT)vx7Nm%CYXl#Ju7@6@I19BNHLmmN|9L=SF0*O zHay7fAHGtoCJYE0B?AsN@GqDX?^Ypo}X>;o3u(3N0&Cj4a z32~MsgQ2ypK=#ZG^v~Xvzj<%GaB2T9d#*Phmwln`=Ss!y5?GE^c}i~4e>{`_2561-3b|x?YT4KLpA$LZa{By+}Gvw6?+an+t$~Q zD<5@STR|89sAeElQZPJm{Zg%&6JTQj?iYg+KfV~0p6DLNNScwg2#}>jf;c5oG$O}H&IAib z>8tgsY1Op) zfHHFP;j`7{v%K^5b$J#|F9gw_wl-HvehI?k(~#%849$h^DwGF_vo%M0K0=1f4k4&Qkf>P_EHlA$j&mJw+O&FTZo<&F~m)&ojUAhzUFBku{h*PS1atP9%Ti!@06 zD{FBsrsQ{f1Klxp(MN28TSZ`Y|l-RaCB`9J?@Y zk)n<|e|L5G_6H$c6Iz&NF#gCd4^zAOK5r3|Q+&eXpO3kFp6A>DN`JJY*alf|81#1g2L3x4ORQ$L)7Y69nTP6ecW8NIKE z0_QXSoEtj>or=jdb|oA%r>j`U81&Yl*i=(S1;z0X2g8`L9|EEcx=aJOi%2QFS}<)= zq6Y83!}o<p7w$ez9o(c7d9Ype&GSY4LVsg&EoE1?QG;A(^X?n7}I z2zi*$;-|6|jp!twIm6I&SKa2_P!*BTAN{7~r$;F?YOGfKXnbwpW8dZtt!5YIAIJQP zQ7u+qRjU9y=}y21u^ZWIwj8k49dgT|<%LJnxSMF{u^Z8Uv8DuWy7jSw;h0Ib6n4X; ze^5JNIh$=Mx~;fE3vOAGAn?0L7P>*Y1VKn#5!SbJ_D`#qyXoverM^+w8(y<8fB&>h zLNJnkZ0%jLV%i1x?20e&RPM*oq~m#!x{*xXKarQ#voVckc?D)zV#yj3>DiHf=-Ko!n;z)N4Mk1BaJ=mmM0*@?V$DYUzfd{Rapli(VSE_`9#oXj;En6mT z`P=Z{3C(E50jgUpv&y^@cg`0AM} zWbtcggm#)Lq;4M8wR3W0INt3tXr5|Kwb95H#tV!hF6!doq3b!Ceelo7zT6M6SKhUe zjVc7aKEWn`_>h)J4A$aT&w&5J}a}YmaPCYZsY!Zy_qE!s5*0f`*V$4+zrw zkUEF^p;_2I#j!W1D`$kh1uH4ZCPPu#U|4She}K7gU?5M&b%7}lUsHU{211fOnP4H z6*}paq*3HL-J<$pEm7V(C%r;*oraT25hr~$3iVwp_3biL#@{3xnGFgztbxI_(=+|( z0rcfmn^}GuCykQ>X`SGHBPP7AIA|Vg%AiL|)SWQ6&}6FBJRKHyNISBTj|C^w%WjAI z+bC7|5>y=w-4yQWZGZQQM{R{B zMcrd2M{?K(XuWT8MHYIWT=c2M=(3`L{7030Y$hLVmnuv z-1YwqgHke?FzcD-nS;NFzlU9iWlGQTsi9Q(OA5g{$f#iQkc^rmt>=?Mv@Ux3VSK%w zUO={Gh#5s5S{Dd)W|`KjbKwEN3)TQ->^x7R&QmEQ%Kuj(|KEDKxtWDi`t6Ue8#-k^ zk>PKKIW6=sv%)6YoZufA2dCA3182`RZw$W`=Q#tm2*pF9Vunr%(zl_B2;`kMG_g{q z*9?F5V)(V#O&HqH18fC`Y*gRvL`gbm9j{7{SpoH9qi`tcacms0X84&uSvKoK0=8&B zXg|zyU(4gVNMu{h{Q?0s4^t4o~*{$Hs!J8xb#48$A+SW`FGTZ5*z;qv_v&vhz$+^`H()3}ApvDBB}M3CFS)41DM>(-@dIUhYjH8+`GBt6 zuy6MSBg&+DjdyDX5yg=fmvqOHv{Fz!`T#*9R~&nwD-Mf^=a}ne%Jv&65fyAG zPhCGO)~Z#;z1Lp9GmDAhnzPK2N~haU?fR5r+xJfjHE?6F9?E-jjEG%mws&vG!74G z1;J#%C5lj^&6`%8j^RJ&H9TX9acn{CwOc3cG-dLwlkx2NlQ&;-=INPRcTd8QzvSpSuSXPlPl;FN znP;f!<|AqKF3eF^>Tc?KGbm4+d65=sWMj$OpA=<3{&r%SC;j7oA$;7sFn_;Um%cCt z_D0qFZP?EM#vKaw&RbODLKC;qWF@w+Oco6&e*cC3ZhsOly&5rLdC6o3T;;Il6{)N@$@IN&}=)f_Y zf4H?Fim2`hWRr-9gy*pFol6PqUyY$7j!5DOsb)tZl&v3gImwn}qrQC;YdB)g(>&v6 z@()pMCU4IAkg=L}q&e|29lSZ&mG@NpA@2$C68^p%^n`_7=8RXD%GegczVkTo|7Y@2 ztE#d@gMZo(`bjEP>x#E4=C`LR`g#R66Sn(P&u?EbFAQSmR1VT=s{+fUKugWgP)SXV z3J*%ojORYkq`Wq>5T$HR0ag9PoB`FfOHZ(Dne-8+gSl8*W{dU9hVRg0uPF)%p&NP|q8p$X5Vm0b#Uc^gU`y6>N z1fd8f>W63u-qj_ccq=xgZz}5ESafA}M{lz(j^sQ1EKmjx!?;7*50Jvrd`pqK1=0&J z!e%^yo_!5$dtTAj6Y8L(tX;r&(i-ufF=E%Xa$nTiMZm-bym;@b3Q6O=<{DmEf@mqY z7L2r)qIDAc!h(qw6PuxzN#(AE@^OiMML`c5sjMLgoH;J$18dPNWTliuKrer$?1n|U z=ApCS`wo?<7Q;rf@CP$a%U@5J+Q*7jd7=nTuu5TSpSNyYk|)Y0F=9!KNRa0}m200? z5dOdCAcg}>IRy3j@d2?VbmTEV$FAv-pvWZp^jVcEo0gts8 z$+2!-f}$2dAgrIMLFNl;8p2|>@avD_9m%Z_w~28-XfL{LfRgT;SnvdOb(Op)cZa8_ z;zosTq69(r3s3Zw7HGQcIpXeDI!4ol26O3gi@Ecx+VvpVgDGhzeW3^G8jUGJcOPTz zHBZ%1_Y7})F9UaW&dI@5u-!2km#+ZvEJAcfh(wj9v>XB6U**T_{z43iWcsI8%D<&T zO`1GRWx;V$TjzXiqWP+I{{(=;h$99?zoAev)G_G7i8E1JMh@&9_h!j96}1Z7awpm? zfLw92<+UYARHHXdB50oc3p@X4UInD})d#eTTUVSmSqF`7g618Aca92x(s`%OS>bI6 zDvYG?06+SIeunIp%u#^7dv+~bGrc%^qV^>P45mud*x&I8IQ5A_@P>neirgCw9O#pm z!6~Uw7#d=TrQ=@(pgdQ+(@9M5grHsr;0W)saW+06Iq10A`5(*q*8RIU=HW}l56y^_ zN*4O0Q_NBsAHx>9)~h?`EmA!Y!jX&6+rXlGE?hu9xH|{3>V%D$n_jTO0xIg%d%*TyVQGL50yp~* zvDkGr32Mb!d_wm`*;=qQX%PP-kSB>kW7x=Q?$X0XuA00!r9Brk)iB{83J!JNXmk4! zVNF7~!(48z^_EpfbLk9wPR-I9hhOh0JU zrb4xws;YgWwnNaM%e4a9d)3K62>K*cA-DjbM$%SWBci2hyB(!bk3Aa=5lgZcr~RVS zq{W)2XKyth{j4{s5DI9zIP_;4W|v!0{VliLbO`;%S}Aua>AU!Iii!6(H7Y+Q4jqb@ zPnhH@+)6_v1u80ZGVFn}n@SI*&K--ln}e^G2U&o=Ug=!VMTO9`raghTO9+6xoHOx? zwD&deo|59UXx*Ifs4?SGy6{Nra-qq%IH22|wN1>YOEKcr-C5u&VQy>SI2ew2pf*+` zRgRM7+j(XHO$yIqo*Uv=1phlaDK3WwT_-GZ-IUAx@(`PL+x!3@@d>tf@6hZjf z_=QQ|<7^&GfP*gIFb_8g8+NBklFT<-xOv7Sg{H@Z z7*IxrP10quO#7ib8a)_V@5UT<>fXlGhs-nEi}0#qF`KC@p6pt{S8Y#&DA>K8wZT_m zd_TJkbde`ht;ws1TfN7XsWJ_LNZGRG15FD3a>QuPxBr@+9RYv zQl1u#&%?`QCWza3oDGM=W*SrRBs{j7!(sf-NRk*r&LYmB=Uh+;^25kJRjQ2)yg%w@ zPC#M`RK>#@&}CDeR?He@Gu0Y!(ImY!m{rge>%@eg?`aa7zRNsro}MP!t>-KV%4|zE z6W9nRBRA7F2IJ8Nggi^mdQtMkX5a!(Jjl(Yl@IJC>mPNaNeR}swZ+&F>DaPF&hX58 ze|!L^Zj5NlvSYz20uItZ(>qdvCfw9S-%_I@#B6wADZH5qD}}s9meEqHt_s6x)o0Gv zD1Squ96_X}o1&(r#Rvkv1+#$f0h>GDO`CW9*cfnj8phY@5qzIy8Soi|9U0QFL8eHm zI*|7StI?y`n1js!>lQ&BgCJ&2Qn8f4{x{DKy6UU=!)mvYKtw z^GAt-o~w?G)qvf2Pm6>k1VXIV$7DR`#F}&2iC+4HkSa}QPoY1vb$H% z<{s8$F-=1uc|AB(F7G|#-qG#-;W0e;!Zj%3!}vk=wGjpWB}Z*Im};}&1HsXXgUDPu z7nC;Ho{5hv9`)!J!2WDl@krX};!zKxqTp9%E-Veqy0m)MLR-OgY7h<1Kxd0Gvb%a%I!}ucD$UPvp@UzD!0v^;fZwxq}a8B$0 z+p4|=`zx}3K4*DwN5r*&F*v{Rs$p=hZ4ew9+13Bu*h=}5WN5KIiTv)*+mkvEtK5{H zzJjpy+C#kJ&}jcK4(eVYrS5G>OWqhK1}F5_dlw@fv?lmRd(3V_{^ic}>PhY}FOSl_ zyYYmx)~h=i%ed?{?-1BkywPWpci)Qltl)&{JoDnIC;o^Gm!RA z-jX&VLcSxY|0vkbN3IQj6UOAl?s;NPMGibf$Sz-$>EWSy-@J04o-e!7g=nl>{<|CU{aw)Lgt=#fbGhu0 z72~DV8A!hy(pMhoI8Z+4>Zrf@lRkr3Bi<8R1uX>e>gN4fG_*s$);M&ZM) zod>E>IIj9wB4@ebj`{Qavz>pmorZQaXYuBZ1{sAx=JqM9+=-yivTfPlKSRZ5eJp#x zYnT^`@?SFV>Z8MUTH&^N?VJ6}yG+)y-R$*LO(^%|=%J-yiSbXTK0vm4ozqt;|EucH zIh->Wc6j^@bT}NbWB}OMW?5(;>?<_Gks1Q-A5qt1_ZS~u?A>f;NbnA+GuT|IknxVF z`u`fpM3V%+3)b%=rC_Wr>l-7k?m>1u)*+(rZh3G`Wwp__8~5hs&;0I1`TA`diuWFg z%58rWJ~zw4qixBP(S~#(>-?Mh$A9J9LfJ2T{~La;+-ZPKPYTxF&l=jwao%Y*{?@lqbvYTdT->fU()Rdvlz3%Uv9)afW zpPJ^*LF3TuXZFl%=r|1@=;h$B($i;!$r>{xQJI#WZ==i!%Ez5_91*6`RVp#Y-0Nza zYRu?8C%~WMXUO?0#Pf?G=MgUEVh9oy>?&2~Q~@(6^_c&PHrTTXpa+mLXE~YtG^^Ih z0GZ^rAsk9lHEGhc*n3}$zpVMqM4;ccxuSK(C)-r&Ji2*Y!S=ufv+7yqr!`fL@ z@QSeJu~t|a_)OGgM7%=0Y#t}^92BLxcaG#wK5i8*lm-c{LK+-o2e-M6Uev>>I0&LC zcf1r}5|*T0)CnxxEU#@ObdIHQgs)5~FXw%4`DX79{S4XlZZNTvKgzM^!a@$&6>Ol< zg3o$ka?5Ucv5fM9LT!yKerJo`w1Q?-44&BZj5ph#5N|;pC=2B(v+Z|*s`a_=Lw8#! zBO`e?Ko>VNQBYz$^sag5ioeo|>X3ERcP$imI7(O5tEV*8mV+^@3w@=^$Vq;3u_UkH z8hIx*vVA=*uS@I#+t+Mnt}8XUD6b3Ch5wZ~x|k|58+BP|bz_dYFk4MWT_Ixr6pb1l z!ruhPUuMv3tY1-PQ8PzUV;#=*Q|fdp%yWszF~X^mzxR9Hux@cl*tZIF5#ZUxfhGf1 zv<2NQOS|SE*oO?Yf^h<|tfEg1oz%xWdY*CEb^u>UTo+A^qm=!7Hata}K`> zygh9eoO9&NbabWlbnJ0`rDNcoJ+W$g6o5xFQH2&n;4>$y98Ln_8c1aruP~*$Huymm za=g*Iu)Jk|()#DZG3x-8-xb$9f`9@C(as!c^p9%;RP5(%+~7)vJhx%Tr^sG}A@(HZ z@NjD4xrj4J4)52Dd%w?Y4-xevj)c?{H8s=3ZKzzg(N-NuM{L#!FY019igS@~N=I(` zj_vUsm0GJ1plK{pH{QL;Yfi$*;bc7+rWpvn+Ez&+ScIat(~uv}nDr3=>0gYvg#YXt;@MjRf{FKG++`q02i9TEqZ2J;VkxF;1wPkv1SJQ@h401vn%n>E*spZsqx|~ zMfzx3YurdOI%ol3ofY>!0oeQFHtyJ3Q()q+fQ&duzissM)K61;N0N2-bt6B`o7JXs ztnE1kllse1RJ^`5Bjw*i83`e|9-hN8yaz{e^ya!{*Jf_s^z?LKI(Yhf-imT2u!x@N zu%-044$Vzd&F}+!o^|l{dZ%zEnZly7P1FMdp6IZ&pqr<$X3GO6NhW#axN^3fEn$~Y z@wj8`0usa7$S+HF&o*)IJQkTb5uvyAz&UyT5&SZ)9qRgY9WQPOGwhF1RUsM=BKr-T_0g;)W?pOuM6PQ+` z)rzwj1bCNtSlsjbAlRm!!7p8_1!_174p?!9O$@7}JR-<`M-Dt2{djiSvGJdVhh3k! zrX|+ucEP!q+M;#uoHm8Oee~(n)%^R<)v*O_xVyTrdq0hQK5^>eZhe6lHK@aHti(N@ z^WGx&^2*#t{&{`w;x|b)Y!9f5_g+!%6tLY21G}s~{?K9GTTIQt#66nNm9TLeZ|kh8 zoN|LIE1{|d|C#^U=AVW68&R}up}sJ2;$>DYD#_AcIgq`h{f<)7NJ7%vn-e!ukClh= z&?kfi-qQ8uASkR6U7IT^ow)D2M66D}?;g)G#uOK!L&x0ty4!SvaY>`&s$Z{hC^t3H zit?r)Qv%9ly(&$%v4Q=Oy{;dPC|qIu%clN6YC|M@#|Q3JKmB!szUkS+F=Ps@|6d3i zW#Uby|2!Y__dix!i+{g*@bluKLoc{L_x~+8^TOlTM60zqbEa@9*k$*M%yeSzmskS> z%OCQlZd2ise(o2`?tJ~b-)lV5Ge{Nox`9|7G$pqSwdGWsh0?PN=Q&XCv`6ooZRQ?x zrp5E2^u+%shq-a%jDLdH)wAENxUFzO%-M+(9iMW4N!^&;7W{HHrV6Pw8aTlo)kM@; zwGb!~cRDJc(N!L~g z)-#Q~D-at!gQsZoSZf95{fNLnE`TUObm{twQ1iyH$Cch8a$$%ZE(pR!K{+)w1ib|= z5>ex*y!JTiA!bd8JkkN|pE9GyO>G(uz{E`nX>mGnph4}4!}IQ9^ZDSzZy4Y01M=p5 z1EErwu>B@s&@$vc9@xDh)pN^g7~el$>USwAW#TkfDH&_|P?>yg0%KB54+l3al}RTI zx6%Eqtx?evRG_-f49;A_F{mY(rWo+HT$Y)tksjgPaFjZj*s+XYb!3#_1;=HRFcC(b zCCsTp4frkVr=E+?nHO$gSw-i8$+-z-JtSQPrmDF;|(!+EiG`l)RT?jP|zHT6N@=e zUPDUsAa%qHyt4>TG%QKvmwsFn{x0C&y#c>>U0wag7||=Z7&>$I_xE14)0&}E`4)p& z`KRcaS@|~ALqn%d*^H0$+E~DQ`E&WND)Y4tliWGpbQ#tNYcw2xTZTigly8;(W=*o2 z<)rZs$X71346CK4BNP=!x)7ab(CD>9SI)E8A;Q^N3L)V0C=1aSNBKaHk16g3l0=|$<$^`&8 zkdd_1vQ7_tUi66bZW-r?kDP!C@9%+ZTqsW3gF{SYNxHksZfOP8p4N+NJ0 zH`ysqU8^lI$!@WN2AWoU9-vC1)sZ#>ROvHyG=`wDRvEs6{~lQvG%p~}gRksDz*pX_ zw3^l8Eu)K334&z(HtYt#g$DG@hHj*-sVk>v-%-t^>88L*>Ax_jQY->GdRcthI^`YA9+> z09VKfXEKiIHVtnwvpCcF zxs1CHGgN%~E-Pg!e*xdG)~6260|$<|`;Be@fWOc4E!wTBP#dP4+yaCP_7LZRog6NQnL{EG|D zJV#S>2&Q1d$A!^{>}0ie1>2a9xtSfh@fGHkq}?1ApZ+pcxa;H|ab{5K0M+@4l^J$C z$&0EidbFL(r~gU$v1go;!Ce9$ zHhEx|55#SMc8MaiI7?$Eqj)1kv^R3eItq4C*&30)pF7(H2nj@Gj6Xfb-;5H! zfbXo;`{;RK&(Zp&_4P2mTVTYZJRY0aARn|IQ%`>E*}%UYyGUhbN%E)vWk!!NGs8s% z<*zW5jG{s%G4HGNU}3vkNyahxP_!{LJvpl zQlrst1Td-|g#GdZ0Dk|1`N{>>hTAV$$_VzQ??xhsUJPVFV2B3;Nl z9*a>~9-cez|4q^tbk-F+;A6>htyJ`N8_iJAsKB}ht+)Y8SUH=PSYeBS=Q3~z{(wQA z63Ax~*7|`1JPM(kQcx?J1Xb;k-0jlb?&y$Ob$I~~jP!f2)+VFYnleqa_CeA#jx>Nt zp_`eLn8T^}fx66Md@bILISF&E3Tk6HMR3})l?KylRYe82n9{T%*qti4(j6PJoY`sy z2jPd{1n4d1E#^oXG-U>RVY`?LoOHs*yb(vr_p@>GJmQ4Ig)Z=^7V!OUeK%GQ?7fz; zwC#rl``b~WIHXjB;3sa<6y93%&y!c?PGb;1NIAX zb7i*^rQ548dE$pMoA7sR7Fn6xAZn`ymrPiNRx0|D5B+EF)h>o+%xnnvF8oTsx=8nI zeo#OlJPL9Mhs`W9r&1ao9?Ej4l;*&EL|0`0T4_jQ#NjUlWM2Q;lT3Fw{m_hyW{$F{ zwN#j6))B&Vr72rNqOnCR=4C2=$Gc{l1k^=uEV^geu@T!sj$t7$(kcXQ?aeUn1?+NT zV@NJ5J(s?`FN}9PUDE8~$$hD9*rV%s5wv0%wZvs5r#4bsw}L<|IULBTdv>oo-od7* zw`Zlo;-wp`vq5;{Tm7s=Kx4tA$;Ooqmh~?a(k=)iRVz7luk|V#rzui5eAJC*=;Fam za~?3pbHdvDYV-b(I^B!gbFJ5yU7WD>v;ftQ3m@rP3SN2+;wq(3)K!uNH~Kwy1r}=b zKNG%hS=6?VQ9*RIxf9H^5%Pzyf;V>KcZ4egGYl2-T$+{)|d9r!|_pLv~gA~ z@cm*WpZjU$HP2(~6r3}M^SxpSIF~x1%F;twAdg!3T7`TLvoIZHT5n7K#i9-!Wrhy% z3P$riUF9L3QpGuzWqD5n*|aOf@>n0v#R}?2N1Y6L6IEINNK}t45Y;P+gf7-9OIJk^ z{4H2wFMQN!>5{ClWacF%U4@-&K4&Pjfitv%k6Jw5LEoauYbRYd8}@wJiFAbbJk*}A z;ICn zMqQ^d)sxQBLju#pIa*g}mUErgpS}xg_BS=IT(nC@JcPZ!U1l*^9KgIMvluM)BcJ&V z>!m4~j9-Sos$~!V@NhYGJIZ3j>=5?ecEr`{;hqEdtD2I}3m4pnU+2w%4nQFsw15-M z=a|L^2#uEvx^Pl0IkWzpV~;paJeR81`vx5Nu_(~$)GRP@GJM-{ zodjUC=HX6e;vh(d9W?$>fTV%#yP9_c)<1Um`)(>>KASt!uA6nO>xXjF z+;X6)C|Hp~^Ogg9Snw+XNc+HL9sND=ggk&b7Gyrq_>h}6{D>)5*XX*u(9-b64c_te zzKJoid3Y~}lNGC(-kVjj2GFWab-Fe+<$nB=yW^4z3hnvd*H+hf$Cn#O2#x+kIskyM zqU=jdtdqlSJ~mj->IfW3aZ{;V$|$GFEUE0o!H{;C^w$K- z4!URpUvwIpPS)(ffWxyt>{SHrd2-}>ku>IV@R@a2Lg-8T3Wj(1o7Ek1M$X2lEJi1n z+~b#s!saZkz_r8?2ZA<`wz9TmC9QoeaE^M~A=qo)gcp!Ad=38@ns?}282o4(+Y}pl zMwctUKQ{aLpKKMQdj5)KM7eFJ9-!e~rg3pgw&)H6In^8|mEgSC? zdGW1bfs-pC$rV<|g#RgJyUuYjqQKE$^Zbs5`72;-{yGgDNN@DLne`E_|2~?{6$7$~ zSNH|@o{Cm6Xa!DYd5vZPNpX3%1pZaX2P#$nu&QOZUgeYCoYdeGAD=TGzfEY#Ceuo7 z7l|&E=0H&O&I_BjSEuZT=Blb_RaL~*8j>kRv#RfoUPTb#L0IkQNj9kMg|0%6%G`NU zoh7y1M$(JhMUq;`!BCmUtf%x3Qth1)OPq6;Az3CPkL-h)rBCL`FmH5Wng1Wr8|sei zrUKnac}vg_At#scGhm`NOyCV|R2;fAv5lng%n!9G$pf=Mf6m8co*_Fp0f}Dc;7rB2 z__}5fs!rAvRHF$R^UWVv9>ZBrZ;_4X8i@2eaC7B&TcH_U^_O@kMW|A-*~HblMz*X9 za|>qGCaZMkqx_3u0vSwA)957W)j_)Wt2h)iU~R<0&4D)KdGCcVKSV|jc7nPD=r9RP zACg`SNg%-@MtNL!QIbsO5lDL?G1dDL}vG6FZ1@}1Y>ow$H+AR{FD3+z8{^UTeH=kH@v&+21cNpRBQ*nlvD3#wEZUUiTD z!Uea&+~ISwx+}Uo>2{?mMzENTEv1(%ZAylj!>ZS?$xUQD7shHedsH`4NNjW7St2Ri z-7MmW%DD;+6Se3y_#K0;n;Tlz3NY}i9!!|1vOXpInuK>Fr8ojF$M;~-ShPHNVa=w) z1i^L#Gjlw%-h&F7vf-*T>`S!6hPF$fxI`AR0JZ(a06`9HX(^A}`S=|p(X2onxUr~i z)97U?QHG=y7Xz{%PT$igxM>XCu#AiEdzAF1?UW=Ij&pJmz-Xpljfl!^GYS!pt@jM) zGr5$KfkRPkc#W2k?rj~u-ocHQqgSn6>i@B&MnDl53n(J{HqPX!TxoyHd5K?QIc^Lc}2PUgn} zMU;)K7?|-i9I!UzJf!rA+OCguq7qZ%keG*{cFY84L1r#vuPe2NtN%YPyK zLb8yG7KDgdOcl#|SI@iutGzFeY9igYtqg#ools(J%Xte0m>qVXYULT43?@s^Sxv`{v z1ERedA+yhQCQ3~~F9u=?(hVU28vQ9G@%qi;&d|{GBZN7tHPDk1pKA7APG&Dqnx%bQ z-cmGCT1`G8ZZL6w)vDymMoC3X91$ZZTz}Iluk%HtLe^pdHLwrz z)z<)HW%$<{O71Cnn$!)1Bo`Y!YY) zv=la&CEh|n=a@FYOZ|nhv@s`;cp_z#+|`Z~HRG5YG`ppF=bj_ZZi7FCZ;1>baF#CLoG(9^BH~PYW^1Ku6-Zfj-HCl(8 z{c4#jG=eKjYZr~Z9{;S-HTCOwW=0vZa07BPD3SJ20nQ$gFW*=N@jUyJtr&I#eJ|Z8 z;$fDvTr7>{@N-IgMK4K`V%E-eOU?@Y!KC$#=5W#{rzVlN58PhdbuwyUEGrA}h;NYE zM`7iBm#WaA2WYGuaydiP{O;{>1@tm05!H>V41Ta|{TIhicw;^Xm7o-uD7meLKYQ&SV_2A*gRh|}RqCfRMGE6H4Lvf-*x?@Sks=DNLPDQ{BGK{Y1xH5tucu4?$N_(_S$iz)9ye=%@d)V0A za~8@dTkGs&4Dj6$0$D=D0`Ewu1o9{Qhpo*-FPgeCHrwi?7WtkbLt9j%1KL= zI-MEYId8A|+`a@Et2>v-sV@iwwA&MhGvl+C7k5mo*h)T8W(&DI32Ubcu%*2n{_$4f z_<;nNA$!*KD;Pi#>{xKq$V1EZvcgIsO5rS*NP!EAH``iD1o@0gZwqc%{Ru?@*H=?5 zSn(rwy{!JknF#|hNm&5$T!T~`S8ua<#fMeFdNG$nEB7vW(e!FXNQ8O()vs&Yo;oBt z^(FuD{K-?Rt$+LySNZJ8Q_I9PZ=c*oYoFM=3msEG*eeamI47g(-~6KRFdkCYKQJ#Od@z9PDT*@*_W1-o z4LIoiSpF2L9N&#zyGh?o(|PK!EMM*|JZixVIwzC_2C;*V9<3DS2(jd&hHBboVHX>u z5xt#+u#Ll$?d?bY5~(-+lJMnZ+H<~P_pJ_ZAD^vFPsHC`Ka>O1#P?W@aF{4UC;*$i#kK{s2w!0yY(naCk zyV17>lcSI|ZTd4I^V!x%>>qkQB^moAko=M;tON=x$s{<+o$}1Rvg}ntR&B`gGG!L~ z8GCjAm(``1Jjt^k3~}S8qM6kyU#@7}v}^3r4VinDWdv6=Lxu!oe;*lDX0#xX(KC|7 zg8v>%(ZfpoNI639MOA1QipXlY4^7UB0s(g#^tc!kbAu4bD=G)EJ~XwR8gGOuCXz__ zBRDcH07n)EW2^+4nOvsxk1(f(Mx`vq;b-BsBs~&oo`5ExNglXN2v*1Q1RxTMnkunz z_6U>ObNz#E6?CRmtjZ^d16*#UbiYoBJTyRg3g+nrYt(nGEFio;3ue~8YdcR>;GNvh zx!^a1Q&WmL-ca4k84WzltEI0psS7%Hlu`#$_P1{3RhE3)Dv3Nf(!_4AERobTaiT~E zP?vCiKoHHH(4~VUJC2Ewqf~QhV%zdgO8g}UAc@Y}bx>Y3X7A`@;9vOBAVx4xdr2=C zpNr|R``YdO_oBPVN8$?3WCuH@X8*w#rS)neCrZBNbn$cvBXe$YA-d zae;LfdF7+v7Lrc@D6Fu~W-<(dPm{vQbiL(=;Sx#7;pIj3t%lf$-i}CFWdI&~AT^R! z5N{W6PZI@>*@IO9pZrl?QiYA|F(HQ93nOIu(pnaZ@-M5;zW>Bq= zIal8}L{+D(!$9hU6=sY_yB}Gdl4tgwR(flQvq{c9iFbWZ$*~F)1}{Y2J-wIRzt_y= z=Cel-0Xz9<*MJdryP*Ug4!WGcvqhshRNLJiY>2K? zJ$z`>5D0~_L8O%iV$K5~FHp!A!bQyX!6KNGWslmWAq|ZOVdY~zKGF8Y>%%I|x?k($ z(1VL*RUg?$Y%MTDI%-K^Vvbg-Q}qjiW-v3uiFOd|%Tfkkp=UtJbL)j8SBOyC$gaudU>sd$aT zx~gd=aq)ayFJ`rtiN-PeFJ*skh3vRVvs;=5Z#@aPw)5{Q|K*f?aVzK4HNT-&VeMZB ze{b5{K9$#gFCjX2@9EM_7v?BNdc>=RUD^dVJ>#=;RUg%Vrqs?8JpJ2{Ie&tQcZ0lW zTfd1<_RoVQ?Sf+*IRU3T*2V3`0DS%aGA$1Kh}}gz8+5;Z34|T;Ld5|9NH7P zo&baGfm8Wm_*;()#{KWt1`f;wVHk}$By=R#gD zB^*N>)V&#&!($qi;d=O^Mq(kC$5d~BF%iMwP8OrMH|y<_G(U5iD}`v38wBw~?0oGE z6j(P@uGCT(f(_vYQ^NETV64)du4Vy6C4Rr}vjp=hnV^;6j2Rvuen~Ob(6nXia0{eY ztiP0%*E03=j)b!E`9qrp=vhiRFCNV=*21YFQ}Hiw1|Ymq>_4Mr$*1cTOQ!!awi9cJ zp-q%DT>F7cCqs3Qp7(Ykc0N4ioL7mWTNZ4Sc#50&!>a^zVx1u?*fN=|Wo1JyWAG?? zGH=*h6D>m=u=~`_tu%C-;%eJ`dZ9!$@jmMn;1U?BOQt70^QsINZ4g~bjefwE zUC2O=b)JlpDTHuS*#f?IsGor+*!PiVee^q9p+Db*tk|{o_|F~@c%syDf%_yg0BbGe z6;}%ttf&;yv2eW>Y7NR$rr%EmJ3UZy0Q`JS1-U?=-7cCZxe{CnK)(!{H`)~`RUFvE z>ktQuB_Y^;Y^FFcpP(Q}LNfayX=cA%ozNqctU=-8S;Qp1!UeL`H*+0jSm{~$>7y75 zGcQ=6=K`Z>&gQx^Sg4+^hT<&TP+>Sly3T79n)1Au&`9djZp@Cfbx6wP_-n&0gw!AGF)f_g_qLJ^*pK8Nm$a zkhXV$8e{y!2a>@qZVye*17bRD8N$Z-SLhe#ki|&**2pfmUdP{u!5L z4X*M=eV@bqHE8E-o}5>KH4lZ?Gu*=3F;-C*%No5Lu*PfFCWVb?G)i$MOC_HUL^IDW zS*wNi)w{^@f5rP!d=xKzA4LhjdMDTsj=`K-U0rfd0+|XVE!LCU?nL{s1v}TNJFx7e z_Rh^-=XQT!uPLD&(2g6rdD)dba%$<3Fu9+lIW{0|#IeG@F1305(8Hpu*0=P1pqbWp_I6Nx7Y<8qKTE z_t+tcJp1N=#7bhHU!Q*#D_NCa&(Acff?C_nNOK_3P9O==`lgnZw2y$C$wL2|wP?t8 z0{Xr}vn4G z$Cf9hd^MgoXJJyqK~10_3KoRmR6H%58H7~wyfAp?EL6l)j!?WYcq->T1u8<-;6*qH zWa58-fO(^jC11GOB6|}t2js28X4Fp_`Wdn;(&%E(_C$cZ%4E*Ur+v8d{J5ccNMnR^ zb)d9ytN-WbqZ4g$RceiGag-};wxQ$-d%G&Ny(MYu`k(j<3RZLD!?{sO3~r{~4a!Y) zznm?dl&9|RMZ(yRSW0;@&wI=V>Wrw`Vf~I@Osmu1ckz|lh)Kr{ZOp1&m$IBM` zT!|^2{tj~^#)vkmquOPp7=}~Z&wTs+rN9yXp=7B2Sm72DGTz7QIDcO98 zSNXdBC3W+J4c^i<&;v3!1FojM(cp%1o0oxd8}4`?^gyzMdvyU{ft}6$ZYb|+BmL&k zOK9RXUgA3XK;kL~M}@>6#jNE#5QHRd)_xg(6gLdcA~ngNYsN%rGdP!*L6;rqeQMQJ zNrz(U(lip;^xhG4%dI~3oD;9JHa*XH^DJtg@w0vZ@s7Q+R6UFP)gh1YVdb3kcZ6;} zvG2t5sQJ&}=&GIkD*vOOtNahi)T%daMds5`NkHzUGBBXz6bb{9&2>z@_HKt% zQuSoE4rMo*JE%G!$3edu8h4=}$$OA_K=HoEtu(h?Uczk8yi~yJQfE@I=qTu;4E2I% z%Z4PAx>bPCgaZRYj0nAQ0%IN3@`_`_!(s&+Ugy?mwM6A)3J?mNUd}5)|h5?C!Mgo@QG%nAg8h9 zQ?+I#itSEOsy`_l`Jr0VwirxNjWr3&1=&ATVcxgj;P#vHTa|Cd#RV*i@;6scnf3(S z|32!Nt%PLjN3xaJ;{1+_(nVbr8lCYu-{M!%)S>skK;K_UcK#)F803FzYEoCu|4%EoipFJ2|&)cR(+P)uAiT?6GqV;EME zwjpp#NT#}`s0^4Loa{sVF&3`a0#{6A5KUZ}*+cwOcQJlqZ9O=CH7GQ3^)?7|4de}- z#<0Y+5|SUT%z#ov5z`jl_|KF4h2cJSfI_wI8+wYRZOE+ub-;54<3`}FVK)_TMathr z>YqXRB#aNt_^~Qb%m@d47r#vj8wle``MYRc6)0?ih5|Hsz8XB=qE|oHq*75DEq_ND=oezX5Ppy5vG85ShoL-n8m>6MYX4G!LI?Bh0N1VE#((_KRGI}6xZdPdBiw@Ef$}) z3X=>qoP2-ge&ytc`8r&DKC`|S%>tfNqhACl=bBU$5Ng-`*nqRDrFvB zKA!-=qAScpS@(XS{zjPp_~%RPzV(d^`{jeshlydS4(zGRD8KD4yX}DKmCs<5EjnGk z7(pB0V>p99p`ILTZd*)f1RKu$i3R#yAuCWl*)!+Bp8534m3PwFJ`O=^X2MT&2DSvfwP#Vz#*h1VaYsv$bax z#m1vNk22OO)@snX_ySTCKQUWfNEZOwjCZ-Rd!fJatnqxIuml%Sl!p|aU_kTqb^iIh z*Vm?0L)czD9>{+^9fB^cs-B}7&xaY$FYx&)i*R`kuUGA#$a6oVbB`5v#DaaTPg_+x zhT1e2MXmM;tM&n$zeRv5$h6b>zA(6Bku#6!GKVm*%#ZT?s4!z@7)7vZLEoL2W*Q5P z0RCj1V=vJAe0WXdQIRS@7bK5e7GA(01AOQLcnuO)6WD}k(q;@B*cJ8Du8~|x%W!EU ze&A(%I);`8?0;4y^F{npv;*|$0*NTgmt)Fszp0F9gEd`JP zhYXPC%jd{A33hXwoABO}fvr>V@nKa_Hr2ga)yI-ijS0(fVQ`F^nq07?Dq*_zBfo-r zv(c}om|H}lJ9l69*lmO+)P=D->h0RI?7G6gqAQY?K}wA#-X$^bvRZY1m`NBR<~TKe z)b*SiFzS|2>e!%57PIBrN1_v-Ag=X0A1t_ktU+F#L2L0P6g~^t4PG9A7ja z9|tSM%&X?-_UXpCwl|x;z?S%oy5rmb$z?l4fO}R#mwSs_k3E zdsT|=Qx{LaT0T{GI+1Rd``2avotILir&&K7irKvZ32)c{#soilL=<=+pCZHS^1Fnt*%OSnEcllgp0!#(%D-sC{`a+Z7rES9~6}1O7;e z!fVb7=p9}Fa9D^i0DlsU1c3$`K}wM6So_l~bN-8oT0%jBQx)cv>^*2CzBLRBZG%jm zV&+^0jkVK&i6AGtmy>P59qCT6hPSi3qn1T2+qTW0f7*0C#;~y+IEURm)*J1+LT6^B zu7mDJd0u6{gdSd@pOX*nS_ql)i#L$#DlE}UfZ_n5ChIt1I`+_(ijoJni zP2r*l1|Aa00IpjZcvIjzQMLhUaU?3&j3tSsTy(eyth5_Ch z$P`D%C=MZIm#AI?0o0u5tTg+)is&KDo8CBEI_LR<6qu7agD87ub2=hDU+Av3NIcHPiv>FJbp$m}tO|JcA=oIop{K%S5JF78)wx zQxsVt_l?YY>R|<(oxKYtdb^+>xUsQ}8v*dM#dK_!KCh94oiK&&u<>H7i8k9H!~~^{ zO-qHJmv;Ghwg-qrgx!gwJG5|myUYNsJd80yOq79{b-oiFK$R$^IDi)kM;CX@loAASq#zL)$tm1wti15VAdHB?5VCj?flh1 z6D%jNX!Uz$xdL6GpUBMdIs&XZS5s2Jvx*3y{gk}1jVj=~^An=i1`KvA7R<0fxvFr^ z@eVLmGA}%?1X_L|fvPQdgs2i0&25Q~if8bP6kSO+W()YfHog666btz6ZVqqc3;IFV z_#Lz$F_U{(=~AtIyn+$t`od*KOD)92$`Dh1q$aTee~GSCqOF4tu+;T77!L;HYJw_Y zbf{nr2INVr)CjNP*ZrX~`GcZjH2Ex(HpxTvfcw1-1h`lgtC?cT-B-B77YTMjvyYBRMkV8ZQ8>uBvd}CKf!+TFuk; zz(j|;z~}%ZDhd~rh|EmYxv!^`+&uzaT_d>=q~@&C2Pth%bPLCg?Y;yXd#w?{Zx0tGp4whMtB^ioeGID&_JQnx&~V< zl!i#9TTKhBzG0a6S%~GgG-t8fCIYp(0`+Woh5hc!0u_Ttk&H$=IL51t=O|l2lq`lqL*}g3;osp0!ScaqM`k?i?j_tJ&?BrRtrM7$ z@>C{Zwup@()G=Pn=`>H3BEnRK+Z<({P{*omKY(wWbuLfJQ@BkfdCmHF@`SPg$sIpa zcKUzdTlVK8gS{<{ZWX^tq2CsVP+CnXOs8tSL&u}jYv_+^=&-4z&X{IOK4cq6ng|5L zZ*rsGA)KMuHsYYIr!LMC5wVS5ox%Ih;C;~TmJ_Bz zT%f4EFudM7^$3?Ma&3+5NKA@~Q1l?qp|be(0G zQN-FGRN!_9^o0?lcZFMKS#7f{zLCI=kcVK-x6*!BnPisbfl-$o>C9Au!f~F^U>rA9 zmTSCjp7h;6@coCY+5fyjQCJ$-qAh5y;(Tt$2Kc4^sTIr265=2aOFfRhhQ=B>waNab zu*j6~ZZ)3cS}LokO=0Ol4^cu}i1b^y1)h@1Sp_pc74QEcR(2 z_XpsoBLn9)jy2DwB4byg5Zp-z#SUcLbvJqTojDfR5tGJNk`#WCB`@XzvYSf}nOV)n z3D`G{<{h(k89A&!b}(}R-v`FM_z6n-js{mcX?Xo(YZ)9~$k`cWtYTqNC-aSS70GIu z%Prf{52YMSguxB<$t=o*Pn?$`)qw}2y1(&5=QE1iyV zfLqlz4rs9B54ow%7sM}ebnG0Iir1Cgaqt>@hm=h|M{Kgs7mXu#KWo~5*0A*N_dyOS z=e^1WJAu0!&B}8r6Pc4A` z7jd}-R*cHWZPXcCe4TYx1w^D9!C^Btf5UzZJne*Jg-LB#TtstNX6Ga6nc??J@sX+c z=o4<4mvRofS6;6y#F;nU$D&nZ+iY*ZnUzA{V)n6VSDZTj$Fc3Aa`RpFr%0{p@HRfI zI3$(FS#AO)?dH z!u|J;c_HkjmwC+19z~m1M|PtM)DVlmP!cwKO-TB=e!DNS|Ujs=+@Ssht&N;_Xp_XmigO zQx1@(Y1Up-2lXho)S7G5t{94Ai%I64(=@Ask=q>ytaAgi%!_6ZAw|gN$=lPr14}_% z@QzdIB}>u^()3PkFOtHyBX8QmshIr#@Fm_}2K|V0HHl(lwVg#3DRC<2c`Q!F`CHdaHKde21@DwK05X**0GVQvymylzd`GB_(cafxkJ?e=h zh>W&gfKwSs%XP!1qi$MN{Wm4Vx*%yV7m+(gazxh3_d6{|_aBJH@TWZUwxX>!ro z68xEYn=A+1U8J}!p6^;92EA{v@SJVAat=(UgAu)!Qz>{XBZpno5kGDyieyrZ8JWT$ zL(T%ef0%xq98=pN`^m$1sQc|p(~!oV0*FN=-HBJAxW-}#=UlFi!8QwtQt4c zfp#uCihF)c=2$QspT(XF#YFih5U{klP`^Q3V5LSFhvYyCWZ?%7;%f1u59LPnM3d}P zGOg~yXhBxQn5sPcrc#lwo*pZEQ~fIA~Ombn6gd%^qi6>G9g)8g#pvK_C3G`;X=EN1J_O! zdkK~RLxdO@3?~Xzh3yBFI+RQ$j^fzrcm;k=*-uGB*%@sX1`*tqx^r5&T4un2u^ByL z*fyud*{q;x%mVimE3TfJ#BlmJ{t#MCkFIY5Oj~;V_+8KgV0Ey7@3iUA+%qVB$3^$k zpIb+tzl>S_A>zY2kE7^I9cU`0BhvfXL>=(4RwvoDSKh37qhjZS2!c%k`Wj6RXeUA; zCAjIrJ@U~n#e(X{t-w?>`F8A9A3W|8I9Mw2d`1@N)t$6CUoe zoKTSpD^#!ME%sZ4C8}Oc&1B~&?;+rrWj0}yL-rlRp$rFIYtIq?EQkM!?|-!Y1W5$5nI#i8kmsc(o{6 zR|te#)gMkJ+#bFA{pj6n(!LUa?-aF&g6%943$fWk*)Qd`R3^@nA-E(bI!i_&6YO1@ zpKl{tnnbmwhQ-^R@k3+dXGd zc|~&yw&8r2W>|COd9;sQjps=)&gXNmnxCE!JRR>4u%_z5c*=fFp{crR&r}gcd%-hO zMVwM*a?tMt5G5M}IbI{+xnK_Lp?H@GoHV(VYVY`xP~H*c4-G zIU-xYch3CP#4{+vW!o~-pSzuhp9-y8g^kspo9J7tm5#@);4#7or@V74bWBJ7P64g1 z3ns++W4E0hxlVYJwybw%e z)L3ie!0fi^jm7x0*734(J%)KP(3NEXWxtS$4$IbcCeAJFwC?4CI%Zbe>&zs>OBgZB@S2LxlTRx4;}%c)dtoEy zw7nKjxz5!B`3$ADl~P-8fC%*eB&`EG`YaT+;m?3g#ge~qixFW22ncv#^yg@`szr7I zJ+lEliq*`6Rq8K4GUx8Zl0HryJYxK6)}=?a$O)H|H+qk5^$LV@kKzEniE{IuI2rWa z!*n~XAu81NA!YL&!gb72M7ZNQ;W`K}{)*cSCM3Utjj6I*h=5kxeuycKkdIwj2R2H# z6iIC!y$T4^*mG0!-R_faI!=MNgI4^~QF!5g^X3gj-#tCL!tRvb)vU!*`-eRx#Pb_9 zHnP`Tc=Ud%bjx|o?XqiM>@~Mv5!*h_I7@rHZTMaD(;34*u94P%B&`4VHkb0_#5LTK z97fdhb6eKQhg;YGb?&O#lAIw{+x56dQcB*{9owC7i$47H@a^eG&1^p;18LfSd&kw- zx0*KhVhz^Rwru$azW+J6@xOgLNZ}M!`DMDwKVSi0O@q|gawzUEO+vM~8T3{o4h7W($_`8B#xrVsD5k}WQDpZg;<;Cyj`lkWzjH0`%{&$DT_3FhBnxN8RM zGB&Q-tg$MZ@Ldb%%=w@G9DXN%e&M^DGWYWq&2R6#%eciQPkJ>CAE6vNdhX)2W|`lp zdC;hmmu)Ox3}yR`n*0KKvem!LH*dM1u!+Y8-)#%{6ZsuqgF5vBiOc&se+HTLlYX~p zWbvanA41txUjp-gF0X&mqWa*v=g1nBCDIh}HNs)G0-3v%-s1$w0$x zU!w7As)wzbE!^~*E-OG^{hVdW>l+r~N^WmM>SaAwtv9o5o0>-(w_SIA^TsOnz;(U4 zqP6=@qS(5|g+Gb7N0WMz>4ui-mycfCvb4?O&{c`_X%_r}7KBvFVfy*SPrj7+R6+BL z_xd{iu;rPX*!lj3zS-!8FNySPHYQ7R$XV;pn5>uG)$@K(Y`49fzUFg*E$K*Tb@1km zPr5cR!dSl=k&Ak528Op;{80OJkf0^}DLMK+XI4#r)A^3^OuGmuA+)mS)@A?x1$+^D zzF7=vyGJ^$fj$T+HHT+77Y29#9h7?Y{DAL}lzaSPk`|$_1#VJYx! z&i7i)WSl=A8hxvUTwNK(=Ls!NUg+KOm<8==O0A3V(jy=YD@x@@Mlmv>r>bZj15 z7eHd1B!O@L>3#nyW19Fb&+c5V-wFp^w=#qTZT{J5wsb%3#Tawz$Lq%xOu)e-ZTm+Z z|8JY<|1X8H%=Kkgg()@aVlmGJ9_DRqG-bWPVtGF@QdWlHSlRaR!8X(>xp$~Gq2#*H zd2XmlNCou)Gmt5&F*!IOA=*#rSuHOV;ur7@TvRz53~kj-SCavi9U_O8d>3n&xs{tM z5Bi?wyls2cx$y(r{f`wfHyLDk*XbSKyKCjq-_5rU%(q;@)64JJ<)QEB%tes5)*gZ8uW@Yl-fII&xT>&bS$PBV+-7kErR z8)`Xo|7U4(+nB5AqvwYA#tfR5c1KJ;=|Zl(yYP4VwO{xA)LpF|beX;XI&$&d{OYAA z#`kp1eBCo$`_tG@e{{Wz*=X8)ZDUb*evPKFXg2=lnU{N)oN&@)bnZWcLZRLMf!+W1 zHu=B5z6E^2S9PKqzykbW0vDG5o9@Z~rfd1{A^fMM|Hk*9-kyK?5C4ttzdVHh^aB2k e??1gg|MDOH8{dC<2>$LCFGwBCzDV`v&}e@BO`Z-hJnH&bxo!KD{%&UDZ|7RW;S0nI1zoH&Xxyf0r}S zX;OR5ITLAnm;mgim+u94zr7AP(SGj)z!fBH|6B$$+#C5HWpCsj#cns6l|_^KucaRG zM-CH2KIeS%(g|f5B}ExIS=l{)4D@ro=HhkH)%O%cbb*L+#})Rd7!UUge+I&6{+xwy zr!8Or3jjBcRf?v{B}ujYfKVb&Q339QWE($@BvdSVI!^W7i8gK*?WT(fxcA|t6mzgQ z;31!-k+1I2=?8wr+?F4GW-w4|3gh`8gICvSF7a^i`GFMs&~qf&TLS>BA^oJOEMvC@7Rj_%6ZB%3F&D?EtW1eK@u6a_axZ*YR1D3B_bh z0{{%5AU>U#hdK!*R!NuK^A6uClE^8Ns;G7UPO`t5WnV~; zY~%C$DA$IGWR#yNNHb7<|1i}+^@C_}lF3!cXPlA2=O+Uq*H<~rExYM<#k{LIt7&)&ZO#{XXTr;bMge9|Ojb*SnjJ=8(( zJ0}GOSOLCRIblKv@<)=Gb?RaFOt-+y(!iX@@dEoSkYgaLK?Ps5?>15E%t!8drF+gU zFHd+>R$hK3=aKvWyTS{FDgdAdfWOU$PuqvD&1Y{``xeF^_HMn?#(Y}7N7_;q^r1QS zoatJzGgiD|YU%lp6Cjqo(&ncI)%TDophlXSZjZwGf3xlx77n1`OM!RcB#)kj^TlNs z4+Jf|ggou4mKvu!C%5uNj_xnFcOsY4iw7jT_;8FDX4J0h$;C;on#jMyyc=*~6iVlY zoF@dLE&*;)`V<8wsQ$SyAZmzEFh(jELQ%Y5beF;T6>y$&FSY#tmJ~H6@)3Uyp`R5hI;Ii@z9Ru+l8ZF}V>+piU;ry56GbVnThdN~-PAC^boc3H0CzOz(&RRxe&c8XWX`#VTvaXiy*wbwetq`s}ar;`D ztB)Xh%=W}tXS(9|^g`=5!VHpRndy0`puBpvxz=M4K&uKwAEX^?hF16bqmU1XFn}SV zRNp_YMIAcdNCwaxgh3o+!bD>|xe`Vfc0I{L=W}|xC1xfjdS&T)I6cV>6J1@&5)*kn z$&x-3F|mwPlk$h@W+r+x0MD-s{r3Hg1WS-*aVZxdtnx5jPwvM9KNGzYZU~`Bin%00 zfF(Uu?%e}F1HJdzP@j0o#g9;5nu#ieWLP1=*E>~ECFv%(8NMhJJ;_`@W*mgoXqX|y zqL|=eAj@ucxm^!n4glhqa%PEp&X2&N%etx1aXP-J%qDd*uxKU_vWr?5hnDf4rQ(Zb z;-R(fQF*GXG2~M-^M2Qkzir9T!>I+C?Q66<dejn$Av zs~7+B^mpKFE$BP&kou`EMH9Yq1eBmU$r-O@9&kew*xj;_jKqTeU@&r$7iYsQEjeN zl|Un^AW@Kxbd#%9Zx7mDJ-R1Z@);yRu0GQSnnI?He%0H)3s*2=s6T`0D@bIMDdC19Qxo9vP{<;XG{>PE z3OG+<3qLkmkP4ap zpco`j2Y?-o!3gIxp>H!JGTvcIVoqjZ{ev^$cou*cMWW*3E>*w!4i`D?5?TCu0wKEh zWU`;zk*s(;e!sQ%ACLd@Oo(^b?*eJ;^7HZW_Hg&Sa_y@7<%`bF0L^@GW-}(r1RF){47q0oVZ?7*X(R@?#3LPD(pDrz3fJ#=@EQH2id+4T$!puAt z*0*0Wfl%s1-q`^T;s`MNUG%Dcemho|f6P~u_-&+4Tw~|;{rqNs>#DMb`Qq0>%kT3? zPi^;)ZcX(MW;y0R^`GtN2=#TzADW&#J=?PCI7oOA7WP?VH{~f$jL>`8Gy3e;DS7;Z z1t%DHzjhIZfL(TsW(GD@wr|ex2C-ouGl5=O*sD23zp?4 zoqDOAfmMlYfKf&JS9OfdOcqtgTXlNHo>-MTPe{KzA^kfeS0mJ)29qdK-DY_AMR3|D zLfE@a+Xlmsjk?V?a*f8VU4*6J{h<)a?&lDgb8lFh_4Z(O<_U& z6z?a5#vzw(@pT_Q->je#{Ows5b6vY%f7u+#Hu#4!W5_8r0bOa&5yXQR_EP*){$b=H z+2C!pa8`cGOKM+@B=9&{sL;=PZ9Vtf-KI62hF8`BO+*HPW_;UwJHR5(;=H{ux!UnM z+~?c&`rJg@!H+A>S=7=E@9au5E+v8H;QAwX)?XR6YTy0FSEZjL{8P7{pxwit1mXCl z>w-R`f}=@4N)J0OO&o6MNz#=c97W_@?_?A_%Ohs{+T;+=)mMc^+WX7!r%k)PuV7Fe&b@v>%%O0 znG3}?GJ^4KeZn<~hF**!%*0NNgy1ER z{Uo|KSAV(w_S{rAkY$s0TPj{x@6s#~_nKzJf2d)031fLjX;k1pwB`K1o*{$_cR-Pc zfR$0d<8ASTd!#u z!5DkLq2~CHxJ|kR!5XKjcY(9#%(NRPo)I^?;Q^5q-^B{#H><2O;2KN!xyN6cFZdT$ z-Cq1GV>~`x(N9ph)PN^C{e=D_E6xUA?o*6+r;cZ!l+7+#<}++>>EC>1H$+sk354H`Zc+3T+aB0me7+ zReIrY#ha!^$0qV!l>r@b zU_(n=5vR5hQ%^Y6aO_v*c;NTm9C&jzL(X4Cqc`wf{9sX`8a-#=Ev3ku6 z_>AI~(GoupUtaaYfSIy69n~0aM@B0o_Axgob(G*2Xt1`5Q80(#Zsx7^lc$d8&ekzq zJnMoWT_wOi_agA%`+IIwHT6xHSKwkp18H4t$F(lZ*g!ADf; z&6->(m5;}o7nh!23w^ZNwS4Vy`_;tJiRG(XyAi%yD|JH)k?IX2ocV`jiPbwwKv6Sc zq$FCA;FxkQeQL?5jeP9GtGw)d;xALCj|BIg33r`ugYe%=dT;ClpXje6<9ETu5iznL z81T0SEss;7#V!0z#sT1j+3*VFrsO$BIsSkAda4v&R0}Ae7|Jo>1V%subBQU zMcV{=BQM{sUVJ{@I8w4Ww3{EVynC2HHA@BVPE^ zmesNj?$EkjL%qU&uq-VgZOf_o68oVVJrc6spU+}K( zjQ>7d-R+5L*FO4`3!KAa>hcps+MUL-)9&0}1-wCY-jyJy$z5>L? z8-DZyEU?Kdzbws`>rKo&@W#~6bwK+4t0LS+-!Ni*6EPTcMXi$oG=01{Af~FHy66b| zKmfS2)!mJ^XY~BgtYg6-O?v@?=|E&d8N(0EY> z&+V{Y=SS--U)cT7W;*uP!BHr@ z=AE-xjs?tOZ0EK>*^NX&!J`}4j<@|wmN)CX(S&BDjuRCNWJec%wIOZ<$|F)X&z?ET zX-b^xcJEnVk`jDUwUIcUZwI9CHz`DUwx4g)2BmI*>0ji4H$etlk!yl zM!%rM#)8PJE%~_i*#rxDK@99CRiTJSQa;MdGr8|H1ODu2*kd3JWF5>O28w}3tI@g+ zz2mw!mbV<|bu5528F3aF+9t)wnuPGn*FUKUV<)QuJV*+7OOw^}!Pj=#9f?=Mw}s8Q zIu*?0N^cH=8I!PMOb+q64NN1Ik9s=$7z_rzA6weTpJ)lpdg^BM>-{su<%Tx=r~zD> zgzvNLo1eBEQ#C0ntmF&LD-?eUbVjDZVN<7j0EEz{P)FkrAr2;hPi?3Icn$0zg{xZ+ zj>3Fi|0_{j>@#N7utP(zK8a(VAQir`h}b!y=4;{l^|(dCTEnZIXl|Lg+ART-w}7Xct-Z*38aUB=%FLJK$QQi+;Ms?^w5(|g zdQ5Kn%z{kQCWWcpk((C;_1Q_>bQAL&@&vsxQ)Lq=1dso-h?s&6+A{Xu23FxbymLrge7NyNB5| zn-tf_2_CVxstL~*nlIrMcQsDnxjcyM+yKV)o{GWmtcYmhDEjL(b^@FQ!fu;&aHr9u z*4iogr-lmnBeCUc0k-kkc5oeDWr_ZTCsYIoJjs7X()Ylzm7V@@3*^aZE}{&BKx0t} zvf!sE^~#GLfGvsFAhOV}FE~<^m5KDp4x%jRi+@fD=gMq3!1Zznv2DEVj;jqG!6kvrjk^Q638b+XJo$#;GhZ1;XA zxBDC6cfE*hhY>j1=&?mDTn#(%(1=?%Jsm5ywsR7CbB5V;DM~?v#u9uq0%|{8*Nwk19ac_Pp7w|+e~uPE>XlbOI?SB6`@_W*G zP)W?EKj{jODHtbD@kJ{hm{i30EemXWOSa~4?S@dekS@jBh7H;M!;-x^bQ&vkHz$xI-1 zI_p-qn=an@DBi6cR5$G?=`cD&xzTyoUBecn!Y70Rq?}DH!`8;jE)c>j&?I<)QmoU< zCGgGBGlzDHR&wdkQr0F{YmzoSNFnGp<-Qp$Q)^6%!ZxudKJ0KErwfi@7-_qE77oa5 zg?jg4q;WyJQ2QrCVNZfSk4=U?`n0rT4m+qGIFPw+m$veJeJ$jOQ=dKYTA^D|r7zbQ z2H%k{>84q{I?>h0*&fS;wMDbOXQ0?KY?$E2?;*xqkVB6=*t=xu7>J|wTH?-iW6Rs$ znzNsypT7SwaG>u!DzCIK(Gm|I*I-gS+xt=YHhC5RJ>o99npfX8BNK)f$EQxL@DlAp zW4RsS1xp*d08=@|qDna> zlzt-e*a?C!pFyXn(){;jRI!;NF>S1*b$F))^!V9~etu zaA=KoclDK$2jn3j0wdyl;FnlHw)yrCZoGxaq5A1roZa(JVI!-8>!FR&;uBO#vIaF| zrIbSuS>(!)vR+{H-SxJC$Pf}?HrmwFp7GaHm$Ww;##@X0t7=YF?OXRj_5HUTzmLKw zZ7?@2`~`N(GOO!3Fm!-|_a`iDCw83r+U1+$TZbn0$ux^U9}WCuzuh5d^m4nOPxLKe zR7OfSynmWdtPp6KOgNMR_s<6{ZO-QmfF1psvQs4w{@8f_y#$v-?1r6=|vR_iJ zmcD~Ynvmq1OkugK!jbK&={!wuV+0$Cg%zKpb!r`@N%Y~yM{^KNfLsFTLZeGSmS zVQXP07Qawg>B)HJCmhL*>`c@!5j!8S^E&?}YmP%p#Dn`F_@tp(RET|C> zS?X-&)>#bzRs7@|r{ABsa(5dObv2!^IB;&~N&CqH!zIBx^`*OpUO_L} zoAFX$Y?J`7W;f*5muiHjIpDmj(cQB0}@LEPlhO4uQ(*SUwAz7WjfRNG4QBtI0T#eNzfpK zOL(s_^Yl zDTD^i))_pp=rapbsP;R@TMn(GwN*ps4uGc(GD_<%qM_aVzexHQKT7B-V{i40_e1Vy5Zh_gh zhQca(XyYOqtmWn+^wOdId4ZE9II^KVJ1*FDDUJ;-(XlG_xUnNc3hb;ONXrd6-q{hR zDjQGs_1HU-$iJF+P*q|rY zD<)G%z8UYGn-qx8uufU^W6PzopVl5E zLp$#w&WxlllwOUI&tIAhuZ`y0((U%|!VeZ~s^IEqNz*hSwWCHHOkCZB5nxrB5-}eT zY*zP{UY-ATWXB141W^lGV%g$pfWVfl@M04{8Ezn2^5~kl>&3ICx>0GyNI0A1vC{2|xSMfs`Ou0$?#<2aLQWX#8t z#~Q}e4N_f9ufYtl?`Sz&V&%%BVP^(99)Ae|Wa*vAF2R+_P{$>6#O&$>UE|n+%Z*m% zXy7!vWhWsS6cRMY?Cc`YS^T=xzI8AvnhDT8WVV7s52{HouHn~cxzVVPgb7oC6kh2P z_H>a*_a|IRKKtt=duq%5)`U2kyi&Qc6EHH{Z&$OQc`)Pw=DnOBfsk`UwplHML|P*>w1c}J7e*}J{P=y;tk8Z*m-kp^A8X`~L@n&PADXR%9UmYbvXH%kb%k_==uK{ak0 zVJ-l&gA{_60_JiKuOi?w&Hc}}uO%dU4mzGf;=g+>N5I>EOeX|Hjvm0kF^vboi^eNh z-%=e@)zRzi4_tg3(lI{6v=2TaTC(U%+#PSZZTfRVi`Q)u?X4uQ-~QMQQ*{~xB`OE!QGj3O0tX*hrus!n ze=T8$#px>;CAcUZgSC|UBcP4MDGj+*h zA#`z48;+v#R9PM0e9E}|;%q=a?>Fb@<(Z;GMC?4Zuhqey(%Sfp%9SfKwmFm*w zqp{4?g5BS-3$? z@8RGDGiR9#HuKwR@>o=;x&4M&BWgb4-{o-X^hkrGTYdskWyQ0(Gm`djte{PTNT0Vu^|U|^8VU}=@W#_- zD*?)U!*1|ozY}?9i})f?b4Y!ymPQ3Zx85-t1D6V=Xi#;=`{$Ala)RsyK)&mAy>?XK zPTXwD54($49Bib`z0QyZ6H7R+vZ1A19mR6=)9?sa70w(5WItt%DE@ly!aICY>6E;h z@wbXBft9q}3_EpU)G(cZqh}e%lgGhJ`Rtk+m$NbUGxmYPCl;h5dT%b$9hE^dQW|(@ z2`Fs*)aaw5dCW$78?bqc@MO1R`q5BCFtXp@wfA43a*ooirpfg=oYu;Gdq;KaGP)7o z7q+{_-~BvY`|a@k{;^M%z!=~i!vH3u=CRky7iCVZMjtu!SD67nD)y;G!6il-ycX%MYEP15mq;*gIDIe z=~{%$gc_&^Sy^?d9m(_obSV$Jwa1%vC*I#`?MaGLIe>;i*L-g}j+J%1rY>*dB2d{O z@jqj)el_((4`pr+@V6Hu-X01L^=!50A%4u|n;LCr2|KB+i4SqahLe()O(hL=&td^# zO{P@$;!2f-Q_=@`FOt!0r2i|UH4O&m=;n~{3mr$M<8xZxJapno2uGPP^bz5X$nlTX zu(Q<`0KVB)bF7AUo_}XZ_q1jZRW${Ew`SUFY-gPlD+>l#t~~SYxpTnXi6ce&z(J{z zX=|?pdc0#{SKYl1YY-YfT?}4Zmq1g00^Q2^ZFPy;X-zNQmPMw$nagvinz7bgF551G zXHG0AJ(**1LVy*eTaB(44~a!gD*L8M&^GWQ7qDW0GW|9A?Qdj&=(bv0;S2~yBhYF? zgGxfs$6WR=8)dzXd_uEJ=?A<{Q_UCK!Wgjl`!!di?nhXJ64)+NU`BvAn-DNT`>g#m zYXO|n|COaz>c}|j=JJC!c5ZJnth%kCC<@wtfZkwND4kqMpexsH;~#2i3$r7^!Tpy6 zRg~hkZ3`&V#yTXCBvQK zg^_Y{S!|c%4q6EeH2p^NCB=~(rxnss$Go4+TNb=+fYKDeyP`3G+%!VH8Tve7ai_ z9k!)SClQOUS63*a?~_Ti*lWyKuv8PsROFGL`Z#1UrgFe(g;h2)x>W)p!v;;t@c0=? zZ}N1L7mW>!IWNS*9ZCzBt-%Qy#N>RjdccuDnRM{;tR`&b8{rwNStWx^l!=|*mCkWA ztxgL04o>JaufmN@CZ^6Celq9Tl>=NSA z>xPhbac~BKfz5Ixd%(u5S`HHJ?KE6!0lgleL(dqlvJFsE!8T3sD8QuD6u=`-c}^mA ztfZ~jxCCZ4@1cMI{8ZRsI2PHoT!{vN3-oLrWp2qU$H{`p`>z_0IL8(ta|88_pO|<= z8#FfFg + + + +
+
+ If you validate now, the remaining products will be added to a backorder. +
+
+
Product
+
Done /
+
To do
+
Backorder
+
+ + +
+
+
+ / +
+
+ + +
+
+ + +
+
+ +
+ + + + +
+
+
diff --git a/stock_barcode/static/src/components/grouped_line.js b/stock_barcode/static/src/components/grouped_line.js new file mode 100644 index 0000000..febbed7 --- /dev/null +++ b/stock_barcode/static/src/components/grouped_line.js @@ -0,0 +1,21 @@ +/** @odoo-module **/ + +import LineComponent from "@stock_barcode/components/line"; + +export default class GroupedLineComponent extends LineComponent { + + get isSelected() { + return this.line.virtual_ids.indexOf(this.env.model.selectedLineVirtualId) !== -1; + } + + get opened() { + return this.env.model.groupKey(this.line) === this.env.model.unfoldLineKey; + } + + toggleSublines(ev) { + ev.stopPropagation(); + this.env.model.toggleSublines(this.line); + } +} +GroupedLineComponent.components = { LineComponent }; +GroupedLineComponent.template = 'stock_barcode.GroupedLineComponent'; diff --git a/stock_barcode/static/src/components/grouped_line.scss b/stock_barcode/static/src/components/grouped_line.scss new file mode 100644 index 0000000..8f0f079 --- /dev/null +++ b/stock_barcode/static/src/components/grouped_line.scss @@ -0,0 +1,40 @@ +.o_barcode_client_action .o_barcode_lines { + & .o_barcode_line.o_faulty .o_barcode_line_summary { + background-color: rgba(map-get($theme-colors, 'danger'), 0.25); + } + + & .o_barcode_line.o_line_completed .o_barcode_line_summary { + background: var(--barcode__line--completed, #befdcc); + } + + & .o_barcode_line.o_line_not_completed .o_barcode_line_summary { + background: var(--barcode__line--notCompleted, #fcf9f2); + } + + .o_barcode_line_summary { + position: sticky; + top: 0; + z-index: 1; + flex-basis: 100%; + + &.o_unfolded { + border-bottom-width: 2px; + border-bottom-style: solid; + border-bottom-color: inherit; + } + } + + .o_sublines .o_barcode_line { + border-left-width: 12px; + + &:last-child { + margin-bottom: 0; + box-shadow: none; + border-bottom: 0; + + &.o_selected { + box-shadow: inset 0px 0px 0px 3px $o-enterprise-action-color; + } + } + } +} diff --git a/stock_barcode/static/src/components/grouped_line.xml b/stock_barcode/static/src/components/grouped_line.xml new file mode 100644 index 0000000..68432b7 --- /dev/null +++ b/stock_barcode/static/src/components/grouped_line.xml @@ -0,0 +1,27 @@ + + + + +
+
+
+ + + + +
+ +
+
+ + + +
+
+
+ +
diff --git a/stock_barcode/static/src/components/line.js b/stock_barcode/static/src/components/line.js new file mode 100644 index 0000000..18e01f0 --- /dev/null +++ b/stock_barcode/static/src/components/line.js @@ -0,0 +1,126 @@ +/** @odoo-module **/ + +import { Component } from "@odoo/owl"; +import { formatFloat } from "@web/views/fields/formatters"; + +export default class LineComponent extends Component { + get destinationLocationPath () { + return this._getLocationPath(this.env.model._defaultDestLocation(), this.line.location_dest_id); + } + + get displayDestinationLocation() { + return !this.props.subline && this.env.model.displayDestinationLocation; + } + + get displayResultPackage() { + return this.env.model.displayResultPackage; + } + + get displaySourceLocation() { + return !this.props.subline && this.env.model.displaySourceLocation; + } + + get highlightLocation() { + return this.env.model.lastScanned.sourceLocation && + this.env.model.lastScanned.sourceLocation.id == this.line.location_id.id; + } + + get isComplete() { + if (!this.qtyDemand || this.qtyDemand != this.qtyDone) { + return false; + } else if (this.isTracked && !this.lotName) { + return false; + } + return true; + } + + get isSelected() { + return this.line.virtual_id === this.env.model.selectedLineVirtualId || + (this.line.package_id && this.line.package_id.id === this.env.model.lastScanned.packageId); + } + + get isTracked() { + return this.line.product_id.tracking !== 'none'; + } + + get lotName() { + return (this.line.lot_id && this.line.lot_id.name) || this.line.lot_name || ''; + } + + get nextExpected() { + if (!this.isSelected) { + return false; + } else if (this.isTracked && !this.lotName) { + return 'lot'; + } else if (this.qtyDemand && this.qtyDone < this.qtyDemand) { + return 'quantity'; + } + } + + applyRounding(value){ + if (!value) { + return value; + } + const digits = [false, this.env.model.precision]; + const options = { digits, decimalPoint: ".", thousandsSep: "" }; + return parseFloat(formatFloat(value, options)); + } + + get qtyDemand() { + return this.applyRounding(this.env.model.getQtyDemand(this.line)); + } + + get qtyDone() { + return this.applyRounding(this.env.model.getQtyDone(this.line)); + } + + get quantityIsSet() { + return this.line.inventory_quantity_set; + } + + get incrementQty() { + return this.env.model.getIncrementQuantity(this.line); + } + + get line() { + return this.props.line; + } + + get sourceLocationPath() { + return this._getLocationPath(this.env.model._defaultLocation(), this.line.location_id); + } + + get componentClasses() { + return [ + this.isComplete ? 'o_line_completed' : 'o_line_not_completed', + this.env.model.lineIsFaulty(this.line) ? 'o_faulty' : '', + this.isSelected ? 'o_selected o_highlight' : '' + ].join(' '); + } + + _getLocationPath(rootLocation, currentLocation) { + let locationName = currentLocation.display_name; + if (this.env.model.shouldShortenLocationName && this.env.model._isSublocation && + this.env.model._isSublocation(currentLocation, rootLocation) && + rootLocation && rootLocation.id != currentLocation.id) { + locationName = locationName.replace(rootLocation.display_name, '...'); + } + return locationName.replace(new RegExp(currentLocation.name + '$'), ''); + } + + addQuantity(quantity, ev) { + this.env.model.updateLineQty(this.line.virtual_id, quantity); + } + + select(ev) { + ev.stopPropagation(); + this.env.model.selectLine(this.line); + this.env.model.trigger('update'); + } + + setOnHandQuantity(ev) { + this.env.model.setOnHandQuantity(this.line); + } +} +LineComponent.props = ["displayUOM", "line", "subline?", "editLine"]; +LineComponent.template = 'stock_barcode.LineComponent'; diff --git a/stock_barcode/static/src/components/line.scss b/stock_barcode/static/src/components/line.scss new file mode 100644 index 0000000..79cd76c --- /dev/null +++ b/stock_barcode/static/src/components/line.scss @@ -0,0 +1,129 @@ +$o-barcode-completed-color: #befdcc; + +.o_barcode_client_action .o_barcode_lines .o_barcode_line { + flex: 0 0 auto; + border-width: 1px 0; + + &:first-child { + border-top-width: 0; + } + + &:last-child { + box-shadow: 0 3px 10px $gray-300; + margin-bottom: 60vh; + } + + &_details { + .fa:first-child { + opacity: 0.5; + margin-right: 5px; + } + } + + &.o_barcode_line_package { + .o_barcode_line_details > * { + flex: 1 0 auto; + } + + .o_barcode_line_details > .o_barcode_package_name { + flex: 0 1 auto; + overflow: hidden; + + > span { + max-width: 100%; + text-overflow: ellipsis; + overflow: hidden; + } + } + } + + &.o_faulty { + background-color: rgba(map-get($theme-colors, 'danger'), 0.25); + + &.o_selected { + box-shadow: inset 0px 0px 0px 3px map-get($theme-colors, 'danger'); + } + } + + &.o_line_completed { + background: var(--barcode__line--completed, #befdcc); + } + + &.o_line_not_completed:not(.o_faulty) { + background: var(--barcode__line--notCompleted, #fcf9f2); + } + + &.o_selected { + box-shadow: inset 0px 0px 0px 3px $o-enterprise-action-color; + } + + .o_barcode_scanner_qty { + font-size: 1em; + border-color: transparent; // Overwrite default badge color + margin-left: -$badge-padding-x; // Compensate badge padding + + &[class*="badge-"] { + margin-left: 0; // If a style class is applied, reset compensation margin + } + + .qty-done, .inventory_quantity { + min-width: 20px; + &.o_flash { + animation-name: highlighting-flash-primary; + animation-duration: 0.5s; + } + } + } + + .o_line_buttons { + min-width: 136px; + max-width: 40%; + } + + .o_line_button { + min-width: 60px; + height: 60px; + padding: 0 8px; + border-radius: 8px; + line-height: 16px; + font-size: 16px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-transform: none; + + &.o_shortcut_displayed { + padding-top: 14px; + } + + &.btn-secondary:not(:hover) { + background-color: transparent; + border-color: transparent; + } + + &.o_set { + border: 4px solid $o-brand-primary; + color: $o-brand-primary; + + &.o_difference { + color: orange; + border-color: orange; + } + } + + &[disabled] { + background-color: gray; + border-color: gray; + } + } + + .o_next_expected { + color: #00A09D; + opacity: 1 !important; + } + + [name=source_location].o_highlight { + background-color: $o-barcode-completed-color; + & .fa { opacity: 1; } + } +} diff --git a/stock_barcode/static/src/components/line.xml b/stock_barcode/static/src/components/line.xml new file mode 100644 index 0000000..118acef --- /dev/null +++ b/stock_barcode/static/src/components/line.xml @@ -0,0 +1,142 @@ + + + + + +
+ + + +
+
+ + +
+
+
+ + +
+
+ + +
+ + + + + + +
+
+ + +
+ + +
+
+ + +
+ + +
+
+ + +
+ + + + + +
+
+ + +
+
+
+ +
diff --git a/stock_barcode/static/src/components/package_line.js b/stock_barcode/static/src/components/package_line.js new file mode 100644 index 0000000..494b05b --- /dev/null +++ b/stock_barcode/static/src/components/package_line.js @@ -0,0 +1,34 @@ +/** @odoo-module **/ + +import LineComponent from './line'; + +export default class PackageLineComponent extends LineComponent { + get isComplete() { + return this.qtyDone == this.qtyDemand; + } + + get isSelected() { + return this.line.package_id.id === this.env.model.lastScanned.packageId; + } + + get qtyDemand() { + return this.props.line.reservedPackage ? 1 : false; + } + + get qtyDone() { + const reservedQuantity = this.line.lines.reduce((r, l) => r + l.reserved_uom_qty, 0); + const doneQuantity = this.line.lines.reduce((r, l) => r + l.qty_done, 0); + if (reservedQuantity > 0) { + return this.applyRounding(doneQuantity / reservedQuantity); + } + return doneQuantity >= 0 ? 1 : 0; + } + + select(ev) { + ev.stopPropagation(); + this.env.model.selectPackageLine(this.line); + this.env.model.trigger('update'); + } +} +PackageLineComponent.props = ["displayUOM", "line", "openPackage"]; +PackageLineComponent.template = 'stock_barcode.PackageLineComponent'; diff --git a/stock_barcode/static/src/components/package_line.xml b/stock_barcode/static/src/components/package_line.xml new file mode 100644 index 0000000..0a2b9c8 --- /dev/null +++ b/stock_barcode/static/src/components/package_line.xml @@ -0,0 +1,27 @@ + + + + +
+
+ +
+ + + + +
+ + + +
+ +
+
+ +
diff --git a/stock_barcode/static/src/kanban/stock_barcode_kanban_controller.js b/stock_barcode/static/src/kanban/stock_barcode_kanban_controller.js new file mode 100644 index 0000000..e15edf3 --- /dev/null +++ b/stock_barcode/static/src/kanban/stock_barcode_kanban_controller.js @@ -0,0 +1,57 @@ +/** @odoo-module */ + +import { KanbanController } from '@web/views/kanban/kanban_controller'; +import { useBus, useService } from '@web/core/utils/hooks'; +import { onMounted } from "@odoo/owl"; + +export class StockBarcodeKanbanController extends KanbanController { + setup() { + super.setup(...arguments); + this.barcodeService = useService('barcode'); + useBus(this.barcodeService.bus, 'barcode_scanned', (ev) => this._onBarcodeScannedHandler(ev.detail.barcode)); + onMounted(() => { + document.activeElement.blur(); + }); + } + + openRecord(record) { + this.actionService.doAction('stock_barcode.stock_barcode_picking_client_action', { + additionalContext: { active_id: record.resId }, + }); + } + + async createRecord() { + const action = await this.model.orm.call( + 'stock.picking', + 'action_open_new_picking', + [], { context: this.props.context } + ); + if (action) { + return this.actionService.doAction(action); + } + return super.createRecord(...arguments); + } + + // -------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Called when the user scans a barcode. + * + * @param {String} barcode + */ + async _onBarcodeScannedHandler(barcode) { + if (this.props.resModel != 'stock.picking') { + return; + } + const kwargs = { barcode, context: this.props.context }; + const res = await this.model.orm.call(this.props.resModel, 'filter_on_barcode', [], kwargs); + if (res.action) { + this.actionService.doAction(res.action); + } else if (res.warning) { + const params = { title: res.warning.title, type: 'danger' }; + this.model.notification.add(res.warning.message, params); + } + } +} diff --git a/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js b/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js new file mode 100644 index 0000000..53cfa39 --- /dev/null +++ b/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.js @@ -0,0 +1,37 @@ +/** @odoo-module **/ + +import { _t } from "@web/core/l10n/translation"; +import { KanbanRenderer } from '@web/views/kanban/kanban_renderer'; +import { useService } from '@web/core/utils/hooks'; +import * as BarcodeScanner from '@web/webclient/barcode/barcode_scanner'; +import { onWillStart } from "@odoo/owl"; + +export class StockBarcodeKanbanRenderer extends KanbanRenderer { + setup() { + super.setup(...arguments); + const user = useService('user'); + this.barcodeService = useService('barcode'); + this.display_protip = this.props.list.resModel === 'stock.picking'; + onWillStart(async () => { + this.packageEnabled = await user.hasGroup('stock.group_tracking_lot'); + this.isMobileScanner = BarcodeScanner.isBarcodeScannerSupported(); + }); + } + + async openMobileScanner() { + const barcode = await BarcodeScanner.scanBarcode(this.env); + if (barcode) { + this.barcodeService.bus.trigger('barcode_scanned', { barcode }); + if ('vibrate' in window.navigator) { + window.navigator.vibrate(100); + } + } else { + this.env.services.notification.add( + _t("Please, Scan again!"), + {type: 'warning'} + ); + } + } + +} +StockBarcodeKanbanRenderer.template = 'stock_barcode.KanbanRenderer'; diff --git a/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml b/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml new file mode 100644 index 0000000..565181b --- /dev/null +++ b/stock_barcode/static/src/kanban/stock_barcode_kanban_renderer.xml @@ -0,0 +1,14 @@ + + + + + +
+ Scan a transfer, a product or a package to filter your records + Scan a transfer or a product to filter your records +
+
+
+ +
diff --git a/stock_barcode/static/src/kanban/stock_barcode_kanban_view.js b/stock_barcode/static/src/kanban/stock_barcode_kanban_view.js new file mode 100644 index 0000000..2260c65 --- /dev/null +++ b/stock_barcode/static/src/kanban/stock_barcode_kanban_view.js @@ -0,0 +1,12 @@ +/** @odoo-module */ + +import { kanbanView } from '@web/views/kanban/kanban_view'; +import { registry } from "@web/core/registry"; +import { StockBarcodeKanbanController } from './stock_barcode_kanban_controller'; +import { StockBarcodeKanbanRenderer } from './stock_barcode_kanban_renderer'; + +export const stockBarcodeKanbanView = Object.assign({}, kanbanView, { + Controller: StockBarcodeKanbanController, + Renderer: StockBarcodeKanbanRenderer, +}); +registry.category("views").add("stock_barcode_list_kanban", stockBarcodeKanbanView); diff --git a/stock_barcode/static/src/lazy_barcode_cache.js b/stock_barcode/static/src/lazy_barcode_cache.js new file mode 100644 index 0000000..2e7caec --- /dev/null +++ b/stock_barcode/static/src/lazy_barcode_cache.js @@ -0,0 +1,228 @@ +/** @odoo-module **/ + +export default class LazyBarcodeCache { + constructor(cacheData, params) { + this.rpc = params.rpc; + this.dbIdCache = {}; // Cache by model + id + this.dbBarcodeCache = {}; // Cache by model + barcode + this.missingBarcode = new Set(); // Used as a cache by `_getMissingRecord` + this.barcodeFieldByModel = { + 'stock.location': 'barcode', + 'product.product': 'barcode', + 'product.packaging': 'barcode', + 'stock.package.type': 'barcode', + 'stock.picking': 'name', + 'stock.quant.package': 'name', + 'stock.lot': 'name', // Also ref, should take in account multiple fields ? + }; + this.gs1LengthsByModel = { + 'product.product': 14, + 'product.packaging': 14, + 'stock.location': 13, + 'stock.quant.package': 18, + }; + // If there is only one active barcode nomenclature, set the cache to be compliant with it. + if (cacheData['barcode.nomenclature'].length === 1) { + this.nomenclature = cacheData['barcode.nomenclature'][0]; + } + this.setCache(cacheData); + } + + /** + * Adds records to the barcode application's cache. + * + * @param {Object} cacheData each key is a model's name and contains an array of records. + */ + setCache(cacheData) { + for (const model in cacheData) { + const records = cacheData[model]; + // Adds the model's key in the cache's DB. + if (!this.dbIdCache.hasOwnProperty(model)) { + this.dbIdCache[model] = {}; + } + if (!this.dbBarcodeCache.hasOwnProperty(model)) { + this.dbBarcodeCache[model] = {}; + } + // Adds the record in the cache. + const barcodeField = this._getBarcodeField(model); + for (const record of records) { + this.dbIdCache[model][record.id] = record; + if (barcodeField) { + const barcode = record[barcodeField]; + if (!this.dbBarcodeCache[model][barcode]) { + this.dbBarcodeCache[model][barcode] = []; + } + if (!this.dbBarcodeCache[model][barcode].includes(record.id)) { + this.dbBarcodeCache[model][barcode].push(record.id); + if (this.nomenclature && this.nomenclature.is_gs1_nomenclature && this.gs1LengthsByModel[model]) { + this._setBarcodeInCacheForGS1(barcode, model, record); + } + } + } + } + } + } + + /** + * Get record from the cache, throw a error if we don't find in the cache + * (the server should have return this information). + * + * @param {int} id id of the record + * @param {string} model model_name of the record + * @param {boolean} [copy=true] if true, returns a deep copy (to avoid to write the cache) + * @returns copy of the record send by the server (fields limited to _get_fields_stock_barcode) + */ + getRecord(model, id) { + if (!this.dbIdCache.hasOwnProperty(model)) { + throw new Error(`Model ${model} doesn't exist in the cache`); + } + if (!this.dbIdCache[model].hasOwnProperty(id)) { + throw new Error(`Record ${model} with id=${id} doesn't exist in the cache, it should return by the server`); + } + const record = this.dbIdCache[model][id]; + return JSON.parse(JSON.stringify(record)); + } + + /** + * @param {string} barcode barcode to match with a record + * @param {string} [model] model name of the record to match (if empty search on all models) + * @param {boolean} [onlyInCache] search only in the cache + * @param {Object} [filters] + * @returns copy of the record send by the server (fields limited to _get_fields_stock_barcode) + */ + async getRecordByBarcode(barcode, model = false, onlyInCache = false, filters = {}) { + if (model) { + if (!this.dbBarcodeCache.hasOwnProperty(model)) { + throw new Error(`Model ${model} doesn't exist in the cache`); + } + if (!this.dbBarcodeCache[model].hasOwnProperty(barcode)) { + if (onlyInCache) { + return null; + } + await this._getMissingRecord(barcode, model, filters); + return await this.getRecordByBarcode(barcode, model, true, filters); + } + const ids = this.dbBarcodeCache[model][barcode]; + for (const id of ids) { + const record = this.getRecord(model, id); + let pass = true; + if (filters[model]) { + const fields = Object.keys(filters[model]); + for (const field of fields) { + if (record[field] != filters[model][field]) { + pass = false; + break; + } + } + } + if (pass) { + return record; + } + } + } else { + const result = new Map(); + // Returns object {model: record} of possible record. + const models = Object.keys(this.dbBarcodeCache); + for (const model of models) { + if (this.dbBarcodeCache[model].hasOwnProperty(barcode)) { + const ids = this.dbBarcodeCache[model][barcode]; + for (const id of ids) { + const record = this.dbIdCache[model][id]; + let pass = true; + if (filters[model]) { + const fields = Object.keys(filters[model]); + for (const field of fields) { + if (record[field] != filters[model][field]) { + pass = false; + break; + } + } + } + if (pass) { + result.set(model, JSON.parse(JSON.stringify(record))); + break; + } + } + } + } + if (result.size < 1) { + if (onlyInCache) { + return result; + } + await this._getMissingRecord(barcode, model, filters); + return await this.getRecordByBarcode(barcode, model, true, filters); + } + return result; + } + } + + _getBarcodeField(model) { + if (!this.barcodeFieldByModel.hasOwnProperty(model)) { + return null; + } + return this.barcodeFieldByModel[model]; + } + + async _getMissingRecord(barcode, model, filters = {}) { + const keyCache = JSON.stringify([...arguments]); + const missCache = this.missingBarcode; + const params = { barcode, model_name: model }; + // Check if we already try to fetch this missing record. + if (missCache.has(keyCache)) { + return false; + } + // Creates and passes a domain if some filters are provided. + const domainsByModel = {}; + for (const filter of Object.entries(filters)) { + const modelName = filter[0]; + const filtersByField = filter[1]; + domainsByModel[modelName] = []; + for (const filterByField of Object.entries(filtersByField)) { + if (filterByField[1] instanceof Array) { + domainsByModel[modelName].push([filterByField[0], 'in', filterByField[1]]); + } else { + domainsByModel[modelName].push([filterByField[0], '=', filterByField[1]]); + } + } + } + params.domains_by_model = domainsByModel; + const result = await this.rpc('/stock_barcode/get_specific_barcode_data', params); + this.setCache(result); + missCache.add(keyCache); + } + + /** + * Sets in the cache an entry for the given record with its formatted barcode as key. + * The barcode will be formatted (if needed) at the length corresponding to its data part in a + * GS1 barcode (e.g.: 14 digits for a product's barcode) by padding with 0 the original barcode. + * That makes it easier to find when a GS1 barcode is scanned. + * If the formatted barcode is similar to an another barcode for the same model, it will show a + * warning in the console (as a clue to find where issue could come from, not to alert the user) + * + * @param {string} barcode + * @param {string} model + * @param {Object} record + */ + _setBarcodeInCacheForGS1(barcode, model, record) { + const length = this.gs1LengthsByModel[model]; + if (!barcode || barcode.length >= length || isNaN(Number(barcode))) { + // Barcode already has the good length, or is too long or isn't + // fully numerical (and so, it doesn't make sense to adapt it). + return; + } + const paddedBarcode = barcode.padStart(length, '0'); + // Avoids to override or mix records if there is already a key for this + // barcode (which means there is a conflict somewhere). + if (!this.dbBarcodeCache[model][paddedBarcode]) { + this.dbBarcodeCache[model][paddedBarcode] = [record.id]; + } else if (!this.dbBarcodeCache[model][paddedBarcode].includes(record.id)) { + const previousRecordId = this.dbBarcodeCache[model][paddedBarcode][0]; + const previousRecord = this.getRecord(model, previousRecordId); + console.log( + `Conflict for barcode %c${paddedBarcode}%c:`, 'font-weight: bold', '', + `it could refer for both ${record.display_name} and ${previousRecord.display_name}.`, + `\nThe last one will be used but consider to edit those products barcode to avoid error due to ambiguities.` + ); + } + } +} diff --git a/stock_barcode/static/src/main_menu.js b/stock_barcode/static/src/main_menu.js new file mode 100644 index 0000000..3a32cc2 --- /dev/null +++ b/stock_barcode/static/src/main_menu.js @@ -0,0 +1,86 @@ +/** @odoo-module **/ + +import { _t } from "@web/core/l10n/translation"; +import * as BarcodeScanner from '@web/webclient/barcode/barcode_scanner'; +import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; +import { registry } from "@web/core/registry"; +import { useBus, useService } from "@web/core/utils/hooks"; +import { session } from "@web/session"; +import { serializeDate, today } from "@web/core/l10n/dates"; +import { Component, onWillStart, useState } from "@odoo/owl"; + +export class MainMenu extends Component { + setup() { + const displayDemoMessage = this.props.action.params.message_demo_barcodes; + const user = useService('user'); + this.actionService = useService('action'); + this.dialogService = useService('dialog'); + this.home = useService("home_menu"); + this.notificationService = useService("notification"); + this.rpc = useService('rpc'); + this.state = useState({ displayDemoMessage }); + this.barcodeService = useService('barcode'); + useBus(this.barcodeService.bus, "barcode_scanned", (ev) => this._onBarcodeScanned(ev.detail.barcode)); + const orm = useService('orm'); + + this.mobileScanner = BarcodeScanner.isBarcodeScannerSupported(); + + onWillStart(async () => { + this.locationsEnabled = await user.hasGroup('stock.group_stock_multi_locations'); + this.packagesEnabled = await user.hasGroup('stock.group_tracking_lot'); + const args = [ + ["user_id", "=?", session.uid], + ["location_id.usage", "in", ["internal", "transit"]], + ["inventory_date", "<=", serializeDate(today())], + ] + this.quantCount = await orm.searchCount("stock.quant", args); + }); + } + + async openMobileScanner() { + const barcode = await BarcodeScanner.scanBarcode(this.env); + if (barcode){ + this._onBarcodeScanned(barcode); + if ('vibrate' in window.navigator) { + window.navigator.vibrate(100); + } + } else { + this.notificationService.add(_t("Please, Scan again!"), { type: 'warning' }); + } + } + + removeDemoMessage() { + this.state.displayDemoMessage = false; + const params = { + title: _t("Don't show this message again"), + body: _t("Do you want to permanently remove this message ? " + + "It won't appear anymore, so make sure you don't need the barcodes sheet or you have a copy."), + confirm: () => { + this.rpc('/stock_barcode/rid_of_message_demo_barcodes'); + location.reload(); + }, + cancel: () => {}, + confirmLabel: _t("Remove it"), + cancelLabel: _t("Leave it"), + }; + this.dialogService.add(ConfirmationDialog, params); + } + + async _onBarcodeScanned(barcode) { + const res = await this.rpc('/stock_barcode/scan_from_main_menu', { barcode }); + if (res.action) { + return this.actionService.doAction(res.action); + } + this.notificationService.add(res.warning, { type: 'danger' }); + } +} +MainMenu.props = ["action", "actionId", "className"]; +MainMenu.props = { + action: { Object }, + actionId: { type: Number, optional: true }, + className: String, + globalState: { type: Object, optional: true }, +}; +MainMenu.template = 'stock_barcode.MainMenu'; + +registry.category('actions').add('stock_barcode_main_menu', MainMenu); diff --git a/stock_barcode/static/src/main_menu.xml b/stock_barcode/static/src/main_menu.xml new file mode 100644 index 0000000..970cf2f --- /dev/null +++ b/stock_barcode/static/src/main_menu.xml @@ -0,0 +1,57 @@ + + + +
+
+ + + +

Barcode Scanning

+ +
+
+ +
+
+ + Barcode +
+ Barcode + +
+ +
    +
  • Scan an operation type to create a new transfer.
  • +
  • Scan a location to create a new transfer from this location.
  • +
  • Scan a document to open it.
  • +
  • Scan a product to show its location and quantity.
  • +
  • Scan a package to know its content.
  • +
+ +
+ +
+
+ +
+
+ +
+
+
+
+ + diff --git a/stock_barcode/static/src/models/barcode_model.js b/stock_barcode/static/src/models/barcode_model.js new file mode 100644 index 0000000..d29d89b --- /dev/null +++ b/stock_barcode/static/src/models/barcode_model.js @@ -0,0 +1,1526 @@ +/** @odoo-module **/ + +import { BarcodeParser } from "@barcodes/js/barcode_parser"; +import { Mutex } from "@web/core/utils/concurrency"; +import LazyBarcodeCache from '@stock_barcode/lazy_barcode_cache'; +import { _t } from "@web/core/l10n/translation"; +import { useService } from "@web/core/utils/hooks"; +import { FNC1_CHAR } from "@barcodes_gs1_nomenclature/js/barcode_parser"; +import { EventBus } from "@odoo/owl"; + +export default class BarcodeModel extends EventBus { + constructor(resModel, resId, services) { + super(); + this.dialogService = useService('dialog'); + this.orm = services.orm; + this.rpc = services.rpc; + this.notificationService = services.notification; + this.action = services.action; + this.resId = resId; + this.resModel = resModel; + this.unfoldLineKey = false; + this.currentSortIndex = 0; + this.validateContext = {}; + // Keeps the history of all barcodes scanned (start with the most recent.) + this.scanHistory = []; + // Keeps track of list scanned record(s) by type. + this.lastScanned = { packageId: false, product: false, sourceLocation: false }; + this._currentLocation = false; // Reminds the current source when the scanned one is forgotten. + this.needSourceConfirmation = false; + } + + setData(data) { + this.actionId = data.actionId; + this.cache = new LazyBarcodeCache(data.data.records, { rpc: this.rpc }); + const nomenclature = this.cache.getRecord('barcode.nomenclature', data.data.nomenclature_id); + nomenclature.rules = []; + for (const ruleId of nomenclature.rule_ids) { + nomenclature.rules.push(this.cache.getRecord('barcode.rule', ruleId)); + } + this.parser = new BarcodeParser({nomenclature: nomenclature}); + this.scannedLinesVirtualId = []; + + this.actionMutex = new Mutex(); + this.groups = data.groups; + + this.packageTypes = []; + if (this.groups.group_tracking_lot) { // Get the package types by barcode. + const packageTypes = this.cache.dbBarcodeCache['stock.package.type'] || {}; + for (const [barcode, ids] of Object.entries(packageTypes)) { + this.packageTypes.push([barcode, ids[0]]); + } + } + + this._createState(); + this.linesToSave = []; + this.selectedLineVirtualId = false; + this.precision = data.data.precision; + + // UI stuff. + this.name = this._getName(); + // Barcode's commands are returned by a method for override purpose. + this.commands = this._getCommands(); + } + + // GETTER + + getQtyDone(line) { + throw new Error('Not Implemented'); + } + + getQtyDemand(line) { + throw new Error('Not Implemented'); + } + + getDisplayIncrementBtn(line) { + if (line.product_id.tracking === "serial") { + return this.getDisplayIncrementBtnForSerial(line); + } + return true; + } + + getDisplayIncrementBtnForSerial(line) { + return line.lot_id && this.getQtyDone(line) === 0; + } + + getDisplayDecrementBtn(line) { + return false; + } + + getDisplayIncrementPackagingBtn(line) { + return false; + } + + getActionRefresh(newId) { + return { + route: '/stock_barcode/get_barcode_data', + params: {model: this.resModel, res_id: this.resId || false}, + }; + } + + getIncrementQuantity(line) { + return 1; + } + + getEditedLineParams(line) { + return { currentId: line.id }; + } + + async apply() { + throw new Error('Not Implemented'); + } + + get barcodeInfo() { + throw new Error('Not Implemented'); + } + + get canCreateNewLot() { + return true; + } + + get canBeProcessed() { + return true; + } + + /** + * The operation can be validated if there is at least one line. + * @returns {boolean} + */ + get canBeValidate() { + return this.pageLines.length + this.packageLines.length; + } + + get cancelLabel() { + return _t("Cancel"); + } + + get canSelectLocation() { + return true; + } + + get displayApplyButton() { + return false; + } + + get displayCancelButton() { + return false; + } + + get displayDestinationLocation() { + return false; + } + + get useScanDestinationLocation() { + return this.displayDestinationLocation; + } + + get displayResultPackage() { + return false; + } + + get displaySourceLocation() { + return this.groups.group_stock_multi_locations; + } + + get useScanSourceLocation() { + return this.displaySourceLocation; + } + + groupKey(line) { + return `${line.product_id.id}_${line.location_id.id}`; + } + + /** + * Returns the page's lines but with tracked products grouped by product id. + * + * @returns + */ + get groupedLines() { + if (!this.groups.group_production_lot) { + return this._sortLine(this.pageLines); + } + + const lines = [...this.pageLines]; + const groupedLinesByKey = {}; + for (let index = lines.length - 1; index >= 0; index--) { + const line = lines[index]; + if (line.product_id.tracking === 'none' || line.lines) { + // Don't try to group this line if it's not tracked or already grouped. + continue; + } + const key = this.groupKey(line); + if (!groupedLinesByKey[key]) { + groupedLinesByKey[key] = []; + } + groupedLinesByKey[key].push(...lines.splice(index, 1)); + } + for (const sublines of Object.values(groupedLinesByKey)) { + if (sublines.length === 1) { + lines.push(...sublines); + continue; + } + const ids = []; + const virtual_ids = []; + let [qtyDemand, qtyDone] = [0, 0]; + for (const subline of sublines) { + ids.push(subline.id); + virtual_ids.push(subline.virtual_id); + qtyDemand += this.getQtyDemand(subline); + qtyDone += this.getQtyDone(subline); + } + const groupedLine = this._groupSublines(sublines, ids, virtual_ids, qtyDemand, qtyDone); + lines.push(groupedLine); + } + // Before to return the line, we sort them to have new lines always on + // top and complete lines always on the bottom. + return this._sortLine(lines); + } + + get highlightValidateButton() { + return false; + } + + get isDone() { + return false; + } + + get isCancelled() { + return false; + } + + /** + * Say if the line quantity is not set. Only useful for the inventory adjustment. + * + * @param {Object} line + * @returns {boolean} + */ + IsNotSet(line) { + return false; + } + + get lastScannedLine() { + if (this.scannedLinesVirtualId.length) { + const virtualId = this.scannedLinesVirtualId[this.scannedLinesVirtualId.length - 1]; + return this.currentState.lines.find(l => l.virtual_id === virtualId); + } + return false; + } + + lineIsFaulty(line) { + throw new Error('Not Implemented'); + } + + get location() { + if (this.lastScanned.sourceLocation) { // Get last scanned location. + return this.cache.getRecord('stock.location', this.lastScanned.sourceLocation.id); + } + // Get last defined source location (if applicable) or the default location. + return this._currentLocation || this._defaultLocation(); + } + set location(location) { + this._currentLocation = location; + this.lastScanned.sourceLocation = location; + } + + get pageLines() { + return this.currentState.lines; + } + + get packageLines() { + return []; + } + + get previousScannedLines() { + const lines = []; + const alreadyDone = []; + for (const virtualId of this.scannedLinesVirtualId) { + if (alreadyDone.includes(virtualId)) { + continue; + } + alreadyDone.push(virtualId); + const foundLine = this.currentState.lines.find(l => l.virtual_id === virtualId); + if (foundLine) { + lines.push(foundLine); + } + } + if (this.groups.group_stock_packaging) { + lines.push(...this.previousScannedLinesByPackage); + } + return lines; + } + + get previousScannedLinesByPackage() { + if (this.lastScanned.packageId) { + return this.currentState.lines.filter(l => l.package_id && l.package_id.id === this.lastScanned.packageId); + } + return []; + } + + get printButtons() { + throw new Error('Not Implemented'); + } + + get recordIds() { + return [this.resId]; + } + + get selectedLine() { + return this.selectedLineVirtualId && this.currentState.lines.find( + l => (l.dummy_id || l.virtual_id) === this.selectedLineVirtualId + ); + } + + get useExistingLots() { + return true; + } + + // ACTIONS + + /** + * @param {integer} [lineId] if provided it checks if the line still exist (selects it or removes it from the lines' list) + */ + async displayBarcodeLines(lineId) { + if (lineId) { // If we pass a record id checks if the record still exist. + const res = await this.orm.search(this.lineModel, [['id', '=', lineId]]); + if (!res.length) { // The record was deleted, we remove the corresponding line. + const lineIndex = this.currentState.lines.findIndex(l => l.id == lineId); + this.currentState.lines.splice(lineIndex, 1); + } else { // If it still exist, selects the record's line. + const line = this.currentState.lines.find(line => line.id === lineId); + this.selectLine(line); + } + } + } + + /** + * Searches for a line in the current source location. Will favor a line with no quantity + * (or less than expected) as we assume this kind of line still need to be processed. + * @returns {Object | Boolean} Returns a matching line or false. + */ + findLineForCurrentLocation() { + if (!this.lastScanned.sourceLocation) { + return false; // Can't find anything if no location was scanned. + } + let foundLine = false; + for (const line of this.pageLines) { + if (line.location_id.id != this.lastScanned.sourceLocation.id) { + continue; // Not the same location. + } + const [ qtyDone, qtyDemand ] = [this.getQtyDone(line), this.getQtyDemand(line)]; + if (qtyDone == 0 || (qtyDemand && qtyDone < qtyDemand)) { + return line; // If the line still need to be processed, returns it immediately. + } + foundLine = !foundLine || qtyDone < this.getQtyDone(foundLine) ? line : foundLine; + } + return foundLine; + } + + /** + * Calls the notification service and plays a sound if the notification's type is "warning". + * @param {String} message + * @param {Object} options + */ + notification(message, options={}) { + if (options.type === "danger") { + this.trigger("playSound", "error"); + } + return this.notificationService.add(message, options); + } + + async refreshCache(records) { + this.cache.setCache(records); + this._createState(); + } + + beforeQuit() { + return this.save(); + } + + async save() { + const { route, params } = this._getSaveCommand(); + if (route) { + const res = await this.rpc(route, params); + await this.refreshCache(res.records); + } + this.linesToSave = []; + } + + selectLine(line) { + if (this.lineCanBeSelected(line) && (!line.virtual_ids || !line.virtual_ids.includes(this.selectedLineVirtualId))) { + this._selectLine(line); + } + } + + selectPackageLine(packageLine) { + if (this.lineCanBeSelected(packageLine)) { + this.lastScanned.packageId = packageLine.package_id.id; + } + } + + toggleSublines(line) { + const lineKey = this.groupKey(line); + this.unfoldLineKey = this.unfoldLineKey === lineKey ? false : lineKey; + if (this.unfoldLineKey === lineKey && (!this.selectedLine || this.unfoldLineKey != this.groupKey(this.selectedLine))) { + this.selectLine(line); + } + this.trigger('update'); + } + + async updateLine(line, args) { + let { location_id, lot_id, owner_id, package_id } = args; + if (!line) { + throw new Error('No line found'); + } + if (!line.product_id && args.product_id) { + line.product_id = args.product_id; + line.product_uom_id = this.cache.getRecord('uom.uom', args.product_id.uom_id); + } + if (location_id) { + if (typeof location_id === 'number') { + location_id = this.cache.getRecord('stock.location', args.location_id); + } + line.location_id = location_id; + } + if (lot_id) { + if (typeof lot_id === 'number') { + lot_id = this.cache.getRecord('stock.lot', args.lot_id); + } + line.lot_id = lot_id; + } + if (owner_id) { + if (typeof owner_id === 'number') { + owner_id = this.cache.getRecord('res.partner', args.owner_id); + } + line.owner_id = owner_id; + } + if (package_id) { + if (typeof package_id === 'number') { + package_id = this.cache.getRecord('stock.quant.package', args.package_id); + } + line.package_id = package_id; + } + if (args.lot_name) { + await this.updateLotName(line, args.lot_name); + } + this._updateLineQty(line, args); + this._markLineAsDirty(line); + } + + /** + * Can be called by the user from the application. As the quantity field hasn't + * the same name for all models, this method must be overridden by each model. + * + * @param {number} virtualId + * @param {number} qty Quantity to increment (1 by default) + */ + updateLineQty(virtualId, qty = 1) { + throw new Error('Not Implemented'); + } + + async updateLotName(line, lotName) { + // Checks if the tracking number isn't already used. + for (const l of this.pageLines) { + if (line.virtual_id === l.virtual_id || + line.product_id.tracking !== 'serial' || line.product_id.id !== l.product_id.id) { + continue; + } + if (lotName === l.lot_name || (l.lot_id && lotName === l.lot_id.name)) { + this.notification(_t("This serial number is already used."), { type: "warning" }); + return Promise.reject(); + } + } + await this._updateLotName(line, lotName); + } + + async validate() { + await this.save(); + const context = this.validateContext; + context['barcode_trigger'] = true; + const action = await this.orm.call( + this.resModel, + this.validateMethod, + [this.recordIds], + { context }, + ); + const options = { + onClose: ev => this._closeValidate(ev) + }; + if (action && (action.res_model || action.type == "ir.actions.client")) { + if (action.type == "ir.actions.client") { + action.params = Object.assign(action.params || {}, options) + } + this.trigger("playSound"); + return this.action.doAction(action, options); + } + return options.onClose(); + } + + async processBarcode(barcode) { + this.actionMutex.exec(() => this._processBarcode(barcode)); + } + + // -------------------------------------------------------------------------- + // Private + // -------------------------------------------------------------------------- + + _canOverrideTrackingNumber(line, newLotName) { + const lineLotName = line.lot_name || line.lot_id?.name; + return !newLotName || !lineLotName || newLotName === lineLotName; + } + + _checkBarcode(barcodeData) { + return true; + } + + async _closeValidate(ev) { + if (ev === undefined) { + // If all is OK, displays a notification and goes back to the previous page. + this.notification(this.validateMessage, { type: "success" }); + this.trigger('history-back'); + } + } + + _convertDataToFieldsParams(args) { + throw new Error('Not Implemented'); + } + + createNewLine(params) { + return this._createNewLine(params); + } + + /** + * Creates a new line with passed parameters, adds it to the barcode app and + * to the list of lines to save, then refresh the page. + * + * @param {Object} params + * @param {Object} params.copyOf line to copy fields' value from + * @param {Object} params.fieldsParams fields' value to override + * @returns {Object} the newly created line + */ + async _createNewLine(params) { + if (params.fieldsParams && params.fieldsParams.uom && params.fieldsParams.product_id) { + let productUOM = this.cache.getRecord('uom.uom', params.fieldsParams.product_id.uom_id); + let paramsUOM = params.fieldsParams.uom; + if (paramsUOM.category_id !== productUOM.category_id) { + // Not the same UoM's category -> Can't be converted. + const message = _t( + "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s).", + paramsUOM.name, + productUOM.name + ); + this.notification(message, { title: _t("Wrong Unit of Measure"), type: "danger" }); + return false; + } + } + const newLine = Object.assign( + {}, + params.copyOf, + this._getNewLineDefaultValues(params.fieldsParams) + ); + const previousIndex = (params.copyOf || this.selectedLine || {}).sortIndex; + if (previousIndex !== undefined) { + // In case we copy an existing line, we update sort index of following + // lines to interpose new line just behind the copied line. + const newIndex = previousIndex + 1; + for (const line of this.currentState.lines) { + if (line.sortIndex >= newIndex) { + line.sortIndex += 1; + } + } + this.currentSortIndex += 1; + newLine.sortIndex = newIndex; + } else { + newLine.sortIndex = this._getLineIndex(); + } + await this.updateLine(newLine, params.fieldsParams); + this.currentState.lines.push(newLine); + return newLine; + } + + _shouldCreateLineOnExceed(line) { + return true; + } + + _defaultLocation() { + const lastScannedLocation = this.lastScanned.sourceLocation; + return lastScannedLocation || Object.values(this.cache.dbIdCache['stock.location'])[0]; + } + + _defaultDestLocation() { + return undefined; + } + + _getCommands() { + const commands = {'O-CMD.MAIN-MENU': this._goToMainMenu.bind(this)}; + if (!this.isDone) { + commands['O-BTN.validate'] = () => { + if (this.canBeValidate) { + this.validate(); + } else { + this.trigger("playSound", "error"); + } + }; + } + return commands; + } + + _getLineIndex() { + const sortIndex = this.currentSortIndex; + this.currentSortIndex++; + return sortIndex; + } + + _getModelRecord() { + return false; + } + + _getNewLineDefaultValues(fieldsParams) { + return { + id: (fieldsParams && fieldsParams.id) || false, + virtual_id: this._uniqueVirtualId, + location_id: this._defaultLocation(), + package_id: false, + }; + } + + _getNewLineDefaultContext() { + throw new Error('Not Implemented'); + } + + _getParentLine(line) { + return Boolean(line) && this.groupedLines.find(gl => (gl.virtual_ids || []).includes(line.virtual_id)); + } + + _getFieldToWrite() { + throw new Error('Not Implemented'); + } + + _fieldToValue(fieldValue) { + return typeof fieldValue === 'object' ? fieldValue.id : fieldValue; + } + + _getSaveLineCommand() { + const commands = []; + const fields = this._getFieldToWrite(); + for (const virtualId of this.linesToSave) { + const line = this.currentState.lines.find(l => l.virtual_id === virtualId); + if (line.id) { // Update an existing line. + const initialLine = this.initialState.lines.find(l => l.virtual_id === line.virtual_id); + const changedValues = {}; + let somethingToSave = false; + for (const field of fields) { + const fieldValue = line[field]; + const initialValue = initialLine[field]; + if (fieldValue !== undefined && ( + (['boolean', 'number', 'string'].includes(typeof fieldValue) && fieldValue !== initialValue) || + (typeof fieldValue === 'object' && fieldValue.id !== initialValue.id) + )) { + changedValues[field] = this._fieldToValue(fieldValue); + somethingToSave = true; + } + } + if (somethingToSave) { + commands.push([1, line.id, changedValues]); + } + } else { // Create a new line. + commands.push([0, 0, this._createCommandVals(line)]); + } + } + return commands; + } + + _getSaveCommand() { + throw new Error('Not Implemented'); + } + + _groupSublines(sublines, ids, virtual_ids, qtyDemand, qtyDone) { + const sortedSublines = this._sortLine(sublines); + return Object.assign({}, sortedSublines[0], { + ids, + lines: sortedSublines, + opened: false, + virtual_ids, + }); + } + + async _goToMainMenu() { + await this.save(); + this.action.doAction('stock_barcode.stock_barcode_action_main_menu', { + clearBreadcrumbs: true, + }); + } + + _createLinesState() { + /* Basic lines structure */ + throw new Error('Not Implemented'); + } + + /** + * Says if a tracked line can be incremented even if there is no tracking number on it. + * + * @returns {boolean} + */ + _incrementTrackedLine() { + return false; + } + + _lineIsNotComplete(line) { + throw new Error('Not Implemented'); + } + + /** + * Keeps the track of a modified lines to save them later. + * + * @param {Object} line + */ + _markLineAsDirty(line) { + this.scannedLinesVirtualId.push(line.virtual_id); + if (!this.linesToSave.includes(line.virtual_id)) { + this.linesToSave.push(line.virtual_id); + } + } + + _moveEntirePackage() { + return false; + } + + /** + * Will parse the given barcode according to the used nomenclature and return + * the retrieved data as an object. + * + * @param {string} barcode + * @param {Object} filters For some models, different records can have the same barcode + * (`stock.lot` for example). In this case, these filters can help to get only + * the wanted record by filtering by record's field's value. + * @returns {Object} Containing following data: + * - {string} barcode: the scanned barcode + * - {boolean} match: true if the barcode match an existing record + * - {Object} data type: an object for each type of data/record corresponding to the + * barcode. It could be 'action', 'location', 'product', ... + */ + async _parseBarcode(barcode, filters) { + const result = { + barcode, + match: false, + }; + // First, simply checks if the barcode is an action. + if (this.commands[barcode]) { + result.action = this.commands[barcode]; + result.match = true; + return result; // Simple barcode, no more information to retrieve. + } + try { + const parsedBarcode = this.parser.parse_barcode(barcode); + if (parsedBarcode.length) { // With the GS1 nomenclature, the parsed result is a list. + const productRule = parsedBarcode.find(bc => bc.rule.type === "product"); + this.gs1Filters = {}; + if (productRule) { + let product = await this.cache.getRecordByBarcode(productRule.value, 'product.product'); + if (!product) { + const packaging = await this.cache.getRecordByBarcode(productRule.value, 'product.packaging'); + if (packaging) { + product = this.cache.getRecord('product.product', packaging.product_id); + } + } + if(product){ + this.gs1Filters['stock.lot'] = {product_id: product.id}; + } + } + for (const data of parsedBarcode) { + const parsedData = await this._processGs1Data(data); + Object.assign(result, parsedData); + } + if(result.match) { + return result; + } + } else if (parsedBarcode.type === 'weight') { + result.weight = parsedBarcode; + result.match = true; + barcode = parsedBarcode.base_code; + } else if (parsedBarcode.type === 'product' && parsedBarcode.code !== barcode) { + // The scanned barcode should match a product but was either an + // alias, either converted from UPC-A to EAN-13 (or vice versa.) + barcode = parsedBarcode.code; + } + } catch (err) { + // The barcode can't be parsed but the error is caught to fallback + // on the classic way to handle barcodes. + console.log(`%cWarning: error about ${barcode}`, 'text-weight: bold;'); + console.log(err.message); + } + const fetchedRecord = await this._fetchRecordFromTheCache(barcode, filters, result); + return Object.assign(result, fetchedRecord); + } + + async _fetchRecordFromTheCache(barcode, filters, data) { + const result = data || { barcode, match: false }; + const recordByData = await this.cache.getRecordByBarcode(barcode, false, false, filters); + if (recordByData.size > 1) { + const message = _t( + "Barcode scan is ambiguous with several model: %s. Use the most likely.", + Array.from(recordByData.keys()) + ); + this.notification(message, { type: "warning" }); + } + + if (this.groups.group_stock_multi_locations) { + const location = recordByData.get('stock.location'); + if (location) { + this._setLocationFromBarcode(result, location); + result.match = true; + } + } + + if (this.groups.group_tracking_lot) { + const packageType = recordByData.get('stock.package.type'); + const stockPackage = recordByData.get('stock.quant.package'); + if (stockPackage) { + // TODO: should take packages only in current (sub)location. + result.package = stockPackage; + result.match = true; + } + if (packageType) { + result.packageType = packageType; + result.match = true; + } + } + + const product = recordByData.get('product.product'); + if (product) { + result.product = product; + result.match = true; + } + if (this.groups.group_stock_packaging) { + const packaging = recordByData.get('product.packaging'); + if (packaging) { + result.match = true; + result.packaging = packaging; + } + } + if (this.useExistingLots) { + const lot = recordByData.get('stock.lot'); + if (lot) { + result.lot = lot; + result.match = true; + } + } + + if (!result.match && this.packageTypes.length) { + // If no match, check if the barcode begins with a package type's barcode. + for (const [packageTypeBarcode, packageTypeId] of this.packageTypes) { + if (barcode.indexOf(packageTypeBarcode) === 0) { + result.packageType = await this.cache.getRecord('stock.package.type', packageTypeId); + result.packageName = barcode; + result.match = true; + break; + } + } + } + return result; + } + + async print(action, method) { + await this.save(); + const options = this._getPrintOptions(); + if (options.warning) { + return this.notification(options.warning, { type: "warning" }); + } + if (!action && method) { + action = await this.orm.call( + this.resModel, + method, + [[this.resId]] + ); + } + this.action.doAction(action, options); + } + + async _processGs1Data(data) { + const result = {}; + const { rule, value } = data; + if (['location', 'location_dest'].includes(rule.type)) { + const location = await this.cache.getRecordByBarcode(value, 'stock.location'); + if (!location) { + return; + } else { + result.location = location; + result.match = true; + } + } else if (rule.type === 'lot') { + if (this.useExistingLots) { + result.lot = await this.cache.getRecordByBarcode(value, 'stock.lot', false, this.gs1Filters); + } + if (!result.lot) { // No existing lot found, set a lot name. + result.lotName = value; + } + if (result.lot || result.lotName) { + result.match = true; + } + } else if (rule.type === 'package') { + const stockPackage = await this.cache.getRecordByBarcode(value, 'stock.quant.package'); + if (stockPackage) { + result.package = stockPackage; + } else { + // Will be used to force package's name when put in pack. + result.packageName = value; + } + result.match = true; + } else if (rule.type === 'package_type') { + const packageType = await this.cache.getRecordByBarcode(value, 'stock.package.type'); + if (packageType) { + result.packageType = packageType; + result.match = true; + } else { + const message = _t("An unexisting package type was scanned. This part of the barcode can't be processed."); + this.notification(message, { type: "warning" }); + } + } else if (rule.type === 'product') { + const product = await this.cache.getRecordByBarcode(value, 'product.product'); + if (product) { + result.product = product; + result.match = true; + } else if (this.groups.group_stock_packaging) { + const packaging = await this.cache.getRecordByBarcode(value, 'product.packaging'); + if (packaging) { + result.packaging = packaging; + result.match = true; + } + } + } else if (rule.type === 'quantity') { + result.quantity = value; + // The quantity is usually associated to an UoM, but we + // ignore this info if the UoM setting is disabled. + if (this.groups.group_uom) { + result.uom = await this.cache.getRecord('uom.uom', rule.associated_uom_id); + } + result.match = result.quantity ? true : false; + } + return result; + } + + /** + * Starts by parse the barcode and then process each type of barcode data. + * + * @param {string} barcode + * @returns {Promise} + */ + async _processBarcode(barcode) { + let barcodeData = {}; + let currentLine = false; + // Creates a filter if needed, which can help to get the right record + // when multiple records have the same model and barcode. + const filters = {}; + if (this.selectedLine && this.selectedLine.product_id.tracking !== 'none') { + filters['stock.lot'] = { + product_id: this.selectedLine.product_id.id, + }; + } + // Constrain DB reads to records which belong to the company defined on the open operation + filters['all'] = { + company_id: [false].concat(this._getCompanyId() || []), + }; + try { + barcodeData = await this._parseBarcode(barcode, filters); + if (this._shouldSearchForAnotherLot(barcodeData, filters)) { + // Retry to parse the barcode without filters in case it matches an existing + // record that can't be found because of the filters + const lot = await this.cache.getRecordByBarcode(barcode, 'stock.lot'); + if (lot) { + Object.assign(barcodeData, { lot, match: true }); + } + } + } catch (parseErrorMessage) { + barcodeData.error = parseErrorMessage; + } + + // Keep in memory every scans. + this.scanHistory.unshift(barcodeData); + + if (barcodeData.match) { // Makes flash the screen if the scanned barcode was recognized. + this.trigger('flash'); + } + + // Process each data in order, starting with non-ambiguous data type. + if (barcodeData.action) { // As action is always a single data, call it and do nothing else. + return await barcodeData.action(); + } + + if (barcodeData.packaging) { + Object.assign(barcodeData, this._retrievePackagingData(barcodeData)); + } + + // Depending of the configuration, the user can be forced to scan a specific barcode type. + const check = this._checkBarcode(barcodeData); + if (check.error) { + return this.notification(check.message, { title: check.title, type: "danger" }); + } + + if (barcodeData.product) { // Remembers the product if a (packaging) product was scanned. + this.lastScanned.product = barcodeData.product; + } + + if (barcodeData.lot && !barcodeData.product) { + Object.assign(barcodeData, this._retrieveTrackingNumberInfo(barcodeData.lot)); + } + + await this._processLocation(barcodeData); + await this._processPackage(barcodeData); + if (barcodeData.stopped) { + // TODO: Sometime we want to stop here instead of keeping doing thing, + // but it's a little hacky, it could be better to don't have to do that. + return; + } + + if (barcodeData.weight) { // Convert the weight into quantity. + barcodeData.quantity = barcodeData.weight.value; + } + + // If no product found, take the one from last scanned line if possible. + if (!barcodeData.product) { + if (barcodeData.quantity) { + currentLine = this.selectedLine || this.lastScannedLine; + } else if (this.selectedLine && this.selectedLine.product_id.tracking !== 'none') { + currentLine = this.selectedLine; + } else if (this.lastScannedLine && this.lastScannedLine.product_id.tracking !== 'none') { + currentLine = this.lastScannedLine; + } + if (currentLine) { // If we can, get the product from the previous line. + const previousProduct = currentLine.product_id; + // If the current product is tracked and the barcode doesn't fit + // anything else, we assume it's a new lot/serial number. + if (previousProduct.tracking !== 'none' && + !barcodeData.match && this.canCreateNewLot) { + this.trigger('flash'); + barcodeData.lotName = barcode; + barcodeData.product = previousProduct; + } + if (barcodeData.lot || barcodeData.lotName || + barcodeData.quantity) { + barcodeData.product = previousProduct; + } + } + } + let { product } = barcodeData; + if (!product && barcodeData.match && this.parser.nomenclature.is_gs1_nomenclature) { + // Special case where something was found using the GS1 nomenclature but no product is + // used (eg.: a product's barcode can be read as a lot is starting with 21). + // In such case, tries to find a record with the barcode by by-passing the parser. + barcodeData = await this._fetchRecordFromTheCache(barcode, filters); + if (barcodeData.packaging) { + Object.assign(barcodeData, this._retrievePackagingData(barcodeData)); + } else if (barcodeData.lot) { + Object.assign(barcodeData, this._retrieveTrackingNumberInfo(barcodeData.lot)); + } + if (barcodeData.product) { + product = barcodeData.product; + } else if (barcodeData.match) { + await this._processPackage(barcodeData); + if (barcodeData.stopped) { + return; + } + } + } + if (!product) { // Product is mandatory, if no product, raises a warning. + if (!barcodeData.error) { + if (this.groups.group_tracking_lot) { + barcodeData.error = _t("You are expected to scan one or more products or a package available at the picking location"); + } else { + barcodeData.error = _t("You are expected to scan one or more products."); + } + } + return this.notification(barcodeData.error, { type: "danger" }); + } else if (barcodeData.lot && barcodeData.lot.product_id !== product.id) { + delete barcodeData.lot; // The product was scanned alongside another product's lot. + } + if (barcodeData.weight) { // the encoded weight is based on the product's UoM + barcodeData.uom = this.cache.getRecord('uom.uom', product.uom_id); + } + + // Searches and selects a line if needed. + if (!currentLine || this._shouldSearchForAnotherLine(currentLine, barcodeData)) { + currentLine = this._findLine(barcodeData); + } + + // Default quantity set to 1 by default if the product is untracked or + // if there is a scanned tracking number. + if (product.tracking === 'none' || barcodeData.lot || barcodeData.lotName || this._incrementTrackedLine()) { + const hasUnassignedQty = currentLine && currentLine.qty_done && !currentLine.lot_id && !currentLine.lot_name; + const isTrackingNumber = barcodeData.lot || barcodeData.lotName; + const defaultQuantity = isTrackingNumber && hasUnassignedQty ? 0 : 1; + barcodeData.quantity = barcodeData.quantity || defaultQuantity; + if (product.tracking === 'serial' && barcodeData.quantity > 1 && (barcodeData.lot || barcodeData.lotName)) { + barcodeData.quantity = 1; + this.notification( + _t(`A product tracked by serial numbers can't have multiple quantities for the same serial number.`), + { type: 'danger' } + ); + } + } + + if ((barcodeData.lotName || barcodeData.lot) && product) { + const lotName = barcodeData.lotName || barcodeData.lot.name; + for (const line of this.currentState.lines) { + if (line.product_id.tracking === 'serial' && this.getQtyDone(line) !== 0 && + ((line.lot_id && line.lot_id.name) || line.lot_name) === lotName) { + return this.notification( + _t("The scanned serial number is already used."), + { type: 'danger' } + ); + } + } + // Prefills `owner_id` and `package_id` if possible. + const prefilledOwner = (!currentLine || (currentLine && !currentLine.owner_id)) && this.groups.group_tracking_owner && !barcodeData.owner; + const prefilledPackage = (!currentLine || (currentLine && !currentLine.package_id)) && this.groups.group_tracking_lot && !barcodeData.package; + if (this.useExistingLots && (prefilledOwner || prefilledPackage)) { + const lotId = (barcodeData.lot && barcodeData.lot.id) || (currentLine && currentLine.lot_id && currentLine.lot_id.id) || false; + const res = await this.orm.call( + 'product.product', + 'prefilled_owner_package_stock_barcode', + [product.id], + { + lot_id: lotId, + lot_name: (!lotId && barcodeData.lotName) || false, + context: { location_id: currentLine.location_id }, + }, + ); + this.cache.setCache(res.records); + if (prefilledPackage && res.quant && res.quant.package_id) { + barcodeData.package = this.cache.getRecord('stock.quant.package', res.quant.package_id); + } + if (prefilledOwner && res.quant && res.quant.owner_id) { + barcodeData.owner = this.cache.getRecord('res.partner', res.quant.owner_id); + } + } + } + + // Updates or creates a line based on barcode data. + if (currentLine) { // If line found, can it be incremented ? + let exceedingQuantity = 0; + if (product.tracking !== 'serial' && barcodeData.uom && barcodeData.uom.category_id == currentLine.product_uom_id.category_id) { + // convert to current line's uom + barcodeData.quantity = (barcodeData.quantity / barcodeData.uom.factor) * currentLine.product_uom_id.factor; + barcodeData.uom = currentLine.product_uom_id; + } + // Checks the quantity doesn't exceed the line's remaining quantity. + if (currentLine.reserved_uom_qty && product.tracking === 'none') { + const remainingQty = currentLine.reserved_uom_qty - currentLine.qty_done; + if (barcodeData.quantity > remainingQty && this._shouldCreateLineOnExceed(currentLine)) { + // In this case, lowers the increment quantity and keeps + // the excess quantity to create a new line. + exceedingQuantity = barcodeData.quantity - remainingQty; + barcodeData.quantity = remainingQty; + } + } + if (barcodeData.quantity > 0 || barcodeData.lot || barcodeData.lotName) { + const fieldsParams = this._convertDataToFieldsParams(barcodeData); + if (barcodeData.uom) { + fieldsParams.uom = barcodeData.uom; + } + await this.updateLine(currentLine, fieldsParams); + } + if (exceedingQuantity) { // Creates a new line for the excess quantity. + barcodeData.quantity = exceedingQuantity; + const fieldsParams = this._convertDataToFieldsParams(barcodeData); + if (barcodeData.uom) { + fieldsParams.uom = barcodeData.uom; + } + currentLine = await this._createNewLine({ + copyOf: currentLine, + fieldsParams, + }); + } + } else { // No line found, so creates a new one. + const fieldsParams = this._convertDataToFieldsParams(barcodeData); + if (barcodeData.uom) { + fieldsParams.uom = barcodeData.uom; + } + currentLine = await this.createNewLine({fieldsParams}); + } + + // And finally, if the scanned barcode modified a line, selects this line. + if (currentLine) { + this._selectLine(currentLine); + } + this.trigger('update'); + } + + async _processLocation(barcodeData) { + if (barcodeData.location) { + await this._processLocationSource(barcodeData); + this.trigger('update'); + } + } + + async _processLocationSource(barcodeData) { + this.location = barcodeData.location; + barcodeData.stopped = true; + // Unselects the line. + this.selectedLineVirtualId = false; + this.lastScanned.packageId = false; + } + + async _processPackage(barcodeData) { + throw new Error('Not Implemented'); + } + + /** + * This method cleans the barcode in case the parser use the GS1 nomenclature, removing the + * parentheses and the extra spaces (helping for human readability but not valid). + * E.g.: (01) 00001234567895 (10) lot-abc -> 0100001234567895\x1D10lot-abc + * + * @param {string} barcode + * @returns {string} barcode + */ + cleanBarcode (barcode) { + if (this.parser.nomenclature.is_gs1_nomenclature) { + barcode = barcode.replace(/[( ]([0-9]+)[)]/g, `${FNC1_CHAR}$1`); + if (barcode[0] === FNC1_CHAR) { + barcode = barcode.slice(1, barcode.length); + } + } + return barcode; + } + + lineCanBeSelected() { + return true; + } + + lineCanBeEdited() { + return true; + } + + /** + * Check if a given line can be taken depending of the current location (if no current location, + * it will always be true). + * @param {Object} line + * @returns {Boolean} + */ + lineCanBeTakenFromTheCurrentLocation(line) { + return this.lineIsInTheCurrentLocation(line); + } + + lineIsInTheCurrentLocation(line) { + return Boolean( + !this.groups.group_stock_multi_locations || + !this.lastScanned.sourceLocation || // No current location so we don't care. + this.lastScanned.sourceLocation.id == line.location_id.id // Line at the right location. + ); + } + + _retrievePackagingData(barcodeData) { + const product = this.cache.getRecord('product.product', barcodeData.packaging.product_id); + const uom = this.cache.getRecord('uom.uom', product.uom_id); + let quantity = "quantity" in barcodeData ? barcodeData.quantity : 1; + if (barcodeData.uom && barcodeData.uom.category_id !== uom.category_id) { + // In case the scanned quantity uses an UoM not compatible with the + // product UoM, we drop it and uses the packaging quantity instead. + quantity = barcodeData.packaging.qty + } else { + // Otherwise, multiply the scanned quantity (or 1 by default) by the package quantity. + quantity *= barcodeData.packaging.qty; + } + return { product, quantity, uom }; + } + + _retrieveTrackingNumberInfo(lot) { + return { product: this.cache.getRecord('product.product', lot.product_id) }; + } + + _selectLine(line) { + const virtualId = line.virtual_id; + if (this.selectedLineVirtualId === virtualId) { + return; // Don't select the line if it's already selected. + } + this.selectedLineVirtualId = virtualId; + this.lastScanned.destLocation = false; + } + + _setLocationFromBarcode(result, location) { + result.location = location; + return result; + } + + _sortingMethod(l1, l2) { + // Sort by source location. + const sourceLocation1 = l1.location_id.display_name; + const sourceLocation2 = l2.location_id.display_name; + if (sourceLocation1 < sourceLocation2) { + return -1; + } else if (sourceLocation1 > sourceLocation2) { + return 1; + } + // Sort by (source) package. + const package1 = l1.package_id.name; + const package2 = l2.package_id.name; + if (package1 < package2) { + return -1; + } else if (package1 > package2) { + return 1; + } + // Sort by destination location. + if (l1.location_dest_id && l2.location_dest_id) { + const destinationLocation1 = l1.location_dest_id.display_name; + const destinationLocation2 = l2.location_dest_id.display_name; + if (destinationLocation1 < destinationLocation2) { + return -1; + } else if (destinationLocation1 > destinationLocation2) { + return 1; + } + } + // Sort by result package. + if (l1.result_package_id && l2.result_package_id) { + const resultPackage1 = l1.result_package_id.name; + const resultPackage2 = l2.result_package_id.name; + if (resultPackage1 < resultPackage2) { + return -1; + } else if (resultPackage1 > resultPackage2) { + return 1; + } + } + // Sort by product's category. + const categ1 = l1.product_category_name; + const categ2 = l2.product_category_name; + if (categ1 < categ2) { + return -1; + } else if (categ1 > categ2) { + return 1; + } + // Sort by product's display name. + const product1 = l1.product_id.display_name; + const product2 = l2.product_id.display_name; + if (product1 < product2) { + return -1; + } else if (product1 > product2) { + return 1; + } + return 0; + } + + /** + * Sorts the lines to have new lines always on top and complete lines always on the bottom. + * + * @param {Array} lines + * @returns {Array} + */ + _sortLine(lines) { + return lines.sort((l1, l2) => { + return l1.sortIndex > l2.sortIndex ? 1 : -1; + }); + } + + _findLine(barcodeData) { + let foundLine = false; + const {lot, lotName, product} = barcodeData; + const quantPackage = barcodeData.package; + const dataLotName = lotName || (lot && lot.name) || false; + for (const line of this.pageLines) { + const lineLotName = line.lot_name || (line.lot_id && line.lot_id.name) || false; + if (line.product_id.id !== product.id) { + continue; // Not the same product. + } + if (quantPackage && (!line.package_id || line.package_id.id !== quantPackage.id)) { + continue; // Not the expected package. + } + if (line.product_id.tracking !== "none" && !this._canOverrideTrackingNumber(line, dataLotName)) { + continue; // Not the same lot. + } + if (line.product_id.tracking === 'serial') { + if (this.getQtyDone(line) >= 1 && lineLotName) { + continue; // Line tracked by serial numbers with quantity & SN. + } else if (dataLotName && this.getQtyDone(line) > 1) { + continue; // Can't add a SN on a line where multiple qty. was previously added. + } + } + if (( + !dataLotName || !lineLotName || dataLotName !== lineLotName + ) && ( + line.qty_done && line.qty_done >= line.reserved_uom_qty && + (line.product_id.tracking === "none" || lineLotName) && + line.id && (!this.selectedLine || line.virtual_id != this.selectedLine.virtual_id) + )) { + // Has enough quantity (and another lot is set if the line's product is tracked) + // and the line wasn't explicitly selected. + continue; + } + if (this._lineCannotBeTaken(line)) { + continue; + } + if (this._lineIsNotComplete(line)) { + if (this.lineCanBeTakenFromTheCurrentLocation(line)) { + // Found a uncompleted compatible line, stop searching if it has the same location + // than the scanned one (or if no location was scanned). + foundLine = line; + if ((this.lineIsInTheCurrentLocation(line)) && + (line.product_id.tracking === 'none' || !dataLotName || dataLotName === lineLotName)) { + // In case of tracked product, stop searching only if no + // LN/SN was scanned or if it's the same. + break; + } + } else if (this.needSourceConfirmation && foundLine && !this._lineIsNotComplete(foundLine)) { + // Found a empty line in another location, we should take it but depending of + // the config, maybe we can't (location should be confirmed first). + // That said, we already found another line but if it's completed, forget we + // found it to avoid to create a new line in the current location because it's + // basicaly the same than increment the other line found in another location. + foundLine = false; + continue; + } + } + // If all the previous checks were passed, the line can be considered + // as the found line. That said, if another line was already found, + // it can be tricky to know which one we want to prioritize. + if (!foundLine) { + // The line matches but there could be a better candidate, so keep searching. + // If multiple lines can match, prioritises the one at the right location (if a + // location source was previously selected) or the selected one if relevant. + const currentLocationId = this.lastScanned.sourceLocation && this.lastScanned.sourceLocation.id; + if (this.selectedLine && this.selectedLine.virtual_id === line.virtual_id && ( + !currentLocationId || !foundLine || foundLine.location_id.id != currentLocationId)) { + foundLine = this.lineCanBeTakenFromTheCurrentLocation(line) ? line : foundLine; + } else if (!foundLine || (currentLocationId && + foundLine.location_id.id != currentLocationId && + line.location_id.id == currentLocationId)) { + foundLine = this.lineCanBeTakenFromTheCurrentLocation(line) ? line : foundLine; + } + } else if (this._lineIsNotComplete(foundLine)) { + // If previous line is not completed, no reason to prioritize the current one. + continue; + } else if (this._lineIsNotComplete(line)) { + // If previous line is completed and current one is not, prioritize the current one. + foundLine = line; + } else if (this.lineIsSelected(line) || + (!this.lineIsSelected(foundLine) && this.lineBelongsToSelectedLine(line)) + ) { + // If both previous found line and current line are completed, prioritize the + // current one only if it's the selected line (or on of its sublines.) + foundLine = line; + } + } + return foundLine; + } + + lineBelongsToSelectedLine(line) { + if (!this.selectedLine) { + return false; + } + const selectedGroupedLine = this._getParentLine(this.selectedLine); + return selectedGroupedLine && selectedGroupedLine.virtual_ids.includes(line.virtual_id); + } + + /** + * Intended to be used only by `_findLine`. + * Depending of the model, they can have additional conditions to know if a + * line can be took when a barcode is scanned. This method is meant to be overriden. + * @param {Object} _line + * @returns {Boolean} + */ + _lineCannotBeTaken(line) { + return !this.lineCanBeTakenFromTheCurrentLocation(line); + } + + lineIsSelected(line) { + return this.selectedLine && this.selectedLine.virtual_id === line.virtual_id; + } + + _shouldSearchForAnotherLot(barcodeData, filters) { + return !barcodeData.match && filters['stock.lot'] && + !this.canCreateNewLot && this.useExistingLots + } + + _shouldSearchForAnotherLine(line, barcodeData) { + if (line.product_id.id !== barcodeData.product.id) { + return true; + } + if (barcodeData.product.tracking === 'serial' && this.getQtyDone(line) > 0) { + return true; + } + const {lot, lotName} = barcodeData; + const dataLotName = lotName || (lot && lot.name) || false; + const lineLotName = line.lot_name || (line.lot_id && line.lot_id.name) || false; + if (dataLotName && lineLotName && dataLotName !== lineLotName) { + return true; + } + const parentLine = this._getParentLine(line); + // If the line is a part of a group, we check if the group is fulfilled. + const currentLine = parentLine || line; + return this.getQtyDone(currentLine) >= this.getQtyDemand(currentLine); + } + + get _uniqueVirtualId() { + this._lastVirtualId = this._lastVirtualId || 0; + return ++this._lastVirtualId; + } + + _updateLineQty(line, qty) { + throw new Error('Not Implemented'); + } + + _updateLotName(line, lotName) { + throw new Error('Not Implemented'); + } + + _getName() { + return this.cache.getRecord(this.resModel, this.resId).name; + } + + // Response -> UI State + _createState() { + this.record = this._getModelRecord(); + const lines = this._createLinesState(); + // Sorts the lines following some criterea and then assign an index for the sort (so they keep the same place). + lines.sort(this._sortingMethod.bind(this)); + for (const line of lines) { + line.sortIndex = this._getLineIndex(); + } + this.initialState = { lines }; + this.currentState = JSON.parse(JSON.stringify(this.initialState)); // Deep copy + } + + _getPrintOptions() { + return {}; + } + + _getCompanyId() { + throw new Error('Not Implemented'); + } +} diff --git a/stock_barcode/static/src/models/barcode_picking_model.js b/stock_barcode/static/src/models/barcode_picking_model.js new file mode 100644 index 0000000..d77a7aa --- /dev/null +++ b/stock_barcode/static/src/models/barcode_picking_model.js @@ -0,0 +1,1671 @@ +/** @odoo-module **/ + +import BarcodeModel from '@stock_barcode/models/barcode_model'; +import { BackorderDialog } from '../components/backorder_dialog'; +import { ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog"; +import { Deferred } from "@web/core/utils/concurrency"; +import { _t } from "@web/core/l10n/translation"; +import { escape } from '@web/core/utils/strings'; +import { session } from '@web/session'; +import { markup } from '@odoo/owl'; +import { formatFloat } from "@web/core/utils/numbers"; + +export default class BarcodePickingModel extends BarcodeModel { + constructor(resModel, resId, services) { + super(resModel, resId, services); + this.lineModel = 'stock.move.line'; + this.showBackOrderDialog = true; + this.validateMessage = _t("The transfer has been validated"); + this.validateMethod = 'button_validate'; + this.validateContext = { + display_detailed_backorder: true, + skip_backorder: true, + }; + this.lastScanned.destLocation = false; + this.shouldShortenLocationName = true; + this.actionName = "stock_barcode.stock_barcode_picking_client_action"; + this.backorderModel = 'stock.picking'; + this.needSourceConfirmation = {}; + } + + setData(data) { + super.setData(...arguments); + this._useReservation = this.initialState.lines.some(line => !line.picked); + this.config = data.data.config || {}; // Picking type's scan restrictions configuration. + if (!this.useScanDestinationLocation) { + this.config.restrict_scan_dest_location = 'no'; + } + this.lineFormViewId = data.data.line_view_id; + this.formViewId = data.data.form_view_id; + this.packageKanbanViewId = data.data.package_view_id; + this.precision = data.data.precision; + } + + askBeforeNewLinesCreation(product) { + return this._useReservation && product && + !this.currentState.lines.some(line => line.product_id.id === product.id); + } + + createNewLine(params) { + const product = params.fieldsParams.product_id; + if (this.needSourceConfirmation && + this.needSourceConfirmation[this.location.id]?.[product.id]) { + const message = _t("You are about to take the product %(productName)s from the " + + "location %(locationName)s but this product isn't reserved in this location.\n" + + "Scan the current location to confirm that.", + { productName: product.display_name, locationName: this.location.display_name } + ); + this.needSourceConfirmation[this.location.id][product.id] = false; + this.notification(message, { type: "danger" }); + return false; + } else if (this.askBeforeNewLinesCreation(product)) { + const body = _t( + "Scanned product %s is not reserved for this transfer. Are you sure you want to add it?", + (product.code ? `[${product.code}] ` : '') + product.display_name, + ); + const confirmationPromise = new Promise(resolve => { + this.trigger("playSound"); + this.dialogService.add(ConfirmationDialog, { + title: _t("Add extra product?"), + body, + cancel: () => resolve(false), + confirm: async () => { + const newLine = await this._createNewLine(params); + resolve(newLine); + }, + close: () => resolve(false), + }); + }); + return confirmationPromise; + } + return super.createNewLine(...arguments); + } + + getDisplayIncrementBtn(line) { + if (!super.getDisplayIncrementBtn(...arguments)) { + return false; + } + if (this.config.restrict_scan_product && line.product_id.barcode && !this.getQtyDone(line) && ( + !this.lastScanned.product || this.lastScanned.product.id != line.product_id.id + )) { + return false; + } + const groupLines = this.groupedLines.filter(gl => gl.lines); + const parentLine = groupLines.find(gl => gl.virtual_ids.indexOf(line.virtual_id) !== -1); + const currentLine = parentLine || line; + return (!this.getQtyDemand(currentLine) || this.getQtyDemand(currentLine) > this.getQtyDone(currentLine)); + } + + getDisplayIncrementBtnForSerial(line) { + return !this.config.restrict_scan_tracking_number && super.getDisplayIncrementBtnForSerial(...arguments); + } + + getIncrementQuantity(line) { + let remainingQty = this.getQtyDemand(line) - this.getQtyDone(line); + const groupLines = this.groupedLines.filter(gl => gl.lines); + const parentLine = groupLines.find(gl => gl.virtual_ids.indexOf(line.virtual_id) !== -1); + if (parentLine) { + const parentRemainingQty = this.getQtyDemand(parentLine) - this.getQtyDone(parentLine); + remainingQty = Math.min(remainingQty, parentRemainingQty); + } + const quantityToFormat = remainingQty <= 0 ? 1 : remainingQty; + return parseFloat(formatFloat(quantityToFormat, { digits: [false, this.precision], thousandsSep: "", decimalPoint: "." })); + } + + getQtyDone(line) { + return line.qty_done; + } + + getQtyDemand(line) { + return line.reserved_uom_qty || 0; + } + + getEditedLineParams(line) { + this._setUser(); + return super.getEditedLineParams(...arguments); + } + + getDisplayIncrementPackagingBtn(line) { + const packagingQty = line.product_packaging_uom_qty; + return packagingQty && + (!this.getQtyDemand(line) || this.getQtyDemand(line) >= this.getQtyDone(line) + packagingQty); + } + + groupKey(line) { + return super.groupKey(...arguments) + `_${line.location_dest_id.id}`; + } + + lineCanBeSelected(line) { + if (this.selectedLine && this.selectedLine.virtual_id === line.virtual_id) { + return true; // We consider an already selected line can always be re-selected. + } + if (this.config.restrict_scan_source_location && !this.lastScanned.sourceLocation && !line.qty_done) { + return false; // Can't select a line if source is mandatory and wasn't scanned yet. + } + if (line.isPackageLine) { + // The next conditions concern product, skips them in case of package line. + return super.lineCanBeSelected(...arguments); + } + const product = line.product_id; + if (this.config.restrict_put_in_pack === 'mandatory' && this.selectedLine && + this.selectedLine.qty_done && !this.selectedLine.result_package_id && + this.selectedLine.product_id.id != product.id) { + return false; // Can't select another product if a package must be scanned first. + } + if (this.config.restrict_scan_product && product.barcode) { + // If the product scan is mandatory, a line can't be selected if its product isn't + // scanned first (as we can't keep track of each line's product scanned state, we + // consider a product was scanned if the line has a qty. greater than zero). + if (product.tracking === 'none' || !this.config.restrict_scan_tracking_number) { + return !this.getQtyDemand(line) || this.getQtyDone(line) || ( + this.lastScanned.product && this.lastScanned.product.id === line.product_id.id + ); + } else if (product.tracking != 'none') { + return line.lot_name || (line.lot_id && line.qty_done); + } + } + return super.lineCanBeSelected(...arguments); + } + + lineCanBeEdited(line) { + if (line.product_id.tracking !== 'none' && this.config.restrict_scan_tracking_number && + !((line.lot_id && line.qty_done) || line.lot_name)) { + return false; + } + return this.lineCanBeSelected(line); + } + + lineCanBeTakenFromTheCurrentLocation(line) { + // A line with no qty. done can be taken regardless its location (it will be overridden). + const res = !this.getQtyDone(line) || super.lineCanBeTakenFromTheCurrentLocation(...arguments); + // If source location's scan is mandatory, the source should be confirmed (scanned once + // again) to confirm we want to take this product from the current location. + if (res && this.config.restrict_scan_source_location && + line.location_id.id !== this.location.id && this.lineIsReserved(line)) { + if (this.needSourceConfirmation[this.location.id] === undefined) { + this.needSourceConfirmation[this.location.id] = {}; + } + if (!this.scanHistory[1].location || this.scanHistory[1].location.id !== this.location.id) { + this.needSourceConfirmation[this.location.id][line.product_id.id] = true; + return false; + } + // The source was scanned just before, no need to confirm it for this product anymore. + this.needSourceConfirmation[this.location.id][line.product_id.id] = false; + } + return res; + } + + lineIsReserved(line) { + return !line.picked && line.quantity; + } + + async updateLine(line, args) { + await super.updateLine(...arguments); + let { location_id, location_dest_id, result_package_id } = args; + if (result_package_id) { + if (typeof result_package_id === 'number') { + result_package_id = this.cache.getRecord('stock.quant.package', result_package_id); + if (result_package_id.package_type_id && typeof result_package_id === 'number') { + result_package_id.package_type_id = this.cache.getRecord('stock.package.type', result_package_id.package_type_id); + } + } + line.result_package_id = result_package_id; + } + if (!location_id && this.lastScanned.sourceLocation) { + line.location_id = this.lastScanned.sourceLocation; + if (line.package_id && line.package_id.location_id != line.location_id.id) { + line.package_id = false; + } + } + if (location_dest_id) { + if (typeof location_dest_id === 'number') { + location_dest_id = this.cache.getRecord('stock.location', args.location_dest_id); + } + line.location_dest_id = location_dest_id; + } + } + + updateLineQty(virtualId, qty = 1) { + this.actionMutex.exec(() => { + const line = this.pageLines.find(l => l.virtual_id === virtualId); + this.updateLine(line, {qty_done: qty}); + this.trigger('update'); + }); + } + + get backordersDomain() { + return [["backorder_id", "=", this.resId]]; + } + + get barcodeInfo() { + if (this.isCancelled || this.isDone) { + return { + class: this.isDone ? 'picking_already_done' : 'picking_already_cancelled', + message: this.isDone ? + _t("This picking is already done") : + _t("This picking is cancelled"), + icon: "exclamation-triangle", + warning: true, + }; + } + // Takes the parent line if the current line is part of a group. + const parentLine = this._getParentLine(this.selectedLine); + const line = parentLine && this.getQtyDemand(parentLine) ? parentLine : this.selectedLine; + // Defines some messages who can appear in multiple cases. + const infos = { + scanScrLoc: { + message: this.considerPackageLines && !this.config.restrict_scan_source_location ? + _t("Scan the source location or a package") : + _t("Scan the source location"), + class: 'scan_src', + icon: 'sign-out', + }, + scanDestLoc: { + message: _t("Scan the destination location"), + class: 'scan_dest', + icon: 'sign-in', + }, + scanProductOrDestLoc: { + message: this.considerPackageLines ? + _t("Scan a product, a package or the destination location.") : + _t("Scan a product or the destination location."), + class: 'scan_product_or_dest', + }, + scanPackage: { + message: this._getScanPackageMessage(line), + class: "scan_package", + icon: 'archive', + }, + scanLot: { + message: _t("Scan a lot number"), + class: "scan_lot", + icon: "barcode", + }, + scanSerial: { + message: _t("Scan a serial number"), + class: "scan_serial", + icon: "barcode", + }, + pressValidateBtn: { + message: _t("Press Validate or scan another product"), + class: 'scan_validate', + icon: 'check-square', + }, + }; + let barcodeInfo = { + message: _t("Scan a product"), + class: "scan_product", + icon: "tags", + }; + if ((line || this.lastScanned.packageId) && this.groups.group_stock_multi_locations) { + if (this.record.picking_type_code === "outgoing" && this.useScanSourceLocation) { + barcodeInfo = { + message: _t("Scan more products, or scan a new source location"), + class: "scan_product_or_src", + }; + } else if (this.config.restrict_scan_dest_location != "no") { + barcodeInfo = infos.scanProductOrDestLoc; + } + } + + if (!line && this._moveEntirePackage()) { // About package lines. + const packageLine = this.selectedPackageLine; + if (packageLine) { + if (this._lineIsComplete(packageLine)) { + if (this.config.restrict_scan_source_location && !this.lastScanned.sourceLocation) { + return infos.scanScrLoc; + } else if (this.config.restrict_scan_dest_location != 'no' && !this.lastScanned.destLocation) { + return this.config.restrict_scan_dest_location == 'mandatory' ? + infos.scanDestLoc : + infos.scanProductOrDestLoc; + } else if (this.pageIsDone) { + return infos.pressValidateBtn; + } else { + barcodeInfo.message = _t("Scan a product or another package"); + barcodeInfo.class = 'scan_product_or_package'; + } + } else { + barcodeInfo.message = _t("Scan the package %s", packageLine.result_package_id.name); + barcodeInfo.icon = 'archive'; + } + return barcodeInfo; + } else if (this.considerPackageLines && barcodeInfo.class == 'scan_product') { + barcodeInfo.message = _t("Scan a product or a package"); + barcodeInfo.class = 'scan_product_or_package'; + } + } + if (barcodeInfo.class === "scan_product" && !(line || this.lastScanned.packageId) && + this.config.restrict_scan_source_location && this.lastScanned.sourceLocation) { + barcodeInfo.message = _t( + "Scan a product from %s", + this.lastScanned.sourceLocation.name + ); + } + + // About source location. + if (this.useScanSourceLocation) { + if (!this.lastScanned.sourceLocation && !this.pageIsDone) { + return infos.scanScrLoc; + } else if (this.lastScanned.sourceLocation && this.lastScanned.destLocation == 'no' && + line && this._lineIsComplete(line)) { + if (this.config.restrict_put_in_pack === 'mandatory' && !line.result_package_id) { + return { + message: _t("Scan a package"), + class: 'scan_package', + icon: 'archive', + }; + } + return infos.scanScrLoc; + } + } + + if (!line) { + if (this.pageIsDone) { // All is done, says to validate the transfer. + return infos.pressValidateBtn; + } else if (this.config.lines_need_to_be_packed) { + const lines = new Array(...this.pageLines, ...this.packageLines); + if (lines.every(line => !this._lineIsNotComplete(line)) && + lines.some(line => this._lineNeedsToBePacked(line))) { + return infos.scanPackage; + } + } + return barcodeInfo; + } + const product = line.product_id; + + // About tracking numbers. + if (product.tracking !== 'none') { + const isLot = product.tracking === "lot"; + if (this.getQtyDemand(line) && (line.lot_id || line.lot_name)) { // Reserved. + if (this.getQtyDone(line) === 0) { // Lot/SN not scanned yet. + return isLot ? infos.scanLot : infos.scanSerial; + } else if (this.getQtyDone(line) < this.getQtyDemand(line)) { // Lot/SN scanned but not enough. + barcodeInfo = isLot ? infos.scanLot : infos.scanSerial; + barcodeInfo.message = isLot ? + _t("Scan more lot numbers") : + _t("Scan another serial number"); + return barcodeInfo; + } + } else if (!(line.lot_id || line.lot_name)) { // Not reserved. + return isLot ? infos.scanLot : infos.scanSerial; + } + } + + // About package. + if (this._lineNeedsToBePacked(line)) { + if (this._lineIsComplete(line)) { + return infos.scanPackage; + } + if (product.tracking == 'serial') { + barcodeInfo.message = _t("Scan a serial number or a package"); + } else if (product.tracking == 'lot') { + barcodeInfo.message = line.qty_done == 0 ? + _t("Scan a lot number") : + _t("Scan more lot numbers or a package"); + barcodeInfo.class = "scan_lot"; + } else { + barcodeInfo.message = _t("Scan more products or a package"); + } + return barcodeInfo; + } + + if (this.pageIsDone) { + barcodeInfo = infos.pressValidateBtn; + } + + // About destination location. + const lineWaitingPackage = this.groups.group_tracking_lot && this.config.restrict_put_in_pack != "no" && !line.result_package_id; + if (this.config.restrict_scan_dest_location != 'no' && line.qty_done) { + if (this.pageIsDone) { + if (this.lastScanned.destLocation) { + return infos.pressValidateBtn; + } else { + return this.config.restrict_scan_dest_location == 'mandatory' && this._lineIsComplete(line) ? + infos.scanDestLoc : + infos.scanProductOrDestLoc; + } + } else if (this._lineIsComplete(line)) { + if (lineWaitingPackage) { + barcodeInfo.message = this.config.restrict_scan_dest_location == 'mandatory' ? + _t("Scan a package or the destination location") : + _t("Scan a package, the destination location or another product"); + } else { + return this.config.restrict_scan_dest_location == 'mandatory' ? + infos.scanDestLoc : + infos.scanProductOrDestLoc; + } + } else { + barcodeInfo = infos.scanProductOrDestLoc; + if (product.tracking == 'serial') { + barcodeInfo.message = lineWaitingPackage ? + _t("Scan a serial number or a package then the destination location") : + _t("Scan a serial number then the destination location"); + } else if (product.tracking == 'lot') { + barcodeInfo.message = lineWaitingPackage ? + _t("Scan a lot number or a packages then the destination location") : + _t("Scan a lot number then the destination location"); + } else { + barcodeInfo.message = lineWaitingPackage ? + _t("Scan a product, a package or the destination location") : + _t("Scan a product then the destination location"); + } + } + } + + return barcodeInfo; + } + + get canBeProcessed() { + return !['cancel', 'done'].includes(this.record.state); + } + + /** + * Depending of the config, a transfer can be fully validate even if nothing was scanned (like + * with an immediate transfer) or if at least one product was scanned. + * @returns {boolean} + */ + get canBeValidate() { + if (!this._useReservation) { + return super.canBeValidate; // For immediate transfers, doesn't care about any special condition. + } else if (!this.config.barcode_validation_full && !this.currentState.lines.some(line => line.qty_done)) { + return false; // Can't be validate because "full validation" is forbidden and nothing was processed yet. + } + return super.canBeValidate; + } + + get cancelLabel() { + return _t("Cancel Transfer"); + } + + get canCreateNewLot() { + return this.record.use_create_lots; + } + + get canPutInPack() { + if (this.config.restrict_scan_product) { + return this.pageLines.some(line => line.qty_done && !line.result_package_id); + } + return true; + } + + get canScrap() { + const { picking_type_code, state } = this.record; + return (picking_type_code === "incoming" && state === "done") || + (picking_type_code === "outgoing" && state !== "done") || + (picking_type_code === "internal"); + } + + get canSelectLocation() { + return !(this.config.restrict_scan_source_location || this.config.restrict_scan_dest_location != 'optional'); + } + + shouldSplitLine(line) { + return line.qty_done && line.reserved_uom_qty && line.qty_done < line.reserved_uom_qty; + } + + /** + * Splits a line if its qty done is less than reserved. + * In case of a grouped line, if there's is a lot id or product tracking is serial, + * the new line doesn't need to be splitted since there is an existing line + * that will be grouped seperately after location is changed. + * + * @returns {Boolean|Object} Returns the new splitted line or false if line can't be split. + */ + async splitLine(line) { + if (!this.shouldSplitLine(line)) { + return false; + } + // Use line's locations otherwise the picking's locations are used as default locations. + const fieldsParams = { + location_id: line.location_id.id, + location_dest_id: line.location_dest_id.id, + }; + const newLine = await this._createNewLine({ copyOf: line, fieldsParams }); + // Update the reservation of the both old and new lines. + newLine.reserved_uom_qty = line.reserved_uom_qty - line.qty_done; + line.reserved_uom_qty = line.qty_done; + // Be sure the new line has no lot by default. + newLine.lot_id = false; + newLine.lot_name = false; + + return newLine; + } + + /** + * The line's destination is changed to the given location, and if the line's reservation isn't + * fulfilled, the remaining qties are moved to a new line with the original destination location. + * + * @param {int} id location's id + */ + async changeDestinationLocation(id, selectedLine) { + if (selectedLine.lines && !selectedLine.isPackageLine) { + this._clearScanData(); + return false; + } + if (!selectedLine.lot_id) { + await this.splitLine(selectedLine); + } + // If the line has no reservation and is grouped with sibling lines, + // checks if we can assign to it a part of the reservation. + const parentLine = this._getParentLine(selectedLine); + if (selectedLine.product_id.tracking === "lot" && + parentLine && selectedLine.qty_done && !selectedLine.reserved_uom_qty) { + // Searches for a line with uncomplete reservation. + const uncompletedLine = parentLine.lines.find( + line => line.reserved_uom_qty && line.qty_done < line.reserved_uom_qty + ); + if (uncompletedLine) { + // Checks if a portion of the reservation can be assign to the current line. + const remainingQty = Math.max( + 0, uncompletedLine.reserved_uom_qty - uncompletedLine.qty_done + ); + const stolenReservation = Math.min(remainingQty, selectedLine.qty_done); + if (stolenReservation) { + // Assigns the reservation on the current line. + uncompletedLine.reserved_uom_qty -= stolenReservation; + selectedLine.reserved_uom_qty = stolenReservation; + } + } + } + selectedLine.location_dest_id = this.cache.getRecord('stock.location', id); + this._markLineAsDirty(selectedLine); + this._clearScanData(); + return true; + } + + _clearScanData() { + this.selectedLineVirtualId = false; + this.location = false; + this.lastScanned.packageId = false; + this.lastScanned.product = false; + this.scannedLinesVirtualId = []; + } + + get considerPackageLines() { + return this._moveEntirePackage() && this.packageLines.length; + } + + get displayCancelButton() { + return !['done', 'cancel'].includes(this.record.state); + } + + get displayDestinationLocation() { + return this.groups.group_stock_multi_locations && + ['incoming', 'internal'].includes(this.record.picking_type_code) + } + + get displayPutInPackButton() { + return this.groups.group_tracking_lot && this.config.restrict_put_in_pack != 'no'; + } + + get displayResultPackage() { + return true; + } + + get displaySourceLocation() { + return super.displaySourceLocation && + ['internal', 'outgoing'].includes(this.record.picking_type_code); + } + + get useScanSourceLocation() { + return super.useScanSourceLocation && this.config.restrict_scan_source_location + } + + get useScanDestinationLocation() { + return super.useScanDestinationLocation && this.config.restrict_scan_dest_location != 'no'; + } + + get displayValidateButton() { + return true; + } + + get highlightValidateButton() { + if (!this.pageLines.length && !this.packageLines.length) { + return false; + } + if (this.config.restrict_scan_dest_location == 'mandatory' && + !this.lastScanned.destLocation && this.selectedLine) { + return false; + } + for (let line of this.pageLines) { + line = this._getParentLine(line) || line; + if (this._lineIsNotComplete(line)) { + return false; + } + } + for (const packageLine of this.packageLines) { + if (this._lineIsNotComplete(packageLine)) { + return false; + } + } + return Boolean([...this.pageLines, ...this.packageLines].length); + } + + get isDone() { + return this.record.state === 'done'; + } + + get isCancelled() { + return this.record.state === 'cancel'; + } + + lineIsFaulty(line) { + return this._useReservation && line.qty_done > line.reserved_uom_qty; + } + + get moveIds() { + return this.record.move_ids; + } + + get packageLines() { + if (!this._moveEntirePackage()) { + return []; + } + const linesWithPackage = this.currentState.lines.filter(line => line.package_id && line.result_package_id); + // Groups lines by package. + const groupedLines = {}; + for (const line of linesWithPackage) { + const packageId = line.package_id.id; + if (!groupedLines[packageId]) { + groupedLines[packageId] = []; + } + groupedLines[packageId].push(line); + } + const packageLines = []; + for (const key in groupedLines) { + // Check if the package is reserved. + const reservedPackage = groupedLines[key].every(line => this.lineIsReserved(line)); + groupedLines[key][0].reservedPackage = reservedPackage; + const packageLine = Object.assign({}, groupedLines[key][0], { + lines: groupedLines[key], + isPackageLine: true, + }); + packageLines.push(packageLine); + } + return this._sortLine(packageLines); + } + + get pageIsDone() { + for (const line of this.groupedLines) { + if (this._lineIsNotComplete(line) || this._lineNeedsToBePacked(line) || + (line.product_id.tracking != 'none' && !(line.lot_id || line.lot_name))) { + return false; + } + } + for (const line of this.packageLines) { + if (this._lineIsNotComplete(line)) { + return false; + } + } + return Boolean([...this.groupedLines, ...this.packageLines].length); + } + + /** + * Returns only the lines (filters out the package lines if relevant). + * @returns {Array} + */ + get pageLines() { + let lines = super.pageLines; + // If we show entire package, we don't return lines with package (they + // will be treated as "package lines"). + if (this._moveEntirePackage()) { + lines = lines.filter(line => !(line.package_id && line.result_package_id)); + } + return this._sortLine(lines); + } + + get previousScannedLinesByPackage() { + if (this.lastScanned.packageId) { + return this.currentState.lines.filter(l => l.result_package_id.id === this.lastScanned.packageId); + } + return []; + } + + get printButtons() { + const buttons = [ + { + name: _t("Print Picking Operations"), + class: 'o_print_picking', + method: 'do_print_picking', + }, { + name: _t("Print Delivery Slip"), + class: 'o_print_delivery_slip', + method: 'action_print_delivery_slip', + }, { + name: _t("Print Barcodes"), + class: 'o_print_barcodes', + method: 'action_print_barcode', + }, + ]; + if (this.groups.group_tracking_lot) { + buttons.push({ + name: _t("Print Packages"), + class: 'o_print_packages', + method: 'action_print_packges', + }); + } + if (this.canScrap) { + buttons.push({ + name: _t("Scrap"), + class: 'o_scrap', + method: 'button_scrap', + }); + } + + return buttons; + } + + get reloadingMoveLines() { + return this.currentState !== undefined; + } + + async beforeQuit() { + await super.beforeQuit(); + return this.orm.call("stock.move", "split_uncompleted_moves", [this.moveIds]); + } + + async save() { + if (this.linesToSave.length > 0) { + await this._setUser(); + } + return super.save(); + } + + get selectedPackageLine() { + return this.lastScanned.packageId && this.packageLines.find(pl => pl.result_package_id.id == this.lastScanned.packageId); + } + + get useExistingLots() { + return this.record.use_existing_lots; + } + + async validate() { + if (this.config.restrict_scan_dest_location == 'mandatory' && + !this.lastScanned.destLocation && this.selectedLine) { + return this.notification(_t("Destination location must be scanned"), { type: "danger" }); + } + if (this.config.lines_need_to_be_packed && + this.currentState.lines.some(line => this._lineNeedsToBePacked(line))) { + return this.notification(_t("All products need to be packed"), { type: "danger" }); + } + await this._setUser(); + if (this.config.create_backorder === 'ask') { + // If there are some uncompleted lines, displays the backorder dialog. + const uncompletedLines = []; + const alreadyChecked = []; + let atLeastOneLinePartiallyProcessed = false; + for (let line of this.currentState.lines) { + line = this._getParentLine(line) || line; + if (alreadyChecked.includes(line.virtual_id)) { + continue; + } + // Keeps track of already checked lines to avoid to check multiple times grouped lines. + alreadyChecked.push(line.virtual_id); + let qtyDone = line.qty_done; + if (qtyDone < line.reserved_uom_qty) { + // Checks if another move line shares the same move id and adds its quantity done in that case. + qtyDone += this.currentState.lines.reduce((additionalQtyDone, otherLine) => { + return otherLine.product_id.id === line.product_id.id + && otherLine.move_id === line.move_id + && !otherLine.reserved_uom_qty ? + additionalQtyDone + otherLine.qty_done : additionalQtyDone + }, 0); + if (qtyDone < line.reserved_uom_qty) { // Quantity done still insufficient. + uncompletedLines.push(line); + } + } + atLeastOneLinePartiallyProcessed = atLeastOneLinePartiallyProcessed || (qtyDone > 0); + } + if (this.showBackOrderDialog && atLeastOneLinePartiallyProcessed && uncompletedLines.length) { + this.trigger("playSound"); + return this.dialogService.add(BackorderDialog, { + displayUoM: this.groups.group_uom, + uncompletedLines, + onApply: () => super.validate(), + }); + } + } + if (this.record.return_id) { + this.validateContext = {...this.validateContext, picking_ids_not_to_backorder: this.resId}; + } + return await super.validate(); + } + + // ------------------------------------------------------------------------- + // Private + // ------------------------------------------------------------------------- + + async _assignEmptyPackage(line, resultPackage) { + const fieldsParams = this._convertDataToFieldsParams({ resultPackage }); + const parentLine = this._getParentLine(line); + const targetLines = parentLine ? parentLine.lines : [line] + for (const subline of targetLines) { // Assigns the result package on all sibling lines + if (subline === line || (subline.qty_done && !subline.result_package_id)) { + if (this.shouldSplitLine(subline)) { + // Subline has no package already and is only partially full, + // so we split off the remaining amount into a new move line + const newLine = await this.splitLine(subline); + [newLine.sortIndex, subline.sortIndex] = [subline.sortIndex, newLine.sortIndex] + if (subline === line) { + this.selectLine(newLine); + } + } + await this.updateLine(subline, fieldsParams); + } + } + } + + _getNewLineDefaultContext() { + return { + default_company_id: this.record.company_id, + default_location_id: this._defaultLocation().id, + default_location_dest_id: this._defaultDestLocation().id, + default_picking_id: this.resId, + default_qty_done: 1, + display_default_code: false, + hide_unlink_button: !this.selectedLine || this.selectedLine.reserved_uom_qty, + }; + } + + async _cancel() { + await this.save(); + await this.orm.call( + this.resModel, + 'action_cancel', + [[this.resId]] + ); + this._cancelNotification(); + this.trigger('history-back'); + } + + _cancelNotification() { + this.notification(_t("The transfer has been cancelled")); + } + + _checkBarcode(barcodeData) { + const check = { title: _t("Not the expected scan") }; + const { location, lot, product, destLocation, packageType } = barcodeData; + const resultPackage = barcodeData.package; + const packageWithQuant = (barcodeData.package && barcodeData.package.quant_ids || []).length; + + if (this.config.restrict_scan_source_location && !barcodeData.location) { + // Special case where the user can not scan a destination but a source was already scanned. + // That means what is supposed to be a destination is in this case a source. + if (this.lastScanned.sourceLocation && barcodeData.destLocation && + this.config.restrict_scan_dest_location == 'no') { + barcodeData.location = barcodeData.destLocation; + delete barcodeData.destLocation; + } + // Special case where the source is mandatory and the app's waiting for but none was + // scanned, get the previous scanned one if possible. + if (!this.lastScanned.sourceLocation && this._currentLocation) { + this.lastScanned.sourceLocation = this._currentLocation; + } + } + + if (this.config.restrict_scan_source_location && !this._currentLocation && !this.selectedLine) { // Source Location. + if (!location) { + check.title = _t("Mandatory Source Location"); + check.message = _t( + "You are supposed to scan %s or another source location", + this.location.display_name + ); + } + } else if (this.config.restrict_scan_product && // Restriction on product. + !(product || packageWithQuant || this.selectedLine) && // A product/package was scanned. + !(this.config.restrict_scan_source_location && location && !this.selectedLine) // Maybe the user scanned the wrong location and trying to scan the right one + ) { + check.message = lot ? + _t("Scan a product before scanning a tracking number") : + _t("You must scan a product"); + } else if (this.config.restrict_put_in_pack == 'mandatory' && !(resultPackage || packageType) && + this.selectedLine && !this.qty_done && !this.selectedLine.result_package_id && + ((product && product.id != this.selectedLine.product_id.id) || location || destLocation)) { // Package. + check.message = _t("You must scan a package or put in pack"); + } else if (this.config.restrict_scan_dest_location == 'mandatory' && !this.lastScanned.destLocation) { // Destination Location. + if (destLocation) { + this.lastScanned.destLocation = destLocation; + } else if (product && this.selectedLine && this.selectedLine.product_id.id != product.id) { + // Cannot scan another product before a destination was scanned. + check.title = _t("Mandatory Destination Location"); + check.message = _t( + "Please scan destination location for %s before scanning other product", + this.selectedLine.product_id.display_name + ); + } + } + check.error = Boolean(check.message); + return check; + } + + async _closeValidate(ev) { + const record = await this.orm.read(this.resModel, [this.record.id], ["state"]); + if (record[0].state === 'done') { + // Checks if the picking generated a backorder. Updates the picking's data if it's the case. + const backorders = await this.orm.searchRead( + this.backorderModel, + this.backordersDomain, + ["display_name", "id"]); + const buttons = backorders.map(bo => { + const additionalContext = { active_id: bo.id }; + return { + name: bo.display_name, + onClick: () => { + this.action.doAction(this.actionName, { additionalContext }); + }, + }; + }); + if (backorders.length) { + const phrase = backorders.length === 1 ? + _t("Following backorder was created:") : + _t("Following backorders were created:"); + this.validateMessage = `
+

${escape(this.validateMessage)}
${escape(phrase)}

+
`; + this.validateMessage = markup(this.validateMessage); + } + // If all is OK, displays a notification and goes back to the previous page. + this.notification(this.validateMessage, { type: "success", buttons }); + this.trigger('history-back'); + } + } + + _convertDataToFieldsParams(args) { + const params = { + lot_name: args.lotName, + product_id: args.product, + qty_done: args.quantity, + }; + if (args.lot) { + params.lot_id = args.lot; + } + if (args.package) { + params.package_id = args.package; + } + if (args.resultPackage) { + params.result_package_id = args.resultPackage; + } + if (args.owner) { + params.owner_id = args.owner; + } + if (args.destLocation) { + params.location_dest_id = args.destLocation.id; + } + return params; + } + + _createCommandVals(line) { + const values = { + dummy_id: line.virtual_id, + location_id: line.location_id, + location_dest_id: line.location_dest_id, + lot_name: line.lot_name, + lot_id: line.lot_id, + package_id: line.package_id, + picking_id: line.picking_id, + picked: true, + product_id: line.product_id, + product_uom_id: line.product_uom_id, + owner_id: line.owner_id, + quantity: line.qty_done, + result_package_id: line.result_package_id, + state: 'assigned', + }; + for (const [key, value] of Object.entries(values)) { + values[key] = this._fieldToValue(value); + } + return values; + } + + _getMoveLineData(id){ + const smlData = this.cache.getRecord('stock.move.line', id); + smlData.dummy_id = smlData.dummy_id && Number(smlData.dummy_id); + // Checks if this line is already in the picking's state to get back + // its `virtual_id` (and so, avoid to set a new `virtual_id`). + let prevLine = this.currentState?.lines.find(line => line.id === id); + if (!prevLine && smlData.dummy_id) { + prevLine = this.currentState?.lines.find(line => line.virtual_id === smlData.dummy_id); + } + const previousVirtualId = prevLine && prevLine.virtual_id; + smlData.virtual_id = smlData.dummy_id || previousVirtualId || this._uniqueVirtualId; + smlData.product_id = this.cache.getRecord('product.product', smlData.product_id); + smlData.product_uom_id = this.cache.getRecord('uom.uom', smlData.product_uom_id); + smlData.location_id = this.cache.getRecord('stock.location', smlData.location_id); + smlData.location_dest_id = this.cache.getRecord('stock.location', smlData.location_dest_id); + smlData.lot_id = smlData.lot_id && this.cache.getRecord('stock.lot', smlData.lot_id); + smlData.owner_id = smlData.owner_id && this.cache.getRecord('res.partner', smlData.owner_id); + smlData.package_id = smlData.package_id && this.cache.getRecord('stock.quant.package', smlData.package_id); + smlData.product_packaging_id = smlData.product_packaging_id && this.cache.getRecord('product.packaging', smlData.product_packaging_id); + + if (this.reloadingMoveLines) { + if (prevLine) { + if (smlData.quantity && !smlData.qty_done) { + // The reservation likely changed. + smlData.reserved_uom_qty = smlData.quantity; + } else { + // The reservation of this line is already known. + smlData.reserved_uom_qty = prevLine.reserved_uom_qty; + } + } else { + // This line was created in the Barcode App, so it has no reservation. + smlData.qty_done = smlData.quantity; + smlData.reserved_uom_qty = 0; + } + } else { + // First loading: `reserved_uom_qty` keeps in memory what is the + // initial reservation for this move line clientside only, this + // information is lost once the user closes the operation. + smlData.reserved_uom_qty = smlData.quantity; + } + + const resultPackage = smlData.result_package_id && this.cache.getRecord('stock.quant.package', smlData.result_package_id); + if (resultPackage) { // Fetch the package type if needed. + smlData.result_package_id = resultPackage; + const packageType = resultPackage && resultPackage.package_type_id; + resultPackage.package_type_id = packageType && this.cache.getRecord('stock.package.type', packageType); + } + return smlData; + } + + _createLinesState() { + const lines = []; + const picking = this.cache.getRecord(this.resModel, this.resId); + for (const id of picking.move_line_ids) { + const smlData = this._getMoveLineData(id); + lines.push(smlData); + } + return lines; + } + + _defaultLocation() { + return this.cache.getRecord('stock.location', this.record.location_id); + } + + _defaultDestLocation() { + return this.cache.getRecord('stock.location', this.record.location_dest_id); + } + + _getCommands() { + const commands = Object.assign(super._getCommands(), { + 'O-BTN.print-slip': this.print.bind(this, false, 'action_print_delivery_slip'), + 'O-BTN.print-op': this.print.bind(this, false, 'do_print_picking'), + "O-BTN.scrap": this._scrap.bind(this), + 'O-BTN.return': this._returnProducts.bind(this) + }); + if (!this.isDone) { + commands['O-BTN.pack'] = this._putInPack.bind(this); + commands['O-CMD.cancel'] = this._cancel.bind(this); + } + return commands; + } + + _getDefaultMessageType() { + if (this.useScanSourceLocation && !this.lastScanned.sourceLocation) { + return 'scan_src'; + } + return 'scan_product'; + } + + _getModelRecord() { + const record = this.cache.getRecord(this.resModel, this.resId); + if (record.picking_type_id && record.state !== "cancel") { + record.picking_type_id = this.cache.getRecord('stock.picking.type', record.picking_type_id); + } + return record; + } + + _getNewLineDefaultValues(fieldsParams) { + const defaultValues = super._getNewLineDefaultValues(...arguments); + if (this.selectedLine && !fieldsParams.move_id && + this.selectedLine.product_id.id === fieldsParams.product_id?.id) { + defaultValues.move_id = this.selectedLine.move_id; + } + return Object.assign(defaultValues, { + location_dest_id: this._defaultDestLocation(), + reserved_uom_qty: 0, + qty_done: 0, + picking_id: this.resId, + result_package_id: false, + }); + } + + _getFieldToWrite() { + return [ + 'location_id', + 'location_dest_id', + 'lot_id', + 'lot_name', + 'package_id', + 'owner_id', + 'qty_done', + 'result_package_id', + ]; + } + + _getSaveCommand() { + const commands = this._getSaveLineCommand(); + if (commands.length) { + return { + route: '/stock_barcode/save_barcode_data', + params: { + model: this.resModel, + res_id: this.resId, + write_field: 'move_line_ids', + write_vals: commands, + }, + }; + } + return {}; + } + + _getScanPackageMessage() { + return _t("Scan a package or put in pack"); + } + + _groupSublines(sublines, ids, virtual_ids, qtyDemand, qtyDone) { + return Object.assign(super._groupSublines(...arguments), { + reserved_uom_qty: qtyDemand, + qty_done: qtyDone, + }); + } + + _incrementTrackedLine() { + return !(this.record.use_create_lots || this.record.use_existing_lots); + } + + _lineIsComplete(line) { + let isComplete = line.reserved_uom_qty && line.qty_done >= line.reserved_uom_qty; + if (line.isPackageLine && !line.reserved_uom_qty && line.qty_done) { + return true; // For package line, considers an unreserved package as a completed line. + } + if (isComplete && line.lines) { // Grouped lines/package lines have multiple sublines. + for (const subline of line.lines) { + // For tracked product, a line with `qty_done` but no tracking number is considered as not complete. + if (subline.product_id.tracking != 'none') { + if (subline.qty_done && !(subline.lot_id || subline.lot_name)) { + return false; + } + } else if (subline.reserved_uom_qty && subline.qty_done < subline.reserved_uom_qty) { + return false; + } + } + } + return isComplete; + } + + _lineIsNotComplete(line) { + const currentLine = this._getParentLine(line) || line; + const isNotComplete = currentLine.reserved_uom_qty && currentLine.qty_done < currentLine.reserved_uom_qty; + if (!isNotComplete && currentLine.lines) { // Grouped lines/package lines have multiple sublines. + for (const subline of currentLine.lines) { + // For tracked product, a line with `qty_done` but no tracking number is considered as not complete. + if (subline.product_id.tracking != 'none') { + if (subline.qty_done && !(subline.lot_id || subline.lot_name)) { + return true; + } + } else if (subline.reserved_uom_qty && subline.qty_done < subline.reserved_uom_qty) { + return true; + } + } + } + return isNotComplete; + } + + _lineNeedsToBePacked(line) { + return Boolean( + this.config.lines_need_to_be_packed && line.qty_done && !line.result_package_id); + } + + _moveEntirePackage() { + return this.record.picking_type_entire_packs; + } + + async _processBarcode(barcode) { + if (this.isDone && !this.commands[barcode]) { + return this.notification(_t("This picking is already done"), { type: "danger" }); + } + return super._processBarcode(barcode); + } + + async _processLocation(barcodeData) { + super._processLocation(...arguments); + if (barcodeData.destLocation) { + await this._processLocationDestination(barcodeData); + this.trigger('update'); + } + } + + async _processLocationSource(barcodeData) { + // For planned transfers, check the scanned location is a part of transfer source location. + if (this._useReservation && !this._isSublocation(barcodeData.location, this._defaultLocation())) { + barcodeData.stopped = true; + const message = _t("The scanned location doesn't belong to this operation's location"); + return this.notification(message, { type: 'danger' }); + } + super._processLocationSource(...arguments); + // Splits uncompleted lines to be able to add reserved products from unreserved location. + let currentLine = this.selectedLine || this.lastScannedLine; + currentLine = this._getParentLine(currentLine) || currentLine; + if (currentLine && currentLine.location_id.id !== barcodeData.location.id){ + const qtyDone = this.getQtyDone(currentLine); + const reservedQty = this.getQtyDemand(currentLine); + const remainingQty = reservedQty - qtyDone; + if (this.shouldSplitLine(currentLine)) { + const fieldsParams = this._convertDataToFieldsParams(barcodeData); + let newLine; + if (currentLine.lines) { + for (const line of currentLine.lines) { + if (!line.reserved_uom_qty) { + line.reserved_uom_qty = line.qty_done; + } + if (this.shouldSplitLine(line) && !newLine) { + newLine = await this._createNewLine({ + copyOf: line, + fieldsParams, + }); + line.reserved_uom_qty = line.qty_done; + } + } + } else { + newLine = await this._createNewLine({ + copyOf: currentLine, + fieldsParams, + }); + } + currentLine.reserved_uom_qty = qtyDone; + if (newLine) { + newLine.reserved_uom_qty = remainingQty; + newLine.lot_id = false; + this._markLineAsDirty(newLine); + } + this._markLineAsDirty(currentLine); + } + } + } + + /** + * Returns true if the first given location is a sublocation of the second given location. + * @param {Object} childLocation + * @param {Object} parentLocation + * @returns {boolean} + */ + _isSublocation(childLocation, parentLocation) { + return childLocation.parent_path.includes(parentLocation.parent_path); + } + + _getLinesToMove() { + const configScanDest = this.config.restrict_scan_dest_location; + // Usually, assign the destination to the selected line or to the selected package's lines. + let lines = this.selectedPackageLine?.lines || this.selectedLine ? [this.selectedLine] : []; + if (configScanDest === "mandatory" && this.selectedLine?.product_id?.tracking !== "none") { + // When we assign the location to only the last scanned line, if the selected line is + // tracked, we want to assign the destination to its scanned sibling lines too. + const parentLine = this._getParentLine(this.selectedLine); + if (parentLine) { + lines = this.previousScannedLines.filter( + line => parentLine.virtual_ids.includes(line.virtual_id) + ); + } + } else if (configScanDest === "optional" && this.previousScannedLines?.length) { + // If config is "After group of Products", get all previously scanned lines. + for (const line of this.previousScannedLines) { + if (!lines.find(l => l.virtual_id === line.virtual_id)) { + lines.push(line); + } + } + } + if (this.previousScannedLinesByPackage?.length) { + // In case some lines were added by scanning a package, get those lines. + lines = this.previousScannedLinesByPackage; + } + + return Array.from(new Set(lines)); + } + + async _processLocationDestination(barcodeData) { + const configScanDest = this.config.restrict_scan_dest_location; + if (configScanDest == "no") { + return; + } + // For planned transfers, check the scanned location is a part of transfer destination. + if (this._useReservation && !this._isSublocation(barcodeData.destLocation, this._defaultDestLocation())) { + barcodeData.stopped = true; + const message = _t("The scanned location doesn't belong to this operation's destination"); + return this.notification(message, { type: 'danger' }); + } + + // Change the destination of all concerned lines. + const lines = this._getLinesToMove(); + for (const line of lines) { + await this.changeDestinationLocation(barcodeData.destLocation.id, line); + } + barcodeData.stopped = true; + } + + async _processPackage(barcodeData) { + const { packageName } = barcodeData; + const recPackage = barcodeData.package; + this.lastScanned.packageId = false; + if (barcodeData.packageType && !recPackage) { + // Scanned a package type and no existing package: make a put in pack (forced package type). + barcodeData.stopped = true; + return await this._processPackageType(barcodeData); + } else if (packageName && !recPackage) { + // Scanned a non-existing package: make a put in pack. + barcodeData.stopped = true; + return await this._putInPack({ default_name: packageName }); + } else if (!recPackage) { + return; // No package, package's type or package's name => Nothing to do. + } + const packLocation = recPackage.location_id + ? this.cache.dbIdCache['stock.location'][recPackage.location_id] + : false; + if (recPackage.location_id && !packLocation) { + // The package is in a location but the location was not found in the cache, + // surely because this location is not related to this picking. + return; + } + if (packLocation && packLocation.id !== this._defaultDestLocation().id && ( + (this.config.restrict_scan_source_location && packLocation.id !== this.location.id) || + (!this.config.restrict_scan_source_location && !this._isSublocation(packLocation, this.location)) + )) { + // Package is not located at the destination (result package) and is not located at the + // scanned source location (or one of its sublocations) neither. + return; + } + // If move entire package, checks if the scanned package matches a package line. + if (this._moveEntirePackage()) { + for (const packageLine of this.packageLines) { + if (packageLine.package_id.name !== (packageName || recPackage.name)) { + continue; + } + barcodeData.stopped = true; + if (packageLine.qty_done) { + this.lastScanned.packageId = packageLine.package_id.id; + const message = _t("This package is already scanned."); + this.notification(message, { type: "danger" }); + return this.trigger('update'); + } + for (const line of packageLine.lines) { + this.selectedLineVirtualId = line.virtual_id; + await this._updateLineQty(line, { qty_done: line.reserved_uom_qty }); + this._markLineAsDirty(line); + } + return this.trigger('update'); + } + } + // Scanned a package: fetches package's quant and creates a line for + // each of them, except if the package is already scanned. + // TODO: can check if quants already in cache to avoid to make a RPC if + // there is all in it (or make the RPC only on missing quants). + const res = await this.orm.call( + 'stock.quant', + 'get_stock_barcode_data_records', + [recPackage.quant_ids] + ); + this.cache.setCache(res.records); + const quants = res.records['stock.quant']; + // If the package is empty or is already at the destination location, + // assign it to the last scanned line. + const currentLine = this.selectedLine || this.lastScannedLine; + if (currentLine && (!quants.length || ( + !currentLine.result_package_id && recPackage.location_id === currentLine.location_dest_id.id))) { + let linesToUpdate = [currentLine]; + if (this.config.restrict_put_in_pack === "optional") { + linesToUpdate.push(...this.previousScannedLines.filter(line => { + return line.qty_done && !line.result_package_id && + line.virtual_id !== currentLine.virtual_id; + })); + } + for (const line of linesToUpdate) { + await this._assignEmptyPackage(line, recPackage); + } + barcodeData.stopped = true; + this.lastScanned.packageId = recPackage.id; + this.trigger('update'); + return; + } + + if (this.location && (!packLocation || !this._isSublocation(packLocation, this.location))) { + // Package not at the source location: can't add its content. + return; + } + // Checks if the package is already scanned. + let alreadyExisting = 0; + for (const line of this.pageLines) { + if (line.package_id && line.package_id.id === recPackage.id && + this.getQtyDone(line) > 0) { + alreadyExisting++; + } + } + if (alreadyExisting >= quants.length) { + barcodeData.error = _t("This package is already scanned."); + return; + } + + if (alreadyExisting) { + const userConfirmation = new Deferred(); + this.dialogService.add(ConfirmationDialog, { + body: _t("You have already scanned %s items of this package. Do you want to scan the whole package?", alreadyExisting), + title: _t("Scanning package"), + cancel: () => userConfirmation.resolve(false), + confirm: () => userConfirmation.resolve(true), + close: () => userConfirmation.resolve(false), + }); + if (!(await userConfirmation)) { + barcodeData.stopped = true; + return; + } + } + + // For each quants, creates or increments a barcode line. + for (const quant of quants) { + const product = this.cache.getRecord('product.product', quant.product_id); + const searchLineParams = Object.assign({}, barcodeData, { product }); + let remaining_qty = quant.quantity; + let qty_used = 0; + while (remaining_qty > 0) { + const currentLine = this._findLine(searchLineParams); + if (currentLine) { // Updates an existing line. + const qty_needed = Math.max(currentLine.reserved_uom_qty - currentLine.qty_done, 0); + qty_used = qty_needed ? Math.min(qty_needed, remaining_qty) : remaining_qty; + const fieldsParams = this._convertDataToFieldsParams({ + quantity: qty_used, + lotName: barcodeData.lotName, + lot: barcodeData.lot, + package: recPackage, + owner: barcodeData.owner, + }); + await this.updateLine(currentLine, fieldsParams); + } else { // Creates a new line. + qty_used = remaining_qty; + const fieldsParams = this._convertDataToFieldsParams({ + product, + quantity: qty_used, + lot: quant.lot_id, + package: quant.package_id, + resultPackage: quant.package_id, + owner: quant.owner_id, + }); + await this._createNewLine({ fieldsParams }); + } + remaining_qty -= qty_used; + } + } + barcodeData.stopped = true; + this.selectedLineVirtualId = false; + this.lastScanned.packageId = recPackage.id; + this.trigger('update'); + } + + async _processPackageType(barcodeData) { + const { packageType } = barcodeData; + const line = this.selectedLine; + if (!line || !line.qty_done) { + barcodeData.stopped = true; + const message = _t("You can't apply a package type. First, scan product or select a line"); + return this.notification(message, { type: "warning" }); + } + const resultPackage = line.result_package_id; + if (!resultPackage) { // No package on the line => Do a put in pack. + const additionalContext = { default_package_type_id: packageType.id }; + if (barcodeData.packageName) { + additionalContext.default_name = barcodeData.packageName; + } + await this._putInPack(additionalContext); + } else if (resultPackage.package_type_id.id !== packageType.id) { + // Changes the package type for the scanned one. + await this.save(); + await this.orm.write('stock.quant.package', [resultPackage.id], { + package_type_id: packageType.id, + }); + const message = _t( + "Package type %s was correctly applied to the package %s", + packageType.name, + resultPackage.name + ); + this.notification(message, { type: "success" }); + this.trigger('refresh'); + } + } + + async _putInPack(additionalContext = {}) { + const context = Object.assign({ barcode_view: true }, additionalContext); + if (!this.groups.group_tracking_lot) { + return this.notification( + _t("To use packages, enable 'Packages' in the settings"), + { type: 'danger'} + ); + } + // Before the put in pack, create a new empty move line with the remaining + // quantity for each uncompleted move line who will be packaged. + for (const line of this.pageLines) { + if (line.result_package_id || !this.shouldSplitLine(line)) { + continue; // Line is already in a package or no quantity to process. + } + await this.splitLine(line); + } + await this.save(); + const result = await this.orm.call( + this.resModel, + 'action_put_in_pack', + [[this.resId]], + { context } + ); + if (typeof result === 'object') { + this.trigger('process-action', result); + } else { + this.trigger('refresh'); + } + } + + async _returnProducts() { + if (!this.isDone) { + return this.notification( + _t("Returns can only be created for pickings that are done, please validate first."), + { type: 'danger'} + ); + } + const action = await this.orm.call( + this.resModel, + 'action_create_return_picking', + [[this.resId]] + ) + return this.action.doAction(action, { stackPosition: "replaceCurrentAction" }); + } + + async _scrap() { + if (!this.canScrap) { + const message = _t("You can't register scrap at this state of the operation"); + return this.notification(message, { type: "warning" }); + } + const action = await this.orm.call(this.resModel, "button_scrap", [[this.resId]]); + this.action.doAction(action); + } + + /** + * Set the pickings's responsible to the active user. + */ + async _setUser() { + if (this.record.id && this.record.user_id != session.uid) { + this.record.user_id = session.uid; + await this.orm.write(this.resModel, [this.record.id], { user_id: session.uid }); + } + } + + _setLocationFromBarcode(result, location) { + if (this.record.picking_type_code === 'outgoing') { + result.location = location; + } else if (this.record.picking_type_code === 'incoming') { + result.destLocation = location; + } else if (this.previousScannedLines.length || this.previousScannedLinesByPackage.length) { + if (this.config.restrict_scan_source_location && this.config.restrict_scan_dest_location === 'no' + && this.barcodeInfo.class != 'scan_dest') { + result.location = location; + } else { + result.destLocation = location; + } + } else { + result.location = location; + } + return result; + } + + _sortingMethod(l1, l2) { + const l1IsCompleted = this._lineIsComplete(l1); + const l2IsCompleted = this._lineIsComplete(l2); + // Complete lines always on the bottom. + if (!l1IsCompleted && l2IsCompleted) { + return -1; + } else if (l1IsCompleted && !l2IsCompleted) { + return 1; + } + return super._sortingMethod(...arguments); + } + + _updateLineQty(line, args) { + if (line.product_id.tracking === 'serial' && line.qty_done > 0 && (this.record.use_create_lots || this.record.use_existing_lots)) { + return; + } + if (args.qty_done) { + if (args.uom) { + // An UoM was passed alongside the quantity, needs to check it's + // compatible with the product's UoM. + const lineUOM = line.product_uom_id; + if (args.uom.category_id !== lineUOM.category_id) { + // Not the same UoM's category -> Can't be converted. + const message = _t( + "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the line's one (%s).", + args.uom.name, + lineUOM.name + ); + return this.notification(message, { title: _t("Wrong Unit of Measure"), type: "danger" }); + } else if (args.uom.id !== lineUOM.id) { + // Compatible but not the same UoM => Need a conversion. + args.qty_done = (args.qty_done / args.uom.factor) * lineUOM.factor; + args.uom = lineUOM; + } + } + line.qty_done += args.qty_done; + this._setUser(); + } + } + + _updateLotName(line, lotName) { + line.lot_name = lotName; + } + + async _processGs1Data(data) { + const result = await super._processGs1Data(...arguments); + const { rule } = data; + if (result.location && (rule.type === 'location_dest' || this.barcodeInfo.class === 'scan_product_or_dest')) { + result.destLocation = result.location; + result.location = undefined; + } + return result; + } + + _getCompanyId() { + return this.record.company_id; + } +} diff --git a/stock_barcode/static/src/models/barcode_quant_model.js b/stock_barcode/static/src/models/barcode_quant_model.js new file mode 100644 index 0000000..69168c7 --- /dev/null +++ b/stock_barcode/static/src/models/barcode_quant_model.js @@ -0,0 +1,650 @@ +/** @odoo-module **/ + +import BarcodeModel from '@stock_barcode/models/barcode_model'; +import { _t } from "@web/core/l10n/translation"; + +export default class BarcodeQuantModel extends BarcodeModel { + constructor(params) { + super(...arguments); + this.lineModel = this.resModel; + this.validateMessage = _t("The inventory adjustment has been validated"); + this.validateMethod = 'action_validate'; + } + + /** + * Validates only the quants of the current inventory page and don't close it. + * + * @returns {Promise} + */ + async apply() { + await this.save(); + const linesToApply = this.pageLines.filter(line => line.inventory_quantity_set); + if (linesToApply.length === 0) { + const message = _t("There is nothing to apply in this page."); + return this.notification(message, { type: "warning" }); + } + const action = await this.orm.call('stock.quant', 'action_validate', + [linesToApply.map(quant => quant.id)] + ); + const notifyAndGoAhead = res => { + if (res && res.special) { // Do nothing if come from a discarded wizard. + return this.trigger('refresh'); + } + this.notification(_t("The inventory adjustment has been validated"), { type: "success" }); + this.trigger('history-back'); + }; + if (action && action.res_model) { + return this.action.doAction(action, { onClose: notifyAndGoAhead }); + } + notifyAndGoAhead(); + } + + get applyOn() { + return this.pageLines.filter(line => line.inventory_quantity_set).length; + } + + get barcodeInfo() { + // Takes the parent line if the current line is part of a group. + let line = this._getParentLine(this.selectedLine) || this.selectedLine; + if (!line && this.lastScanned.packageId) { + line = this.pageLines.find(l => l.package_id && l.package_id.id === this.lastScanned.packageId); + } + // Defines some messages who can appear in multiple cases. + const messages = { + scanProduct: { + class: 'scan_product', + message: _t("Scan a product"), + icon: 'tags', + }, + scanLot: { + class: 'scan_lot', + message: _t( + "Scan lot numbers for product %s to change their quantity", + line ? line.product_id.display_name : "" + ), + icon: 'barcode', + }, + scanSerial: { + class: 'scan_serial', + message: _t( + "Scan serial numbers for product %s to change their quantity", + line ? line.product_id.display_name : "" + ), + icon: 'barcode', + }, + }; + + if (line) { // Message depends of the selected line's state. + const { tracking } = line.product_id; + const trackingNumber = (line.lot_id && line.lot_id.name) || line.lot_name; + if (this._lineIsNotComplete(line)) { + if (tracking !== 'none') { + return tracking === 'lot' ? messages.scanLot : messages.scanSerial; + } + return messages.scanProduct; + } else if (tracking !== 'none' && !trackingNumber) { + // Line's quantity is fulfilled but still waiting a tracking number. + return tracking === 'lot' ? messages.scanLot : messages.scanSerial; + } else { // Line's quantity is fulfilled. + if (this.groups.group_stock_multi_locations && line.location_id.id === this.location.id) { + return { + class: 'scan_product_or_src', + message: _t( + "Scan more products in %s or scan another location", + this.location.display_name + ), + }; + } + return messages.scanProduct; + } + } + // No line selected, returns default message (depends if multilocation is enabled). + if (this.groups.group_stock_multi_locations) { + if (!this.lastScanned.sourceLocation) { + return { + class: 'scan_src', + message: _t("Scan a location"), + icon: 'sign-out', + }; + } + return { + class: 'scan_product_or_src', + message: _t( + "Scan a product in %s or scan another location", + this.location.display_name + ), + }; + } + return messages.scanProduct; + } + + get displayByUnitButton () { + return true; + } + + get displaySetButton() { + return true; + } + + setData(data) { + this.userId = data.data.user_id; + super.setData(...arguments); + const companies = data.data.records['res.company']; + this.companyIds = companies.map(company => company.id); + this.lineFormViewId = data.data.line_view_id; + } + + get displayApplyButton() { + return true; + } + + getDisplayIncrementBtn(line) { + return super.getDisplayIncrementBtn(...arguments) && this.selectedLineVirtualId && + line.virtual_id === this.selectedLineVirtualId; + } + + getDisplayDecrementBtn(line) { + return this.getDisplayIncrementBtn(line); + } + + getQtyDone(line) { + return line.inventory_quantity_set ? line.inventory_quantity : 0; + } + + getQtyDemand(line) { + return line.quantity; + } + + getActionRefresh(newId) { + const action = super.getActionRefresh(newId); + action.params.res_id = this.currentState.lines.map(l => l.id); + if (newId) { + action.params.res_id.push(newId); + } + return action; + } + + get highlightValidateButton() { + return this.applyOn > 0 && this.applyOn === this.pageLines.length; + } + + IsNotSet(line) { + return !line.inventory_quantity_set; + } + + lineIsFaulty(line) { + return line.inventory_quantity_set && line.inventory_quantity !== line.quantity; + } + + get printButtons() { + return [{ + name: _t("Print Inventory"), + class: 'o_print_inventory', + action: 'stock.action_report_inventory', + }]; + } + + get recordIds() { + return this.currentState.lines.map(l => l.id); + } + + /** + * Marks the line as set and set its inventory quantity if it was unset, or + * unset it if the line was already set. + * + * @param {Object} line + */ + setOnHandQuantity(line) { + if (line.product_id.tracking === 'serial') { // Special case for product tracked by SN. + const quantity = !(line.lot_name || line.lot_id) && line.quantity || 1; + if (line.inventory_quantity_set) { + line.inventory_quantity = line.inventory_quantity ? 0 : quantity; + line.inventory_quantity_set = line.inventory_quantity != quantity; + } else { + line.inventory_quantity = quantity; + line.inventory_quantity_set = true; + } + this._markLineAsDirty(line); + } else { + if (line.inventory_quantity_set) { + line.inventory_quantity = 0; + line.inventory_quantity_set = false; + this._markLineAsDirty(line); + } else { + const inventory_quantity = line.quantity - line.inventory_quantity; + this.updateLine(line, { inventory_quantity }); + line.inventory_quantity_set = true; + } + } + this.trigger('update'); + } + + updateLineQty(virtualId, qty = 1) { + this.actionMutex.exec(() => { + const line = this.pageLines.find(l => l.virtual_id === virtualId); + this.updateLine(line, {inventory_quantity: qty}); + this.trigger('update'); + }); + } + + // -------------------------------------------------------------------------- + // Private + // -------------------------------------------------------------------------- + + _getCommands() { + return Object.assign(super._getCommands(), { + 'O-BTN.apply': this.apply.bind(this), + }); + } + + _getNewLineDefaultContext() { + return { + default_company_id: this.companyIds[0], + default_location_id: this._defaultLocation().id, + default_inventory_quantity: 1, + default_user_id: this.userId, + inventory_mode: true, + display_default_code: false, + }; + } + + _createCommandVals(line) { + const values = { + dummy_id: line.virtual_id, + inventory_date: line.inventory_date, + inventory_quantity: line.inventory_quantity, + inventory_quantity_set: line.inventory_quantity_set, + location_id: line.location_id, + lot_id: line.lot_id, + lot_name: line.lot_name, + package_id: line.package_id, + product_id: line.product_id, + owner_id: line.owner_id, + user_id: this.userId, + }; + for (const [key, value] of Object.entries(values)) { + values[key] = this._fieldToValue(value); + } + return values; + } + + async _createNewLine(params) { + // When creating a new line, we need to know if a quant already exists + // for this line, and in this case, update the new line fields. + const product = params.fieldsParams.product_id; + if (product.detailed_type != 'product') { + const productName = (product.default_code ? `[${product.default_code}] ` : '') + product.display_name; + const message = _t( + "%s can't be inventoried. Only storable products can be inventoried.", + productName + ); + this.notification(message, { type: "warning" }); + return false; + } + const domain = [ + ['location_id', '=', this.location.id], + ['product_id', '=', product.id], + ]; + const { lot_id, package_id } = params.fieldsParams; + if (product.tracking !== 'none') { + if (params.fieldsParams.lot_name) { // Search for a quant with the exact same lot. + domain.push(['lot_id.name', '=', params.fieldsParams.lot_name]); + } else if (params.fieldsParams.lot_id) { // Search for a quant with the exact same lot. + domain.push(['lot_id', '=', lot_id.id || lot_id]); + } + } + if (params.fieldsParams.package_id) { + domain.push(['package_id', '=', package_id.id || package_id]); + } + const res = await this.orm.call( 'stock.quant', 'get_existing_quant_and_related_data', [domain]); + this.cache.setCache(res.records); + const quants = res.records['stock.quant']; + if (quants.length === 1 && ( + product.tracking === 'none' || params.fieldsParams.lot_name || params.fieldsParams.lot_id)) { + const inventory_quantity = params.fieldsParams.inventory_quantity || 1; + params.fieldsParams = Object.assign({}, params.fieldsParams, { inventory_quantity }); + } + let newLine = false; + if (quants.length) { // Found existing quants: create a line for each one. + const lineIds = this.currentState.lines.map(l => l.id); + for (const quant of quants) { + if (lineIds.includes(quant.id)) { + continue; // Don't create line for quant if there is already a line for it. + } + const lineParams = { + fieldsParams: Object.assign({}, quant, params.fieldsParams), + }; + const newlyCreatedLine = await super._createNewLine(lineParams); + this.selectedLineVirtualId = newlyCreatedLine.virtual_id; + // Keeps the first created line so that the one who will be selected. + newLine = newLine || newlyCreatedLine; + // If the quant already exits, we add it into the `initialState` to + // avoid comparison issue with the `currentState` when the save occurs. + const lineWithOriginalQuantValues = Object.assign({}, newlyCreatedLine, { + inventory_date: quant.inventory_date, + inventory_quantity: quant.inventory_quantity, + inventory_quantity_set: quant.inventory_quantity_set, + quantity: quant.quantity, + user_id: quant.user_id, + }); + this.initialState.lines.push(lineWithOriginalQuantValues); + } + } else { // No existing quant: creates an empty new line. + newLine = await super._createNewLine(params); + } + return newLine; + } + + _convertDataToFieldsParams(args) { + const params = {}; + const argsPackage = args.package || args.resultPackage; + // Set the fields in `params` only if they are in `args`. + args.quantity && (params.inventory_quantity = args.quantity); + args.lot && (params.lot_id = args.lot); + args.lotName && (params.lot_name = args.lotName); + args.owner && (params.owner_id = args.owner); + argsPackage && (params.package_id = argsPackage); + args.product && (params.product_id = args.product); + args.product && args.product.uom_id && (params.product_uom_id = args.product.uom_id); + return params; + } + + _getNewLineDefaultValues(fieldsParams) { + const defaultValues = super._getNewLineDefaultValues(...arguments); + Object.assign(defaultValues, { + inventory_date: new Date().toISOString().slice(0, 10), + inventory_quantity: 0, + quantity: (fieldsParams && fieldsParams.quantity) || 0, + user_id: this.userId, + }); + // Marks the new line's quantity as set only if it's not an existing quant (no `quantity`) + // or if it already has a counted quantity. It's to avoid tragedy if the user applies by + // mistake the inventory adjustment after scanned a product with multiple serial/lot numbers + if (fieldsParams.quantity === undefined || fieldsParams.inventory_quantity) { + defaultValues.inventory_quantity_set = true; + } + return defaultValues + } + + _getFieldToWrite() { + return [ + 'inventory_date', + 'inventory_quantity', + 'inventory_quantity_set', + 'user_id', + 'location_id', + 'lot_name', + 'lot_id', + 'package_id', + 'owner_id', + ]; + } + + _getSaveCommand() { + const commands = this._getSaveLineCommand(); + if (commands.length) { + return { + route: '/stock_barcode/save_barcode_data', + params: { + model: this.resModel, + res_id: false, + write_field: false, + write_vals: commands, + }, + }; + } + return {}; + } + + _groupSublines(sublines, ids, virtual_ids, qtyDemand, qtyDone) { + return Object.assign(super._groupSublines(...arguments), { + inventory_quantity: qtyDone, + quantity: qtyDemand, + }); + } + + _lineIsNotComplete(line) { + return line.inventory_quantity === 0; + } + + async _processPackage(barcodeData) { + const { packageType, packageName } = barcodeData; + let recPackage = barcodeData.package; + this.lastScanned.packageId = false; + if (!recPackage && !packageType && !packageName) { + return; // No Package data to process. + } + // Scan a new package and/or a package type -> Create a new package with those parameters. + const currentLine = this.selectedLine || this.lastScannedLine; + if (currentLine.package_id && packageType && + !recPackage && ! packageName && + currentLine.package_id.id !== packageType) { + // Changes the package type for the scanned one. + await this.orm.write('stock.quant.package', [currentLine.package_id.id], { + package_type_id: packageType.id, + }); + const message = _t( + "Package type %s was correctly applied to the package %s", + packageType.name, + currentLine.package_id.name + ); + barcodeData.stopped = true; + return this.notification(message, { type: "success" }); + } + if (!recPackage) { + if (currentLine && !currentLine.package_id) { + const valueList = {}; + if (packageName) { + valueList.name = packageName; + } + if (packageType) { + valueList.package_type_id = packageType.id; + } + const newPackageData = await this.orm.call( + 'stock.quant.package', + 'action_create_from_barcode', + [valueList] + ); + this.cache.setCache(newPackageData); + recPackage = newPackageData['stock.quant.package'][0]; + } + } + if (!recPackage && packageName) { + const currentLine = this.selectedLine || this.lastScannedLine; + if (currentLine && !currentLine.package_id) { + const newPackageData = await this.orm.call( + 'stock.quant.package', + 'action_create_from_barcode', + [{ name: packageName }] + ); + this.cache.setCache(newPackageData); + recPackage = newPackageData['stock.quant.package'][0]; + } + } + if (!recPackage || ( + recPackage.location_id && recPackage.location_id != this.location.id + )) { + return; + } + // TODO: can check if quants already in cache to avoid to make a RPC if + // there is all in it (or make the RPC only on missing quants). + const res = await this.orm.call( + 'stock.quant', + 'get_stock_barcode_data_records', + [recPackage.quant_ids] + ); + const quants = res.records['stock.quant']; + if (!quants.length) { // Empty package => Assigns it to the last scanned line. + const currentLine = this.selectedLine || this.lastScannedLine; + if (currentLine && !currentLine.package_id && !currentLine.result_package_id) { + const fieldsParams = this._convertDataToFieldsParams({ + resultPackage: recPackage, + }); + await this.updateLine(currentLine, fieldsParams); + barcodeData.stopped = true; + this.selectedLineVirtualId = false; + this.lastScanned.packageId = recPackage.id; + this.trigger('update'); + } + return; + } + this.cache.setCache(res.records); + + // Checks if the package is already scanned. + let alreadyExisting = 0; + for (const line of this.pageLines) { + if (line.package_id && line.package_id.id === recPackage.id && + this.getQtyDone(line) > 0) { + alreadyExisting++; + } + } + if (alreadyExisting === quants.length) { + barcodeData.error = _t("This package is already scanned."); + return; + } + // For each quants, creates or increments a barcode line. + for (const quant of quants) { + const product = this.cache.getRecord('product.product', quant.product_id); + const searchLineParams = Object.assign({}, barcodeData, { product }); + const currentLine = this._findLine(searchLineParams); + if (currentLine) { // Updates an existing line. + const fieldsParams = this._convertDataToFieldsParams({ + quantity: quant.quantity, + lotName: barcodeData.lotName, + lot: barcodeData.lot, + package: recPackage, + owner: barcodeData.owner, + }); + await this.updateLine(currentLine, fieldsParams); + } else { // Creates a new line. + const fieldsParams = this._convertDataToFieldsParams({ + product, + quantity: quant.quantity, + lot: quant.lot_id, + package: quant.package_id, + resultPackage: quant.package_id, + owner: quant.owner_id, + }); + const newLine = await this._createNewLine({ fieldsParams }); + newLine.inventory_quantity = quant.quantity; + } + } + barcodeData.stopped = true; + this.selectedLineVirtualId = false; + this.lastScanned.packageId = recPackage.id; + this.trigger('update'); + } + + _updateLineQty(line, args) { + if (args.quantity) { // Set stock quantity. + line.quantity = args.quantity; + } + if (args.inventory_quantity) { // Increments inventory quantity. + if (args.uom) { + // An UoM was passed alongside the quantity, needs to check it's + // compatible with the product's UoM. + const productUOM = this.cache.getRecord('uom.uom', line.product_id.uom_id); + if (args.uom.category_id !== productUOM.category_id) { + // Not the same UoM's category -> Can't be converted. + const message = _t( + "Scanned quantity uses %s as Unit of Measure, but this UoM is not compatible with the product's one (%s).", + args.uom.name, + productUOM.name + ); + return this.notification(message, { title: _t("Wrong Unit of Measure"), type: "warning" }); + } else if (args.uom.id !== productUOM.id) { + // Compatible but not the same UoM => Need a conversion. + args.inventory_quantity = (args.inventory_quantity / args.uom.factor) * productUOM.factor; + } + } + line.inventory_quantity += args.inventory_quantity; + line.inventory_quantity_set = true; + if (line.product_id.tracking === 'serial' && (line.lot_name || line.lot_id)) { + line.inventory_quantity = Math.max(0, Math.min(1, line.inventory_quantity)); + } + } + } + + async _updateLotName(line, lotName) { + if (line.lot_name === lotName) { + // No need to update the line's tracking number if it's already set. + return Promise.resolve(); + } + line.lot_name = lotName; + // Checks if a quant exists for this line and updates the line in this case. + const domain = [ + ['location_id', '=', line.location_id.id], + ['product_id', '=', line.product_id.id], + ['lot_id.name', '=', lotName], + ['owner_id', '=', line.owner_id && line.owner_id.id], + ['package_id', '=', line.package_id && line.package_id.id], + ]; + const existingQuant = await this.orm.searchRead( + 'stock.quant', + domain, + ['id', 'quantity'], + { limit: 1, load: false } + ); + if (existingQuant.length) { + Object.assign(line, existingQuant[0]); + if (line.lot_id) { + line.lot_id = await this.cache.getRecordByBarcode(lotName, 'stock.lot'); + } + } + } + + _canOverrideTrackingNumber(line, newLotName) { + return super._canOverrideTrackingNumber(...arguments) && (!line.id || line.lot_id); + } + + _createLinesState() { + const today = new Date().toISOString().slice(0, 10); + const lines = []; + for (const id of Object.keys(this.cache.dbIdCache['stock.quant']).map(id => Number(id))) { + const quant = this.cache.getRecord('stock.quant', id); + if (quant.user_id !== this.userId || quant.inventory_date > today) { + // Doesn't take quants who must be counted by another user or in the future. + continue; + } + // Checks if this line is already in the quant state to get back + // its `virtual_id` (and so, avoid to set a new `virtual_id`). + const prevLine = this.currentState && this.currentState.lines.find(l => l.id === id); + const previousVirtualId = prevLine && prevLine.virtual_id; + quant.dummy_id = quant.dummy_id && Number(quant.dummy_id); + quant.virtual_id = quant.dummy_id || previousVirtualId || this._uniqueVirtualId; + quant.product_id = this.cache.getRecord('product.product', quant.product_id); + quant.location_id = this.cache.getRecord('stock.location', quant.location_id); + quant.lot_id = quant.lot_id && this.cache.getRecord('stock.lot', quant.lot_id); + quant.package_id = quant.package_id && this.cache.getRecord('stock.quant.package', quant.package_id); + quant.owner_id = quant.owner_id && this.cache.getRecord('res.partner', quant.owner_id); + lines.push(Object.assign({}, quant)); + } + return lines; + } + + _getName() { + return _t("Inventory Adjustment"); + } + + _getPrintOptions() { + const options = super._getPrintOptions(); + const quantsToPrint = this.pageLines.filter(quant => quant.inventory_quantity_set); + if (quantsToPrint.length === 0) { + return { warning: _t("There is nothing to print in this page.") }; + } + options.additionalContext = { active_ids: quantsToPrint.map(quant => quant.id) }; + return options; + } + + _selectLine(line) { + if (this.selectedLineVirtualId !== line.virtual_id) { + // Unfolds the group where the line is, folds other lines' group. + this.unfoldLineKey = this.groupKey(line); + } + super._selectLine(...arguments); + } + + _getCompanyId() { + return this.companyIds[0]; + } +} diff --git a/stock_barcode/static/src/scss/form_view.scss b/stock_barcode/static/src/scss/form_view.scss new file mode 100644 index 0000000..9b63606 --- /dev/null +++ b/stock_barcode/static/src/scss/form_view.scss @@ -0,0 +1,7 @@ +.o_barcode_client_action .o_form_view { + @include media-breakpoint-down(sm) { + .o_form_nosheet { + padding-top: 8px; + } + } +} diff --git a/stock_barcode/static/src/scss/stock_barcode.dark.scss b/stock_barcode/static/src/scss/stock_barcode.dark.scss new file mode 100644 index 0000000..5bee681 --- /dev/null +++ b/stock_barcode/static/src/scss/stock_barcode.dark.scss @@ -0,0 +1,15 @@ +// = Stock Barcode +// ============================================================================ +// No CSS hacks, variables overrides only + +.o_barcode_client_action { + --barcode__header-bg: #{$o-gray-100}; + + --barcode__linesHeader-bg: #{$o-gray-300}; + + --barcode__line--completed: #1f5a2d; + --barcode__line--notCompleted: #303030; + + --barcode__input--completed: #262c26; + --barcode__input--notCompleted: #303030; +} diff --git a/stock_barcode/static/src/scss/stock_barcode.scss b/stock_barcode/static/src/scss/stock_barcode.scss new file mode 100644 index 0000000..54d4653 --- /dev/null +++ b/stock_barcode/static/src/scss/stock_barcode.scss @@ -0,0 +1,146 @@ +.o_stock_barcode_main_menu_container { + display: flex; + flex-flow: column nowrap; + justify-content: center; + align-items: center; + min-height: 100%; + + @include media-breakpoint-down(md) { + @include o-position-absolute(0, 0, 0, 0); + overflow-y: auto; + min-height: 0; + justify-content: flex-start; + } +} + +.o_stock_barcode_main_menu { + text-align: center; + padding: 24px 16px; + font-size: 1.2em; + overflow: auto; + width: 100%; + height: 100%; + + .o_stock_mobile_barcode_container{ + position: relative; + display: inline-block; + .o_stock_mobile_barcode{ + width: 100%; + bottom: 0px; + position: absolute; + opacity: 0.75; + font-size: 12px; + .o_mobile_barcode_camera{ + margin: 5px; + font-size: 2.2em; + } + } + } + + .o_stock_barcode_menu { + line-height: 1.9; + } + + .message_demo_barcodes { + font-size: 0.9em; + } + + >ul { + display: inline-block; + } + + .o_stock_barcode_container { + span.o_stock_barcode_laser { + @include o-position-absolute(50%, -15px, auto, -15px); + height: 5px; + background: rgba(red, 0.6); + box-shadow: 0 1px 10px 1px rgba(red, 0.8); + animation: o_barcode_scanner_intro 1s cubic-bezier(0.6, -0.28, 0.735, 0.045) 0.4s; + } + + img { + width: 200px; + + @include media-breakpoint-down(sm) { + width: 140px; + height: 94px; + } + } + .o_stock_mobile_barcode { + height: 94px; + } + } + + @include media-breakpoint-up(md) { + flex: 0 0 auto; + width: 550px; + border-radius: 4px; + margin-top: -24px; + + .o_stock_barcode_menu { + line-height: 2.6; + } + + button.btn-primary { + font-size: 1.25rem; + } + } + + @include media-breakpoint-up(sm) { + .row .col .btn { + height: 100%; + } + } + + @include media-breakpoint-down(sm) { + .row .col { + min-width: 100%; + } + } +} + +.o_kanban_renderer .o_kanban_record { + @for $size from 2 through length($o-colors) { // Starts at 2 because first index = no color. + .o_barcode_picking_type.oe_kanban_card.oe_kanban_color_#{$size - 1} { + background-color: rgba(nth($o-colors, $size), 0.2); + } + } +} + +// Defines animation for highlighting flash. +$highlighting-colors: ( + "primary": theme-color("primary"), + "white": white +); + +@each $c-name, $c-value in $highlighting-colors { + @keyframes highlighting-flash-#{$c-name} { + 0% { + background-color: #{$c-value}; + } + 20% { + background-color: transparent; + } + 21% { + background-color: #{$c-value}; + } + 100% { + background-color: transparent; + } + } +} + +@keyframes o_barcode_scanner_intro { + 25% { + top: 75%; + } + 50% { + top: 0; + } + 75% { + top: 100%; + } + 100% { + top: 50%; + } +} diff --git a/stock_barcode/static/src/widgets/digipad.js b/stock_barcode/static/src/widgets/digipad.js new file mode 100644 index 0000000..43a3a68 --- /dev/null +++ b/stock_barcode/static/src/widgets/digipad.js @@ -0,0 +1,120 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { standardWidgetProps } from "@web/views/widgets/standard_widget_props"; +import { useService } from "@web/core/utils/hooks"; +import { Component, onWillStart } from "@odoo/owl"; + +export class Digipad extends Component { + setup() { + this.orm = useService('orm'); + const user = useService('user'); + this.buttons = [7, 8, 9, 4, 5, 6, 1, 2, 3, '.', '0', 'erase'].map((value, index) => { + return { index, value }; + }); + this.value = String(this.props.record.data[this.props.quantityField]); + this.precision = 2; + onWillStart(async () => { + this.displayUOM = await user.hasGroup('uom.group_uom'); + await this._fetchPackagingButtons(); + const quantityField = this.props.record.model.config.fields['quantity'] ? 'quantity' : 'qty_producing'; + this.precision = this.props.record.model.config.fields[quantityField].digits[1]; + + }); + } + + get changes() { + return { [this.props.quantityField]: Number(this.value) }; + } + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Copies the input value if digipad value is not set yet, or overrides it if there is a + * difference between the two values (in case user has manualy edited the input value). + * @private + */ + _checkInputValue() { + const input = document.querySelector(`div[name="${this.props.quantityField}"] input`); + const inputValue = input.value; + if (Number(this.value) != Number(inputValue)) { + console.warn(`-- Change widget value: ${this.value} -> ${inputValue}`); + this.value = inputValue; + } + } + + /** + * Increments the field value by the interval amount (1 by default). + * @private + * @param {integer} [interval=1] + */ + async _increment(interval=1) { + this._checkInputValue(); + const numberValue = Number(this.value || 0); + this.value = (numberValue + interval).toFixed(this.precision); + if (this.value % 1 == 0) { + this.value = String(Math.floor(this.value)); + } + await this.props.record.update(this.changes); + } + + /** + * Search for the product's packaging buttons. + * @private + * @returns {Promise} + */ + async _fetchPackagingButtons() { + const record = this.props.record.data; + const demandQty = record.quantity; + const domain = [['product_id', '=', record.product_id[0]]]; + if (demandQty) { // Doesn't fetch packaging with a too high quantity. + domain.push(['qty', '<=', demandQty]); + } + this.packageButtons = await this.orm.searchRead( + 'product.packaging', + domain, + ['name', 'product_uom_id', 'qty'], + { limit: 3 }, + ); + } + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Handles the click on one of the digipad's button and updates the value.. + * @private + * @param {String} button + */ + _onCLickButton(button) { + this._checkInputValue(); + if (button === 'erase') { + this.value = this.value.substr(0, this.value.length - 1); + } else { + if (button === '.' && this.value.indexOf('.') != -1) { + // Avoids to add a decimal separator multiple time. + return; + } + this.value += button; + } + this.props.record.update(this.changes); + } +} +Digipad.template = 'stock_barcode.DigipadTemplate'; +Digipad.props = { + ...standardWidgetProps, + quantityField: { type: String } +}; + +export const digipad = { + component: Digipad, + extractProps: ({ attrs }) => { + return { + quantityField: attrs.quantity_field, + }; + }, +}; +registry.category('view_widgets').add('digipad', digipad); diff --git a/stock_barcode/static/src/widgets/digipad.scss b/stock_barcode/static/src/widgets/digipad.scss new file mode 100644 index 0000000..0ad5748 --- /dev/null +++ b/stock_barcode/static/src/widgets/digipad.scss @@ -0,0 +1,46 @@ +.o_digipad_widget { + display: flex; + + .btn { + padding: 0; + border-radius: 4px; + font-size: 2em; + + .o_web_client.o_touch_device & { + border-radius: 4px; + font-size: 1em; + padding: 4px; + } + } + + .o_digipad_digit_buttons, .o_digipad_special_buttons { + display: grid; + grid-template-rows: repeat(4, 1fr); + gap: 4px; + } + + .o_digipad_digit_buttons { + width: 75%; + grid-template-columns: repeat(3, 1fr); + } + + .o_digipad_special_buttons { + width: 25%; + grid-template-columns: repeat(1, 1fr); + } + + .o_packaging_button { + font-size: 1em; + overflow: hidden; + + div[name=packaging_name] { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + .small-text { + font-size: 0.66em; + } +} diff --git a/stock_barcode/static/src/widgets/digipad.xml b/stock_barcode/static/src/widgets/digipad.xml new file mode 100644 index 0000000..e12576f --- /dev/null +++ b/stock_barcode/static/src/widgets/digipad.xml @@ -0,0 +1,36 @@ + + + +
+ o_digipad_button btn d-flex justify-content-center align-items-center border w-100 py-2 + +
+
+
+
+
+
+
+ +
+1
+
-1
+ +
+
+ + +
+
+
+
+
+ + diff --git a/stock_barcode/static/src/widgets/image_preview.js b/stock_barcode/static/src/widgets/image_preview.js new file mode 100644 index 0000000..bc0cb7f --- /dev/null +++ b/stock_barcode/static/src/widgets/image_preview.js @@ -0,0 +1,35 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { useService } from "@web/core/utils/hooks"; +import { ImageField } from "@web/views/fields/image/image_field"; +import { Component } from "@odoo/owl"; + +export class FullScreenImage extends Component { + static template = "stock_barcode.FullScreenImage"; + static props = { + src: {type: String}, + close: Function, + }; +} + +export class ImagePreviewField extends ImageField { + static template = "stock_barcode.ImagePreviewField"; + + setup() { + super.setup(); + this.dialog = useService("dialog"); + } + + openImageFullScreen() { + this.dialog.add(FullScreenImage, { + src: this.getUrl(this.props.name), + }); + } +} + +export const imageClickEnlarge = { + component: ImagePreviewField, +}; + +registry.category("fields").add("image_preview", imageClickEnlarge); diff --git a/stock_barcode/static/src/widgets/image_preview.xml b/stock_barcode/static/src/widgets/image_preview.xml new file mode 100644 index 0000000..79010fc --- /dev/null +++ b/stock_barcode/static/src/widgets/image_preview.xml @@ -0,0 +1,26 @@ + + + + + + openImageFullScreen + + + + + + + diff --git a/stock_barcode/static/src/widgets/set_reserved_qty_button.js b/stock_barcode/static/src/widgets/set_reserved_qty_button.js new file mode 100644 index 0000000..0c34963 --- /dev/null +++ b/stock_barcode/static/src/widgets/set_reserved_qty_button.js @@ -0,0 +1,42 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { standardFieldProps } from "@web/views/fields/standard_field_props"; +import { useService } from "@web/core/utils/hooks"; +import { Component, onWillStart } from "@odoo/owl"; + +export class SetReservedQuantityButton extends Component { + setup() { + const user = useService('user'); + onWillStart(async () => { + this.displayUOM = await user.hasGroup('uom.group_uom'); + }); + } + + get uom() { + const [id, name] = this.props.record.data.product_uom_id || []; + return { id, name }; + } + + _setQuantity (ev) { + ev.stopPropagation(); + this.props.record.update({ [this.props.fieldToSet]: this.props.record.data[this.props.name] }); + } +} +SetReservedQuantityButton.props = { + ...standardFieldProps, + fieldToSet: { type: String }, +}; +SetReservedQuantityButton.template = 'stock_barcode.SetReservedQuantityButtonTemplate'; + +export const setReservedQuantityButton = { + component: SetReservedQuantityButton, + extractProps: ({ attrs }) => { + if (attrs.field_to_set) { + return { fieldToSet: attrs.field_to_set }; + } + return {}; + }, +}; + +registry.category("fields").add("set_reserved_qty_button", setReservedQuantityButton); diff --git a/stock_barcode/static/src/widgets/set_reserved_qty_button.scss b/stock_barcode/static/src/widgets/set_reserved_qty_button.scss new file mode 100644 index 0000000..e2640d7 --- /dev/null +++ b/stock_barcode/static/src/widgets/set_reserved_qty_button.scss @@ -0,0 +1,5 @@ +.o_web_client.o_touch_device .o_button_qty_done, .o_button_qty_done { + padding-top: 8px; + padding-bottom: 8px; + font-size: 1em; +} diff --git a/stock_barcode/static/src/widgets/set_reserved_qty_button.xml b/stock_barcode/static/src/widgets/set_reserved_qty_button.xml new file mode 100644 index 0000000..a0e28ce --- /dev/null +++ b/stock_barcode/static/src/widgets/set_reserved_qty_button.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/stock_barcode/static/tests/tours/running_tour_action_helper.js b/stock_barcode/static/tests/tours/running_tour_action_helper.js new file mode 100644 index 0000000..5399a48 --- /dev/null +++ b/stock_barcode/static/tests/tours/running_tour_action_helper.js @@ -0,0 +1,10 @@ +/** @odoo-module **/ + +import { RunningTourActionHelper } from "@web_tour/tour_service/tour_utils"; +import { patch } from "@web/core/utils/patch"; + +patch(RunningTourActionHelper.prototype, { + scan(barcode) { + odoo.__WOWL_DEBUG__.root.env.services.barcode.bus.trigger('barcode_scanned', { barcode }); + }, +}); diff --git a/stock_barcode/static/tests/tours/tour_helper_stock_barcode.js b/stock_barcode/static/tests/tours/tour_helper_stock_barcode.js new file mode 100644 index 0000000..19fc7e6 --- /dev/null +++ b/stock_barcode/static/tests/tours/tour_helper_stock_barcode.js @@ -0,0 +1,327 @@ +/** @odoo-module **/ + +import { TourError } from "@web_tour/tour_service/tour_utils"; + + +const helper = {}; +export default helper; + +/** + * Returns the line for the given index and ensure the line is an HTMLElement (fails otherwise). + * + * @param {(HTMLElement|integer)} lineOrIndex either the line itself, either the index to find it + * @param {string} errorClue + * @returns {HTMLElement} + */ +helper._getLineOrFail = (lineOrIndex, errorClue="No line found") => { + const line = typeof lineOrIndex === "number" ? + document.querySelectorAll('.o_barcode_line')[lineOrIndex] : + lineOrIndex; + if (line instanceof HTMLElement) { + return line; + } + const errorMessage = typeof lineOrIndex === "number" ? + `${errorClue}: the given index (${lineOrIndex}) doesn't match an existing line` : + `${errorClue}: the given object isn't a line`; + helper.fail(errorMessage); +}; +/** + * @param {Object} description + * @param {string} [description.barcode] the line's product's barcode + * @param {Boolean} [description.completed] get only completed line if true + * @param {Boolean} [description.selected] get only selected line if true + * @returns {string} + */ +helper._prepareSelector = (selector, description) => { + const { barcode, selected, completed } = description; + if (selected !== undefined) { + selector += selected ? ".o_selected" : ":not(.o_selected)"; + } + if (completed !== undefined) { + selector += completed ? ".o_line_completed" : ":not(.o_line_completed)"; + } + selector += barcode ? `[data-barcode="${barcode}"]`: ""; + description.selector = selector; + return selector; +}; + +helper.fail = (errorMessage) => { + throw new TourError(errorMessage); +}; + +/** + * Get and returns exactly one line, helper.fails if multiple lines are found). + * @param {Object} description @see getLines + * @returns {HTMLElement} + */ +helper.getLine = (description={}) => { + const line = helper.getLines(description); + if(line.length > 1) { + helper.fail(`getLine: Multiple lines were found for the selector "${description.selector}" (use 'getLines' instead if its wanted)`); + } else if (line.length === 0) { + helper.fail(`getLine: No line was found for the selector "${description.selector}"`); + } + return line[0]; +}; + +/** + * Get and returns all lines matching the given description, helper.fails if no line is found. + * @param {Object} [description] if no description, will return all the barcode's line + * @see _prepareSelector for more information about description's keys. + * @returns {HTMLElement[]} + */ +helper.getLines = (description={}) => { + const selector = helper._prepareSelector(".o_barcode_lines > .o_barcode_line", description); + const lines = document.querySelectorAll(selector); + const { index } = description; + if (index !== undefined) { + if (typeof index === "number") { // Single index (not an array), returns only one line. + return [lines[index]]; + }; + const chosenLines = []; + for (const i of index) { + chosenLines.push(lines[i]); + } + if (chosenLines.length !== index.length) { + helper.fail(`Expects ${index.length} lines, got ${chosenLines.length}`) + } + return chosenLines; + } + return lines; +}; + +helper.getSubline = (description={}) => { + const subline = helper.getSublines(description); + if(subline.length > 1) { + helper.fail(`Multiple sublines were found for the selector "${description.selector}"`); + } + return subline[0]; +}; + +helper.getSublines = (description={}) => { + const selector = helper._prepareSelector(".o_sublines .o_barcode_line", description); + const sublines = document.querySelectorAll(selector); + if (!sublines.length) { + helper.fail(`No subline was found for the selector "${selector}"`); + } + return sublines; +}; + +helper.triggerKeydown = (eventKey, shiftkey=false) => { + document.querySelector('.o_barcode_client_action') + .dispatchEvent(new window.KeyboardEvent('keydown', { bubbles: true, key: eventKey, shiftKey: shiftkey})); +}; + +helper.assert = (current, expected, info) => { + if (current !== expected) { + helper.fail(info + ': "' + current + '" instead of "' + expected + '".'); + } +}; + +/** + * Checks if a button on the given line is visible or not. + * + * @param {HTMLElement|Integer} lineOrIndex the line (or its index) to test its the button visibility + * @param {string} buttonName could be 'add_quantity', 'remove_unit' or 'set'. + * @param {boolean} [isVisible=true] + */ +helper.assertButtonShouldBeVisible = (lineOrIndex, buttonName, shouldBeVisible=true) => { + const line = helper._getLineOrFail(lineOrIndex); + const button = line.querySelector(`.o_line_button.o_${buttonName}`); + helper.assert(Boolean(button), shouldBeVisible, + `Line's button "${buttonName}" ${shouldBeVisible ? "should" : "shouldn't"} be visible`); +}; + +/** + * Checks if both "Add unit" and "Add reserved remaining quantity" buttons are + * displayed or not on the given line. + * + * @param {integer} lineIndex + * @param {boolean} isVisible + */ +helper.assertLineButtonsAreVisible = (lineOrIndex, isVisible, cssSelector='.o_line_button') => { + const line = helper._getLineOrFail(lineOrIndex); + const buttonAddQty = line.querySelectorAll(cssSelector); + const message = `Buttons must be ${(isVisible ? 'visible' : 'hidden')}`; + helper.assert(buttonAddQty.length > 0, isVisible, message); +}; + +helper.assertValidateVisible = (expected) => { + const validateButton = document.querySelector('.o_validate_page,.o_apply_page'); + helper.assert(Boolean(validateButton), expected, 'Validate visible'); +}; + +helper.assertValidateEnabled = (expected) => { + const validateButton = document.querySelector('.o_validate_page,.o_apply_page') || false; + helper.assert(validateButton && !validateButton.hasAttribute('disabled'), expected, 'Validate enabled'); +}; + +helper.assertValidateIsHighlighted = (expected) => { + const validateButton = document.querySelector('.o_validate_page,.o_apply_page') || false; + const isHighlighted = validateButton && validateButton.classList.contains('btn-success'); + helper.assert(isHighlighted, expected, 'Validate button is highlighted'); +}; + +helper.assertLinesCount = (expectedCount, description) => { + const currentCount = helper.getLines(description).length; + helper.assert(currentCount, expectedCount, `Should have ${expectedCount} line(s)`); +}; + +helper.assertScanMessage = (expected) => { + const instruction = document.querySelector(`.o_scan_message`); + const cssClass = instruction.classList[1]; + helper.assert(cssClass, `o_${expected}`, "Not the right message displayed"); +}; + +helper.assertSublinesCount = (expected) => { + const current = document.querySelectorAll('.o_sublines > .o_barcode_line').length; + helper.assert(current, expected, `Should have ${expected} subline(s), found ${current}`); +}; + +helper.assertLineDestinationIsNotVisible = (lineOrIndex) => { + const line = helper._getLineOrFail(lineOrIndex); + const destinationElement = line.querySelector('.o_line_destination_location'); + if (destinationElement) { + const product = line.querySelector('.product-label').innerText; + helper.fail(`The destination for line of the product ${product} should not be visible, "${destinationElement.innerText}" instead`); + } +}; + +/** + * Checks if the given line is going in the given location. Implies the destination is visible. + * @param {Element} line + * @param {string} location + */ +helper.assertLineDestinationLocation = (lineOrIndex, location) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check the line's destination"); + const destinationElement = line.querySelector('.o_line_destination_location'); + const product = line.querySelector('.product-label').innerText; + if (!destinationElement) { + helper.fail(`The destination (${location}) for line of the product ${product} is not visible`); + } + helper.assert( + destinationElement.innerText, location, + `The destination for line of product ${product} isn't in the right location`); +}; + +helper.assertLineIsHighlighted = (lineOrIndex, expected=true) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check if the line is highlighted"); + const errorMessage = `line ${expected ? "should" : "shouldn't"} be highlighted`; + helper.assert(line.classList.contains('o_highlight'), expected, errorMessage); +}; + +helper.assertLineLocations = (lineOrIndex, source=false, destination=false) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check line's locations"); + if (source) { + helper.assertLineSourceLocation(line, source); + } else { + helper.assertLineSourceIsNotVisible(line); + } + if (destination) { + helper.assertLineDestinationLocation(line, destination); + } else { + helper.assertLineDestinationIsNotVisible(line); + } +}; + +helper.assertLineProduct = (lineOrIndex, productName) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check line's product"); + const lineProduct = line.querySelector('.product-label').innerText; + helper.assert(lineProduct, productName, "Not the expected product"); +}; + +/** + * Checks the quantity. It will get the done/counted quantity and will also + * checks the on the reserved/on hand quantity if there is one. + * Also, if the unit of measure is displayed, it will check that too. + * + * @param {(HTMLElement|integer)} lineOrIndex @see _getLineOrFail + * @param {string} expectedQty quantity on the line, formatted as "n (/ N) ( UOM)" + */ +helper.assertLineQty = (lineOrIndex, expectedQuantityWithUOM) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check the line's quantity"); + const elQty = line.querySelector('.qty-done'); + const elUOM = line.querySelector('.o_line_uom'); + const elReserved = elQty.nextElementSibling; + let qtyText = elQty.innerText + (elReserved ? " " + elReserved.innerText : ""); + let errorMessage = "Something wrong with the quantities"; + if (elUOM) { + qtyText += " " + elUOM.innerText; + errorMessage += " or with the Unit of Measure"; + } + helper.assert(qtyText, expectedQuantityWithUOM, errorMessage); +}; + +helper.assertLineSourceIsNotVisible = (lineOrIndex) => { + const line = helper._getLineOrFail(lineOrIndex); + const sourceElement = line.querySelector('.o_line_source_location'); + if (sourceElement) { + const product = line.querySelector('.product-label').innerText; + helper.fail(`The location for line of the product ${product} should not be visible, "${sourceElement.innerText}" instead`); + } +}; + +/** + * Checks each given lines match the corresponding tracking numbers. + * The number of lines and tracking numbers has to be equals. + * @param {HTMLElement[]} lines + * @param {string[]} trackingNumbers + */ +helper.assertLinesTrackingNumbers = (lines, trackingNumbers) => { + helper.assert(lines.length, trackingNumbers.length, "Not the same amount of lines and tracking numbers"); + for (const [index, line] of lines.entries()) { + const lineTrackingNumber = line.querySelector(".o_line_lot_name").innerText; + const expectedTrackingNumber = trackingNumbers[index]; + helper.assert(lineTrackingNumber, expectedTrackingNumber, "Not the expected tracking number"); + } +}; + +/** + * Checks if the given line is in the given location. Implies the location is visible. + * @param {Element} line + * @param {string} location + */ +helper.assertLineSourceLocation = (lineOrIndex, location) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check the line's source"); + const sourceElement = line.querySelector('.o_line_source_location'); + const product = line.querySelector('.product-label').innerText; + if (!sourceElement) { + helper.fail(`The source (${location}) for line of the product ${product} is not visible`); + } + helper.assert( + sourceElement.innerText, location, + `The source for line of product ${product} isn't in the right location`); +}; + +helper.assertFormLocationSrc = (expected) => { + const location = document.querySelector('.o_field_widget[name="location_id"] input'); + helper.assert(location.value, expected, 'Wrong source location'); +}; + +helper.assertFormLocationDest = (expected) => { + const location = document.querySelector('.o_field_widget[name="location_dest_id"] input'); + helper.assert(location.value, expected, 'Wrong destination location'); +}; + +helper.assertFormQuantity = (expected) => { + const quantityField = document.querySelector( + '.o_field_widget[name="inventory_quantity"] input, .o_field_widget[name="qty_done"] input'); + helper.assert(quantityField.value, expected, 'Wrong quantity'); +}; + +helper.assertErrorMessage = (expected) => { + const errorMessage = document.querySelector('.o_notification:last-child .o_notification_content'); + helper.assert(errorMessage.innerText, expected, 'wrong or absent error message'); +}; + +helper.assertKanbanRecordsCount = (expected) => { + const kanbanRecords = document.querySelectorAll( + '.o_kanban_view .o_kanban_record:not(.o_kanban_ghost)'); + helper.assert(kanbanRecords.length, expected, 'Wrong number of cards'); +}; + +helper.assertLineIsFaulty = (lineOrIndex, expected=true) => { + const line = helper._getLineOrFail(lineOrIndex, "Can't check if the line is faulty"); + const errorMessage = `line ${expected ? "should" : "shouldn't"} be faulty`; + helper.assert(line.classList.contains('o_faulty'), expected, errorMessage); +}; diff --git a/stock_barcode/static/tests/tours/tour_step_utils.js b/stock_barcode/static/tests/tours/tour_step_utils.js new file mode 100644 index 0000000..bfbb6e8 --- /dev/null +++ b/stock_barcode/static/tests/tours/tour_step_utils.js @@ -0,0 +1,38 @@ +/* @odoo-module */ + +export const stepUtils = { + confirmAddingUnreservedProduct() { + return { + trigger: '.btn-primary', + extra_trigger: '.modal-title:contains("Add extra product?")', + in_modal: true, + }; + }, + validateBarcodeOperation(trigger = '.o_barcode_client_action') { + return [ + { + trigger, + run: 'scan O-BTN.validate', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, + ]; + }, + discardBarcodeForm() { + return [ + { + content: 'discard barcode form', + trigger: '.o_discard', + auto: true, + }, + { + content: 'wait to be back on the barcode lines', + trigger: '.o_add_line', + auto: true, + run() {}, + }, + ]; + }, +}; diff --git a/stock_barcode/static/tests/tours/tour_test_barcode_flows_inventory.js b/stock_barcode/static/tests/tours/tour_test_barcode_flows_inventory.js new file mode 100644 index 0000000..295c085 --- /dev/null +++ b/stock_barcode/static/tests/tours/tour_test_barcode_flows_inventory.js @@ -0,0 +1,1003 @@ +/** @odoo-module */ + +import helper from '@stock_barcode/../tests/tours/tour_helper_stock_barcode'; +import { registry } from "@web/core/registry"; +import { stepUtils } from "./tour_step_utils"; + +registry.category("web_tour.tours").add('test_inventory_adjustment', {test: true, steps: () => [ + + { + trigger: '.button_inventory', + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: function () { + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(false); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line', + run: function () { + // Checks the product code and name are on separate lines. + const line = helper.getLine({ barcode: 'product1' }); + helper.assert(line.querySelectorAll('.o_barcode_line_details > .o_barcode_line_title > .o_barcode_product_ref').length, 1); + helper.assert(line.querySelectorAll('.o_barcode_line_details .product-label').length, 1); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_edit', + }, + + { + trigger: '.o_field_widget[name="inventory_quantity"]', + run: function () { + helper.assertFormQuantity('2'); + } + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_barcode_line', + run: function () { + // Checks the product code and name are on separate lines. + const line = helper.getLine({ barcode: 'product1' }); + helper.assert(line.querySelectorAll('.o_barcode_line_details > .o_barcode_line_title > .o_barcode_product_ref').length, 1); + helper.assert(line.querySelectorAll('.o_barcode_line_details .product-label').length, 1); + } + }, + + { + trigger: '.o_add_line', + }, + + { + trigger: ".o_field_widget[name=product_id] input", + run: 'text product2', + }, + + { + trigger: ".ui-menu-item > a:contains('product2')", + }, + + { + trigger: ".o_field_widget[name=inventory_quantity] input", + run: 'text 2', + }, + + { + trigger: '.o_save', + }, + + { + extra_trigger: '.o_scan_message.o_scan_product', + trigger: '.o_barcode_line', + run: 'scan O-BTN.validate', + }, + + { + trigger: '.o_stock_barcode_main_menu', + }, + + { + trigger: '.o_notification.border-success', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_adjustment_dont_update_location', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(2); + const [line1, line2] = helper.getLines({ barcode: 'product1' }); + helper.assertLineQty(line1, '0 / 5'); + helper.assertLineQty(line2, '0 / 5'); + helper.assertLineSourceLocation(line1, "WH/Stock"); + helper.assertLineSourceLocation(line2, "WH/Stock/Section 2"); + } + }, + // Scan WH/Stock/Section 1. + { trigger: '.o_barcode_client_action', run: "scan LOC-01-01-00" }, + { trigger: '.o_barcode_line:first-child' }, + { trigger: '.o_barcode_line.o_selected button.o_add_quantity' }, + { + trigger: 'button.o_remove_unit:not([disabled])', + run: function () { + helper.assertLinesCount(2); + const selectedLine = helper.getLine({ selected: true }); + helper.assertLineQty(selectedLine, '1 / 5'); + helper.assertLineSourceLocation(selectedLine, "WH/Stock"); + } + }, + // Scans product1 -> A new line for this product should be created in Section 1. + { trigger: '.o_barcode_client_action', run: "scan product1" }, + { + trigger: '.o_barcode_line:nth-child(3)', + run: function () { + helper.assertLinesCount(3); + const selectedLine = helper.getLine({ selected: true }); + helper.assertLineQty(selectedLine, '1'); + helper.assertLineSourceLocation(selectedLine, "WH/Stock/Section 1"); + } + }, + { trigger: '.o_apply_page.btn-success' }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add("test_inventory_adjustment_multi_company", {test: true, steps: () => [ + // Open the company switcher. + { trigger: ".o_switch_company_menu > button" }, + // Ensure the first company is selected and open the Barcode App, then the Inventory Adjustment. + { + extra_trigger: ".o_switch_company_menu .oe_topbar_name:contains('Comp A')", + trigger: "[data-menu-xmlid='stock_barcode.stock_barcode_menu'] > .o_app_icon", + }, + { trigger: "button.button_inventory" }, + // Scan product1 and product_no_company, they should be added in the inventory adj. + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_line[data-barcode='product1']", run: "scan product_no_company" }, + // Try to scan product2 who belongs to the second company -> Should not be found. + { trigger: ".o_barcode_line[data-barcode='product_no_company']", run: "scan product2" }, + { trigger: ".o_notification.border-danger button.o_notification_close" }, + { + trigger: ".o_barcode_client_action", + run: function() { + helper.assertLinesCount(2); + } + }, + // Validate the Inventory Adjustment. + { trigger: ".o_apply_page.btn-success" }, + + // Go back on the App Switcher and change the company. + { trigger: ".o_stock_barcode_main_menu a.o_stock_barcode_menu" }, + { trigger: ".o_switch_company_menu > button" }, + { trigger: ".o_switch_company_menu .company_label:contains('Comp B')" }, + // Open again the Barcode App then the Inventory Adjustment. + { + extra_trigger: ".o_switch_company_menu .oe_topbar_name:contains('Comp B')", + trigger: "[data-menu-xmlid='stock_barcode.stock_barcode_menu'] > .o_app_icon", + }, + { trigger: "button.button_inventory" }, + // Scan product2 and product_no_company, they should be added in the inventory adj. + { trigger: ".o_barcode_client_action", run: "scan product2" }, + { trigger: ".o_barcode_line[data-barcode='product2']", run: "scan product_no_company" }, + // Try to scan product1 who belongs to the first company -> Should not be found. + { trigger: ".o_barcode_line[data-barcode='product_no_company']", run: "scan product1" }, + { trigger: ".o_notification.border-danger button.o_notification_close" }, + { + trigger: ".o_barcode_client_action", + run: function() { + helper.assertLinesCount(2); + } + }, + // Validate the Inventory Adjustment. + { trigger: ".o_barcode_line", run: "scan O-BTN.validate" }, + { + trigger: ".o_stock_barcode_main_menu", + extra_trigger: ".o_notification.border-success", + run: function () { + helper.assertErrorMessage("The inventory adjustment has been validated"); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_adjustment_multi_location', {test: true, steps: () => [ + + { + trigger: '.button_inventory', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-00-00' + }, + + { + trigger: '.o_scan_message:contains("WH/Stock")', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + // Open manual scanner. + { + trigger: '.o_barcode_client_action .o_stock_mobile_barcode', + }, + // Manually add 'product1'. + { + trigger: '.modal-content .modal-body #manual_barcode', + run: function(actions) { + var barcode = 'product1'; + actions.text(barcode); + } + }, + // Apply the manual entry of barcode. + { + trigger: '.modal-content .modal-footer .btn-primary:not(:disabled)', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00' + }, + + { + trigger: '.o_scan_message:contains("WH/Stock/Section 1")', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-02-00' + }, + + { + trigger: '.o_scan_message:contains("WH/Stock/Section 2")', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan O-BTN.validate', + }, + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_adjustment_tracked_product', {test: true, steps: () => [ + + { + trigger: '.button_inventory', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1', + }, + + { + trigger: '.o_barcode_line:contains("productlot1")', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_line:contains("productserial1")', + run: 'scan serial1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan serial1', + }, + + { + trigger: '.o_notification.border-danger', + run: function () { + // Check that other lines is correct + let line = helper.getLine({ barcode: 'productserial1' }); + helper.assertLineQty(line, "1"); + helper.assert(line.querySelector('.o_line_lot_name').innerText.trim(), 'serial1'); + line = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineQty(line, "2"); + helper.assert(line.querySelector('.o_line_lot_name').innerText.trim(), 'lot1'); + helper.assertErrorMessage('The scanned serial number is already used.'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan serial2', + }, + + { + trigger: '.o_barcode_line:contains("serial2")', + run: 'scan productlot1', + }, + + { + trigger: '.o_barcode_line:contains("productlot1")', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_line .qty-done:contains(3)', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_line:contains("productserial1")', + run: 'scan serial3', + }, + + { + trigger: ':contains("productserial1") .o_sublines .o_barcode_line:contains("serial3")', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(3); + }, + }, + + // Edit a line to trigger a save. + { + trigger: '.o_add_line', + }, + + { + trigger: ".o_field_widget[name=product_id] input", + run: 'text productserial1', + }, + + { + trigger: ".ui-menu-item > a:contains('productserial1')", + }, + + { + trigger: '.o_save', + }, + + // Scan tracked by lots product, then scan new lots. + { + trigger: '.o_sublines .o_barcode_line:nth-child(3)', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(4); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1', + }, + + { + trigger: '.o_barcode_line.o_selected:contains("productlot1")', + run: 'scan lot2', + }, + + { + trigger: '.o_barcode_line .o_barcode_line:contains("lot2")', + run: 'scan lot3', + }, + + // Must have 6 lines in two groups: lot1, lot2, lot3 and serial1, serial2, serial3. + // Grouped lines for `productlot1` should be unfolded. + { + trigger: '.o_barcode_line:contains("productlot1") .o_sublines>.o_barcode_line.o_selected:contains("lot3")', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(3); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan O-BTN.validate', + }, + + { + trigger: '.modal-header' + }, + + { + trigger: 'button[name="action_confirm"]' + }, + + { + trigger: '.o_notification.border-success', + }, + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_adjustment_tracked_product_multilocation', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + { + trigger: '.o_barcode_line', + run: function() { + helper.assertLinesCount(2); + helper.assertLineSourceLocation(0, "WH/Stock/Section 1"); + helper.assertLineQty(0, "3 / 3"); + helper.assertLineSourceLocation(1, "WH/Stock/Section 2"); + helper.assertLineQty(1, "0 / 5"); + } + }, + // Scans Section 1 then scans productlot1 -> It should update the first productlot1's line. + { trigger: '.o_barcode_line', run: 'scan LOC-01-01-00' }, + { + trigger: '.o_barcode_line:first-child [name=source_location].o_highlight', + run: 'scan lot1', + }, + { + trigger: '.o_barcode_line:first-child.o_selected', + run: function() { + helper.assertLineSourceLocation(0, "WH/Stock/Section 1"); + helper.assertLineQty(0, "4 / 3"); + helper.assertLineSourceLocation(1, "WH/Stock/Section 2"); + helper.assertLineQty(1, "0 / 5"); + } + }, + // Scans productserial1 -> As we are in Section 1, it should get sn1, sn2 and sn3. + { trigger: '.o_barcode_client_action', run: 'scan productserial1' }, + { + trigger: '.o_barcode_line:nth-child(2).o_selected', + run: function() { + helper.assertLinesCount(3); + const serialLine = helper.getLine({ barcode: "productserial1" }); + helper.assertLineSourceLocation(serialLine, "WH/Stock/Section 1"); + helper.assertLineQty(1, "? / 3"); + helper.assertSublinesCount(3) + const [subline1, subline2, subline3] = helper.getSublines(); + helper.assertLineQty(subline1, "? / 1"); + helper.assertLineQty(subline2, "? / 1"); + helper.assertLineQty(subline3, "? / 1"); + helper.assert(subline1.querySelector('.o_line_lot_name').innerText, "sn1"); + helper.assert(subline2.querySelector('.o_line_lot_name').innerText, "sn2"); + helper.assert(subline3.querySelector('.o_line_lot_name').innerText, "sn3"); + } + }, + // Hides sublines. + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-up' }, + // Scans Section 2 then scans productlot1 -> It should update the second productlot1's line. + { trigger: '.o_barcode_line', run: 'scan LOC-01-02-00' }, + { + trigger: '.o_barcode_line:nth-child(3) [name=source_location].o_highlight', + run: 'scan lot1', + }, + { + trigger: '.o_barcode_line:nth-child(3).o_selected', + run: function() { + const [lotLine1, lotLine2] = helper.getLines({ barcode: "productlot1" }); + helper.assertLineSourceLocation(lotLine1, "WH/Stock/Section 1"); + helper.assertLineQty(0, "4 / 3"); + helper.assertLineSourceLocation(lotLine2, "WH/Stock/Section 2"); + helper.assertLineQty(2, "1 / 5"); + } + }, + // Scans productserial1 -> No existing quant in Section 2 for this product so creates a new line. + { trigger: '.o_barcode_client_action', run: 'scan productserial1' }, + { + trigger: '.o_barcode_line:nth-child(4).o_selected', + run: function() { + helper.assertLinesCount(4); + const [serialLine1, serialLine2] = helper.getLines({ barcode: 'productserial1' }); + helper.assertLineSourceLocation(serialLine1, "WH/Stock/Section 1"); + helper.assertLineQty(serialLine1, "? / 3"); + helper.assertLineSourceLocation(serialLine2, "WH/Stock/Section 2"); + helper.assertLineQty(serialLine2, "0"); + } + }, + ...stepUtils.validateBarcodeOperation(), + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_adjustment_tracked_product_permissive_quants', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(0); + } + }, + + // Scan a product tracked by lot that has a quant without lot_id, then scan a product's lot. + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1', + }, + { + trigger: '.o_barcode_line:contains("productlot1")', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(0); + const line = helper.getLine(); + helper.assertLineQty(line, "? / 5"); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + // Must have 2 lines in one group: one without lot and one with lot1. + // Grouped lines for `productlot1` should be unfolded. + { + trigger: '.o_sublines .o_barcode_line.o_selected:contains("lot1") .qty-done:contains(2)', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const [subline1, subline2] = helper.getSublines(); + helper.assertLineQty(subline1, "? / 5"); + helper.assertLineQty(subline2, "2"); + } + }, + + { trigger: '.o_sublines .o_barcode_line:first-child .o_line_button.o_set:not(.o_difference)' }, + ...stepUtils.validateBarcodeOperation('.o_sublines .o_barcode_line:first-child .o_line_button.o_set .fa-check'), + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_create_quant', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(0); + } + }, + + // Scans product 1: must have 1 quantity and buttons +1/-1 must be visible. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_barcode_client_action .o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "product1" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1"); + helper.assertButtonShouldBeVisible(line, "add_quantity"); + helper.assertButtonShouldBeVisible(line, "remove_unit"); + } + }, + + // Edits the line to set the counted quantity to zero. + { trigger: '.o_edit' }, + { + trigger: '.o_field_widget[name="product_id"]', + run: function() { + helper.assertFormQuantity("1"); + }, + }, + { + trigger: '.o_field_widget[name=inventory_quantity] input', + run: 'text 0', + }, + { trigger: '.o_save' }, + { + trigger: '.o_barcode_client_action .o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "product1" }); + helper.assertLineQty(line, "0"); + } + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_nomenclature', {test: true, steps: () => [ + + { + trigger: '.button_inventory', + }, + + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertScanMessage('scan_product'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan 2145631123457', // 12.345 kg + }, + + { + trigger: '.product-label:contains("product_weight")' + }, + ...stepUtils.validateBarcodeOperation(), + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_package', {test: true, steps: () => [ + + { + trigger: '.button_inventory', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan PACK001', + }, + + { + trigger: '.o_barcode_line:contains("product2") .o_edit', + }, + + { + trigger: '[name="inventory_quantity"] input', + run: 'text 21' + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_apply_page', + }, + + { + trigger: '.o_notification.border-success', + run: function () { + helper.assertErrorMessage('The inventory adjustment has been validated'); + }, + }, + + { + trigger: '.o_stock_barcode_main_menu', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_packaging', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + // Scans a packaging when there is no existing quant for its product. + { trigger: '.o_barcode_client_action', run: 'scan pack007' }, + { + trigger: '.o_barcode_line', + run: function() { + const $line = helper.getLine({ barcode: "product1"}); + helper.assertLineQty($line, "15"); + } + }, + { trigger: '.o_apply_page' }, + { trigger: '.o_notification.border-success' }, + { trigger: '.button_inventory' }, + // Scans a packaging when a quant for its product exists. + { + trigger: '.o_barcode_client_action', + run: 'scan pack007', + }, + // Verifies it takes the packaging's quantity. + { + extra_trigger: '.o_barcode_line .qty-done:contains(15)', + trigger: '.o_apply_page', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_inventory_owner_scan_package', {test: true, steps: () => [ + { + trigger: '.button_inventory', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan P00001', + }, + { + trigger: '.o_barcode_client_action:contains("P00001")', + }, + { + trigger: '.o_barcode_client_action:contains("Azure Interior")', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_inventory_using_buttons', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + + // Scans product 1: must have 1 quantity and buttons +1/-1 must be visible. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_barcode_client_action .o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "product1" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1"); + helper.assertButtonShouldBeVisible(line, "add_quantity"); + helper.assertButtonShouldBeVisible(line, "remove_unit"); + } + }, + // Clicks on -1 button: must have 0 quantity, -1 still visible but disabled. + { trigger: '.o_remove_unit' }, + { + trigger: '.o_barcode_line:contains("0")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: 'product1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '0'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const decrementButton = document.querySelector('.o_line_button.o_remove_unit'); + helper.assert(decrementButton.hasAttribute('disabled'), true); + } + }, + // Clicks on +1 button: must have 1 quantity, -1 must be enabled now. + { trigger: '.o_add_quantity' }, + { + trigger: '.o_barcode_line .qty-done:contains("1")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: 'product1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '1'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const decrementButton = line.querySelector('.o_line_button.o_remove_unit'); + helper.assert(decrementButton.hasAttribute('disabled'), false); + } + }, + + // Scans productserial1: must have 0 quantity, buttons must be hidden (a + // line for a product tracked by SN doesn't have -1/+1 buttons). + { trigger: '.o_barcode_client_action', run: 'scan productserial1' }, + { + trigger: '.o_barcode_client_action .o_barcode_line:nth-child(2)', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: 'productserial1', selected: true }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '0'); + helper.assertButtonShouldBeVisible(line, 'add_quantity', false); + helper.assertButtonShouldBeVisible(line, 'remove_unit', false); + const setButton = line.querySelector('.o_line_button.o_set > .fa-check'); + helper.assert(Boolean(setButton), true); + } + }, + // Scans a serial number: must have 1 quantity, check button must display a "X". + { trigger: '.o_barcode_client_action', run: 'scan BNG-118' }, + { + trigger: '.o_barcode_line:contains("BNG-118")', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: 'productserial1', selected: true }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '1'); + helper.assertButtonShouldBeVisible(line, 'add_quantity', false); + helper.assertButtonShouldBeVisible(line, 'remove_unit', false); + const setButton = line.querySelector('.o_line_button.o_set.o_difference'); + helper.assert(Boolean(setButton), true); + } + }, + // Clicks on set button: must set the inventory quantity equals to the quantity . + { trigger: '.o_barcode_line:contains("productserial1") .o_line_button.o_set' }, + { + trigger: '.o_barcode_line.o_selected .fa-check', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: 'productserial1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '0'); + helper.assertButtonShouldBeVisible(line, 'add_quantity', false); + helper.assertButtonShouldBeVisible(line, 'remove_unit', false); + const goodQuantitySetButton = document.querySelector('.o_selected .o_line_button.o_set > .fa-check'); + helper.assert(Boolean(goodQuantitySetButton), true); + const differenceSetButton = document.querySelector('.o_selected .o_line_button.o_set.o_difference'); + helper.assert(Boolean(differenceSetButton), false); + } + }, + // Clicks again on set button: must unset the quantity. + { trigger: '.o_barcode_line:contains("productserial1") .o_line_button.o_set' }, + { + trigger: '.o_barcode_line:contains("productserial1"):contains("?")', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: 'productserial1', selected: true }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '?'); + helper.assertButtonShouldBeVisible(line, 'add_quantity', false); + helper.assertButtonShouldBeVisible(line, 'remove_unit', false); + const goodQuantitySetButton = line.querySelector('.o_line_button.o_set > .fa-check'); + helper.assert(Boolean(goodQuantitySetButton), false); + const differenceSetButton = line.querySelector('.o_line_button.o_set.o_difference'); + helper.assert(Boolean(differenceSetButton), false); + const emptySetButton = line.querySelector('.o_line_button.o_set'); + helper.assert(Boolean(emptySetButton), true); + } + }, + + // Scans productlot1: must have 0 quantity, buttons should be visible. + { trigger: '.o_barcode_client_action', run: 'scan productlot1' }, + { + trigger: '.o_barcode_client_action .o_barcode_line:nth-child(3)', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '0'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const decrementButton = line.querySelector('.o_line_button.o_remove_unit'); + helper.assert(decrementButton.hasAttribute('disabled'), true); + } + }, + // Scans a lot number: must have 1 quantity, buttons should still be visible. + { trigger: '.o_barcode_client_action', run: 'scan toto-42' }, + { + trigger: '.o_barcode_line:contains("toto-42")', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '1'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const decrementButton = line.querySelector('.o_line_button.o_remove_unit'); + helper.assert(decrementButton.hasAttribute('disabled'), false); + } + }, + // Clicks on -1 button: must have 0 quantity, button -1 must be disabled again. + { trigger: '.o_barcode_line:contains("productlot1") .o_remove_unit' }, + { + trigger: '.o_barcode_line:contains("productlot1") .qty-done:contains("0")', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '0'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const decrementButton = line.querySelector('.o_line_button.o_remove_unit'); + helper.assert(decrementButton.hasAttribute('disabled'), true); + } + }, + // Clicks on +1 button: must have 1 quantity, buttons must be visible. + { trigger: '.o_barcode_line:contains("productlot1") .o_add_quantity' }, + { + trigger: '.o_barcode_line:contains("productlot1") .qty-done:contains(1)', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '1'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const decrementButton = line.querySelector('.o_line_button.o_remove_unit'); + helper.assert(decrementButton.hasAttribute('disabled'), false); + } + }, + + // Scans product2 => Should retrieve the quantity on hand and display 1/10. + { trigger: '.o_barcode_client_action', run: 'scan product2' }, + { + trigger: '.o_barcode_line:contains("product2")', + run: function () { + helper.assertLinesCount(4); + const line = helper.getLine({ barcode: 'product2', selected: true }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, '1 / 10'); + helper.assertButtonShouldBeVisible(line, 'add_quantity'); + helper.assertButtonShouldBeVisible(line, 'remove_unit'); + const setButton = line.querySelector('.o_line_button.o_set.o_difference'); + helper.assert(Boolean(setButton), true); + } + }, + // Clicks multiple time on the set quantity button and checks the save is rightly done. + { trigger: '.o_selected .o_line_button.o_set.o_difference' }, + { + trigger: '.o_barcode_line:contains("product2"):contains("?")', + run: function () { + const line = document.querySelector('.o_barcode_line[data-barcode=product2]'); + const qty = line.querySelector('.o_barcode_scanner_qty').textContent; + helper.assert(qty, '?/ 10'); + } + }, + // Goes to the quant form view to trigger a save then go back. + { trigger: '.o_selected .o_line_button.o_edit' }, + { trigger: '.o_discard' }, + { + trigger: '.o_barcode_line:contains("product2"):contains("?")', + run: function () { + const line = document.querySelector('.o_barcode_line[data-barcode=product2]'); + const qty = line.querySelector('.o_barcode_scanner_qty').textContent; + helper.assert(qty, '?/ 10'); + } + }, + + // Clicks again, should pass from "? / 10" to "10 / 10" + { trigger: '.o_barcode_line:contains("product2") .o_line_button.o_set' }, + { + trigger: '.o_barcode_line:contains("product2") .qty-done:contains("10")', + run: function () { + const line = document.querySelector('.o_barcode_line[data-barcode=product2]'); + const qty = line.querySelector('.o_barcode_scanner_qty').textContent; + helper.assert(qty, '10/ 10'); + } + }, + // Goes to the quant form view to trigger a save then go back. + { trigger: '.o_barcode_line:contains("product2") .o_line_button.o_edit' }, + { trigger: '.o_discard' }, + { + trigger: '.o_barcode_line:contains("product2") .qty-done:contains("10")', + run: function () { + const line = document.querySelector('.o_barcode_line[data-barcode=product2]'); + const qty = line.querySelector('.o_barcode_scanner_qty').textContent; + helper.assert(qty, '10/ 10'); + } + }, + + // Clicks again, should pass from "10 / 10" to "? / 10" + { trigger: '.o_barcode_line:contains("product2") .o_line_button.o_set .fa-check' }, + { + trigger: '.o_barcode_line:contains("product2"):contains("?")', + run: function () { + const line = document.querySelector('.o_barcode_line[data-barcode=product2]'); + const qty = line.querySelector('.o_barcode_scanner_qty').textContent; + helper.assert(qty, '?/ 10'); + } + }, + + // Validates the inventory. + { trigger: '.o_apply_page' }, + { + trigger: '.o_notification.border-success', + isCheck: true, + } +]}); diff --git a/stock_barcode/static/tests/tours/tour_test_barcode_flows_picking.js b/stock_barcode/static/tests/tours/tour_test_barcode_flows_picking.js new file mode 100644 index 0000000..c9e5819 --- /dev/null +++ b/stock_barcode/static/tests/tours/tour_test_barcode_flows_picking.js @@ -0,0 +1,4516 @@ +/** @odoo-module */ + +import helper from '@stock_barcode/../tests/tours/tour_helper_stock_barcode'; +import { registry } from "@web/core/registry"; +import { stepUtils } from "./tour_step_utils"; + +registry.category("web_tour.tours").add('test_internal_picking_from_scratch', {test: true, steps: () => [ + /* Move 2 product1 from WH/Stock/Section 1 to WH/Stock/Section 2. + */ + { + trigger: '.o_add_line', + }, + + { + extra_trigger: '.o_field_widget[name="product_id"]', + trigger: ".o_field_widget[name=qty_done] input", + run: 'text 2', + }, + + { + trigger: ".o_field_widget[name=product_id] input", + run: 'text product1', + }, + + { + trigger: ".ui-menu-item > a:contains('product1')", + }, + + { + trigger: ".o_field_widget[name=location_id] input", + run: 'text Section 1', + }, + + { + trigger: ".ui-menu-item > a:contains('Section 1')", + }, + + { + trigger: ".o_field_widget[name=location_dest_id] input", + run: 'text Section 2', + }, + + { + trigger: ".ui-menu-item > a:contains('Section 2')", + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_barcode_line .o_line_source_location:contains("Section 1")', + extra_trigger: '.o_barcode_line .o_line_destination_location:contains("Section 2")', + run: function() { + helper.assertLinesCount(1); + }, + }, + + /* Move 1 product2 from WH/Stock/Section 1 to WH/Stock/Section 3. + */ + { + trigger: '.o_add_line', + }, + + { + extra_trigger: '.o_field_widget[name="product_id"]', + trigger: ".o_field_widget[name=product_id] input", + run: 'text product2', + }, + + { + trigger: ".ui-menu-item > a:contains('product2')", + }, + + { + trigger: ".o_field_widget[name=location_id] input", + run: 'text Section 1', + }, + + { + trigger: ".ui-menu-item > a:contains('Section 1')", + }, + + { + trigger: ".o_field_widget[name=location_dest_id] input", + run: 'text WH/Stock/Section 3', + }, + + { + trigger: ".ui-menu-item > a:contains('Section 3')", + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_barcode_line .o_line_source_location:contains("Section 1")', + extra_trigger: '.o_barcode_line .o_line_destination_location:contains("Section 3")', + run: function() { + helper.assertLinesCount(2); + const lineProduct1 = helper.getLine({barcode: 'product1'}); + helper.assertLineIsHighlighted(lineProduct1, false); + const lineProduct2 = helper.getLine({barcode: 'product2'}); + helper.assertLineIsHighlighted(lineProduct2, true); + }, + }, + + // Edits the first line to check the transaction doesn't crash and the form view is correctly filled. + { trigger: '.o_barcode_line:first-child .o_edit' }, + { + trigger: '.o_field_widget[name="product_id"]', + run: function() { + helper.assertFormLocationSrc("WH/Stock/Section 1"); + helper.assertFormLocationDest("WH/Stock/Section 2"); + helper.assertFormQuantity("2"); + }, + }, + + { + trigger: '.o_save', + }, + + /* Move 1 product2 from WH/Stock/Section 1 to WH/Stock/Section 2. + */ + { + trigger: '.o_add_line', + }, + + { + extra_trigger: '.o_field_widget[name="product_id"]', + trigger: ".o_field_widget[name=product_id] input", + run: 'text product2', + }, + + { + trigger: ".ui-menu-item > a:contains('product2')", + }, + + { + trigger: ".o_field_widget[name=location_id] input", + run: 'text Section 1', + }, + + { + trigger: ".ui-menu-item > a:contains('Section 1')", + }, + + { + trigger: ".o_field_widget[name=location_dest_id] input", + run: 'text Section 2', + }, + + { + trigger: ".ui-menu-item > a:contains('Section 2')", + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_barcode_line.o_selected .o_line_source_location:contains("Section 1")', + extra_trigger: '.o_barcode_line.o_selected .o_line_destination_location:contains("Section 2")', + run: function() { + helper.assertLinesCount(3); + }, + }, + // Scans the destination (Section 2) for the current line... + { trigger: '.o_barcode_line:nth-child(2).o_selected', run: 'scan LOC-01-02-00' }, + // ...then scans the source (Section 1) for the next line. + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-01-00' }, + // On this page, scans product1 which will create a new line and then opens its edit form view. + + { + trigger: '.o_line_source_location .fw-bold:contains("Section 1")', + run: 'scan product1' + }, + + { // First call to write. + trigger: '.o_barcode_line[data-barcode="product1"].o_selected .o_edit', + }, + + { + trigger :'.o_save', + extra_trigger: '.o_field_widget[name="product_id"]:contains("product1")', + }, + { // Scans the line's destination before to validate the picking. + trigger: '.o_barcode_line[data-barcode="product1"].o_selected', + run: 'scan shelf3', + }, + + { + extra_trigger: '.o_barcode_line:last-child() .o_line_destination_location:contains("Section 3")', + trigger: '.o_validate_page', + }, + { // Second call to write (change the dest. location). + trigger: '.o_notification.border-success', + isCheck: true, + } +]}); + +registry.category("web_tour.tours").add('test_internal_picking_from_scratch_with_package', { test: true, steps: () => [ + // Creates a first internal transfert (Section 1 -> Section 2). + { trigger: '.o_stock_barcode_main_menu', run: 'scan WH-INTERNAL' }, + // Scans product1 and put it in P00001, then do the same for product2. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan P00001' }, + // Scans the destination. + { trigger: '.o_barcode_line .result-package', run: 'scan LOC-01-02-00' }, + { trigger: '.o_barcode_line:not(.o_selected)', run: 'scan product2' }, + { trigger: '.o_barcode_line[data-barcode="product2"].o_selected', run: 'scan P00001' }, + { // Scans the destination. + trigger: '.o_barcode_line[data-barcode="product2"] .result-package', run: 'scan LOC-01-02-00', + }, + { // Validates the internal picking. + trigger: '.o_barcode_line[data-barcode="product2"] .o_line_destination_location', + run: 'scan O-BTN.validate', + }, + { trigger: '.o_notification.border-success' }, + { trigger: '.o_notification button.o_notification_close' }, + + // Creates a second internal transfert (WH/Stock -> WH/Stock). + { trigger: '.o_stock_barcode_main_menu', run: 'scan WH-INTERNAL' }, + { trigger: '.o_barcode_client_action', run: () => helper.assertLinesCount(0) }, + // Scans a package with some quants and checks lines was created for its content. + { trigger: '.o_barcode_client_action', run: 'scan P00002' }, + { + trigger: '.o_barcode_line[data-barcode="product1"] + .o_barcode_line[data-barcode="product2"]', + run: () => { + helper.assertLinesCount(2); + helper.assertLineQty(0, "1"); + helper.assertLineQty(1, "2"); + }, + }, + // Scans the destination location and validate the transfert. + { trigger: '.o_barcode_line.o_selected + .o_barcode_line.o_selected', run: 'scan LOC-01-02-00' }, + { trigger: '.o_barcode_line:not(.o_selected)', run: 'scan O-BTN.validate' }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_internal_picking_reserved_1', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_src'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + helper.assertLineIsHighlighted(0, false); + helper.assertLineLocations(0, '.../Section 1', '.../Section 2'); + helper.assertLineIsHighlighted(1, false); + helper.assertLineLocations(1, '.../Section 1', '.../Section 2'); + helper.assertLineIsHighlighted(2, false); + helper.assertLineLocations(2, '.../Section 3', '.../Section 4'); + } + }, + + /* We first move a product1 from shef3 to shelf2. + */ + { + trigger: '.o_barcode_client_action', + run: 'scan shelf3' + }, + + { + trigger: '.o_barcode_line .o_line_source_location .fw-bold:contains("Section 3")', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_product'); + const locationInBold = document.querySelector('.o_line_source_location .fw-bold'); + const lineInSection3 = locationInBold.closest('.o_barcode_line'); + helper.assertLineLocations(lineInSection3, '.../Section 3', '.../Section 4'); + } + }, + + { // Scanning product1 after scanned shelf3 will select the existing line but change its source. + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_dest'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + const lineproduct1 = helper.getLine({ selected: true }); + helper.assertLineIsHighlighted(lineproduct1, true); + helper.assertLineLocations(lineproduct1, '.../Section 3', '.../Section 2'); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-02-00' + }, + + { + trigger: '.o_barcode_line:not(.o_selected):first-child .o_line_destination_location:contains(".../Section 2")', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_src'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + const lineproduct1 = helper.getLine({barcode: 'product1'}); + helper.assertLineIsHighlighted(lineproduct1, false); + helper.assertLineLocations(lineproduct1, '.../Section 3', '.../Section 2'); + } + }, + + // Scans Section 1 as source location. + { 'trigger': '.o_barcode_client_action', run: 'scan LOC-01-01-00' }, + + { + trigger: '.o_line_source_location .fw-bold:contains("Section 1")', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_product'); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, false); + helper.assertLineIsHighlighted(2, false); + } + }, + + // Process the reservation for product1 (create a new line as the previous one was overrided). + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_barcode_line:nth-child(4).o_selected', + run: function() { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_product_or_dest'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, false); + helper.assertLineIsHighlighted(2, false); + helper.assertLineIsHighlighted(3, true); + helper.assertLineLocations(3, '.../Section 1', 'WH/Stock'); + } + }, + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-02-00' }, + + // Process the reservation for product2 (Section 1 to Section 2). + { trigger: '.o_scan_message.o_scan_src', run: 'scan LOC-01-01-00' }, + { trigger: '.o_scan_message.o_scan_product', run: 'scan product2' }, + { + trigger: '.o_barcode_line:nth-child(2).o_selected', + run: function() { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_dest'); + helper.assertValidateIsHighlighted(false); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, true); + helper.assertLineIsHighlighted(2, false); + helper.assertLineIsHighlighted(3, false); + } + }, + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-02-00' }, + + // Process the reservation for product2 (Section 3 to Section 4). + { trigger: '.o_scan_message.o_scan_src', run: 'scan shelf3' }, + { trigger: '.o_scan_message.o_scan_product', run: 'scan product2' }, + { + trigger: '.o_barcode_line:nth-child(3).o_selected', + run: function() { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_dest'); + helper.assertValidateIsHighlighted(false); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, false); + helper.assertLineIsHighlighted(2, true); + helper.assertLineIsHighlighted(3, false); + } + }, + { trigger: '.o_scan_message.o_scan_dest', run: 'scan shelf4' }, + + { + trigger: '.o_scan_message.o_scan_validate', + run: function() { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_validate'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + + helper.assertLineIsHighlighted(0, false); + helper.assertLineQty(0, '1 / 1'); + helper.assertLineLocations(0, '.../Section 3', '.../Section 2'); + + helper.assertLineIsHighlighted(1, false); + helper.assertLineQty(1, '1 / 1'); + helper.assertLineLocations(1, '.../Section 1', '.../Section 2'); + + helper.assertLineIsHighlighted(2, false); + helper.assertLineQty(2, '1 / 1'); + helper.assertLineLocations(2, '.../Section 3', '.../Section 4'); + + helper.assertLineIsHighlighted(3, false); + helper.assertLineQty(3, '1'); + helper.assertLineLocations(3, '.../Section 1', '.../Section 2'); + } + }, +]}); + +registry.category("web_tour.tours").add('test_procurement_backorder', { + test: true, steps: () => [ + { trigger: '.o_barcode_client_action', run: 'scan PB' }, + { trigger: '.o_barcode_line:contains("PB")', run: 'scan O-BTN.validate' }, + { trigger: '.o_notification.border-success', isCheck: true }, + ] +}); + +registry.category("web_tour.tours").add('test_receipt_reserved_1', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + + // Try to scan WH/Stock 2 as the destination -> Should display an error notification. + { trigger: '.o_barcode_line.o_selected.o_line_completed', run: 'scan WH-STOCK-2' }, + { + trigger: '.o_notification.border-danger', + run: () => { + helper.assertErrorMessage("The scanned location doesn't belong to this operation's destination"); + }}, + // Scan Shelf1 as scanned product2 destination. + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-01-00' }, + + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertValidateIsHighlighted(false); + } + }, + + // Open manual scanner. + { + trigger: '.o_barcode_client_action .o_stock_mobile_barcode', + }, + + // Manually add 'product1'. + { + trigger: '.modal-content .modal-body #manual_barcode', + run: function(actions) { + var barcode = 'product1'; + actions.text(barcode); + } + }, + + // Apply the manual entry of barcode. + { + trigger: '.modal-content .modal-footer .btn-primary:not(:disabled)', + }, + + { + trigger: '.o_barcode_line[data-barcode="product1"] .qty-done:contains("4")', + run: function() { + helper.assertValidateIsHighlighted(true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00' + }, + + { + trigger: '.o_scan_message.o_scan_validate', + run: function() { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_validate'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + } + }, + + { + trigger: '.o_add_line', + }, + { + trigger: '.o_field_widget[name="product_id"]', + run: function() { + helper.assertFormLocationDest('WH/Stock'); + }, + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_receipt_reserved_2_partial_put_in_pack', {test: true, steps: () => [ + // Scan the picking's name to open it. + { trigger: '.o_stock_barcode_main_menu', run: 'scan receipt_test' }, + { + trigger: '.o_barcode_line', + run: function() { + helper.assertLinesCount(2); + helper.assertLineProduct(0, "product1"); + helper.assertLineQty(0, "0 / 3"); + helper.assertLineProduct(1, "product2"); + helper.assertLineQty(1, "0 / 3"); + }, + }, + + // Scan 2x product1 then put in pack. + { trigger: '.o_barcode_client_action', run: 'scan product1'}, + { trigger: '.o_barcode_client_action', run: 'scan product1'}, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains("2")', + run: function() { + helper.assertLinesCount(2); + helper.assertLineProduct(0, "product1"); + helper.assertLineQty(0, "2 / 3"); + helper.assertLineProduct(1, "product2"); + helper.assertLineQty(1, "0 / 3"); + }, + }, + { trigger: '.o_barcode_client_action', run: 'scan O-BTN.pack'}, + { + trigger: '.o_barcode_line:contains("PACK0001000")', + run: function() { + const lines = helper.getLines(); + helper.assert(lines.length, 3); + + helper.assertLineProduct(lines[0], "product1"); + helper.assertLineQty(lines[0], "0 / 1"); + helper.assert(lines[0].querySelector('.result-package'), null); + + helper.assertLineProduct(lines[1], "product2"); + helper.assertLineQty(lines[1], "0 / 3"); + helper.assert(lines[1].querySelector('.result-package'), null); + + helper.assertLineProduct(lines[2], "product1"); + helper.assertLineQty(lines[2], "2 / 2"); + helper.assert(lines[2].querySelector('.result-package').innerText, "PACK0001000"); + }, + }, + + // Scan product1 and product2 then put in pack. + { trigger: '.o_barcode_client_action', run: 'scan product1'}, + { trigger: '.o_barcode_line.o_selected.o_line_completed', run: 'scan product2'}, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains("1")', + run: function() { + const lines = helper.getLines(); + helper.assert(lines.length, 3); + + helper.assertLineProduct(lines[0], "product1"); + helper.assertLineQty(lines[0], "1 / 1"); + helper.assert(lines[0].querySelector('.result-package'), null); + + helper.assertLineProduct(lines[1], "product2"); + helper.assertLineQty(lines[1], "1 / 3"); + helper.assert(lines[1].querySelector('.result-package'), null); + + helper.assertLineProduct(lines[2], "product1"); + helper.assertLineQty(lines[2], "2 / 2"); + helper.assert(lines[2].querySelector('.result-package').innerText, "PACK0001000"); + }, + }, + { trigger: '.o_put_in_pack' }, + { + trigger: '.o_barcode_line:contains("PACK0001001")', + run: function() { + const lines = helper.getLines(); + helper.assert(lines.length, 4); + + helper.assertLineProduct(lines[0], "product2"); + helper.assertLineQty(lines[0], "0 / 2"); + helper.assert(lines[0].querySelector('.result-package'), null); + + helper.assertLineProduct(lines[1], "product1"); + helper.assertLineQty(lines[1], "2 / 2"); + helper.assert(lines[1].querySelector('.result-package').innerText, "PACK0001000"); + + helper.assertLineProduct(lines[2], "product1"); + helper.assertLineQty(lines[2], "1 / 1"); + helper.assert(lines[2].querySelector('.result-package').innerText, "PACK0001001"); + + helper.assertLineProduct(lines[3], "product2"); + helper.assertLineQty(lines[3], "1 / 1"); + helper.assert(lines[3].querySelector('.result-package').innerText, "PACK0001001"); + }, + }, + // Confirm the backorder, then close the receipt. + { trigger: '.btn.o_validate_page' }, + { trigger: '.modal-dialog button.btn-primary' }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_receipt_product_not_consecutively', {test: true, steps: () => [ + // Scan two products (product1 - product2 - product1) + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { trigger: '.o_barcode_line', run: 'scan product2' }, + { trigger: '.o_barcode_line:contains("product2")', run: 'scan product1' }, + { + trigger: '.o_barcode_line[data-barcode="product1"] .qty-done:contains("2")', + run: 'scan O-BTN.validate', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add("test_delivery_source_location", {test: true, steps: () => [ + // FIRST DELIVERY (using stock from WH/Stock) + { trigger: ".o_stock_barcode_main_menu", run: 'scan delivery_from_stock' }, + // Tries to scan a location who doesn't belong to the delivery's source location. + { trigger: '.o_scan_message.o_scan_src', run: 'scan WH-SECOND-STOCK' }, + { + trigger: '.o_notification.border-danger', + run: () => { + helper.assertErrorMessage("The scanned location doesn't belong to this operation's location"); + }}, + { trigger: 'button.o_notification_close' }, + // Scans the right location now. + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-00-00' }, + { trigger: '.o_scan_message.o_scan_product', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product1' }, + { trigger: '.o_validate_page.btn-success' }, + + // SECOND DELIVERY (using stock from WH/Second Stock) + { trigger: ".o_stock_barcode_main_menu", run: 'scan delivery_from_second_stock' }, + // Tries to scan a location who doesn't belong to the delivery's source location. + { trigger: '.o_scan_message.o_scan_src', run: 'scan LOC-01-00-00' }, + { + trigger: '.o_notification.border-danger', + run: () => { + helper.assertErrorMessage("The scanned location doesn't belong to this operation's location"); + }}, + { trigger: 'button.o_notification_close' }, + // Scans the right location now. + { trigger: '.o_barcode_client_action', run: 'scan WH-SECOND-STOCK' }, + { trigger: '.o_scan_message.o_scan_product', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product1' }, + ...stepUtils.validateBarcodeOperation('.o_validate_page.btn-success'), + + // Create a delivery on the fly and try to use both locations as source. + // Since the delivery is not planned and there is no way for the user to set + // that from the Barcode app, it should be possible. + { trigger: ".o_stock_barcode_main_menu", run: 'scan WH-DELIVERY' }, + { trigger: '.o_barcode_client_action', run: 'scan WH-SECOND-STOCK' }, + { trigger: '.o_scan_message.o_scan_product', run: 'scan product1' }, + { trigger: '.o_barcode_line', run: 'scan LOC-01-00-00' }, + { trigger: '.o_scan_message.o_scan_validate', run: 'scan product1' }, + { + trigger: '.o_barcode_line+.o_barcode_line', + run: () => { + helper.assertLinesCount(2); + helper.assertLineSourceLocation(0, "WH/Second Stock"); + helper.assertLineSourceLocation(1, "WH/Stock"); + } + }, +]}); + +registry.category("web_tour.tours").add("test_delivery_lot_with_multi_companies", {test: true, steps: () => [ + // Scans tsn-002: should find nothing since this SN belongs to another company. + { trigger: ".o_barcode_client_action", run: "scan tsn-002" }, + // Checks a warning was displayed and scans tsn-001: a line should be added. + { trigger: ".o_notification.border-danger", run: "scan tsn-001" }, + { + trigger: ".o_barcode_line", + run: function() { + const line = helper.getLine({ barcode: "productserial1" }); + helper.assert(line.querySelector(".o_line_lot_name").innerText, "tsn-001"); + }, + }, + // Scans tsn-003 then validate the delivery. + { trigger: ".o_barcode_client_action", run: "scan tsn-003" }, + { + extra_trigger: ".o_toggle_sublines", // Should have sublines since there is two SN. + trigger: ".o_validate_page", + }, + { trigger: ".o_notification.border-success", isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_delivery_lot_with_package', {test: true, steps: () => [ + // Unfold grouped lines. + { trigger: '.o_line_button.o_toggle_sublines' }, + { + trigger: '.o_barcode_client_action:contains("sn2")', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + helper.assertScanMessage('scan_serial'); + const [ line1, line2 ] = helper.getSublines(); + helper.assert(line1.querySelector('.o_line_lot_name').innerText, 'sn1'); + helper.assert(line1.querySelector('.fa-archive').parentElement.innerText.includes("pack_sn_1"), true); + helper.assert(line2.querySelector('.o_line_lot_name').innerText, 'sn2'); + helper.assert(line2.querySelector('.fa-archive').parentElement.innerText.includes("pack_sn_1"), true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan sn3' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan sn4' + }, + + { + trigger: '.o_barcode_client_action:contains("sn4")', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(4); + helper.assertScanMessage('scan_validate'); + const [ line1, line2, line3, line4 ] = helper.getSublines(); + helper.assert(line1.querySelector('.o_line_lot_name').innerText, "sn1"); + helper.assert(line1.querySelector('.o_line_owner'), null); + helper.assert(line1.querySelector('.result-package').innerText, "pack_sn_1"); + helper.assert(line1.querySelector('.package').innerText, "pack_sn_1"); + helper.assert(line2.querySelector('.o_line_lot_name').innerText, "sn3"); + helper.assert(line2.querySelector('.o_line_owner'), null); + helper.assert(line2.querySelector('.package').innerText, "pack_sn_2"); + helper.assert(line3.querySelector('.o_line_lot_name').innerText, "sn4"); + helper.assert(line3.querySelector('.o_line_owner').innerText, "Particulier"); + helper.assert(line3.querySelector('.package').innerText, "pack_sn_2"); + helper.assert(line4.querySelector('.o_line_lot_name').innerText, "sn2"); + helper.assert(line4.querySelector('.o_line_owner'), null); + helper.assert(line4.querySelector('.result-package').innerText, "pack_sn_1"); + helper.assert(line4.querySelector('.package').innerText, "pack_sn_1"); + } + }, + + // Open the form view to trigger a save + { + trigger: '.o_sublines .o_barcode_line:nth-child(3) .fa-pencil', + }, + { + trigger: '.o_field_widget[name="product_id"]', + run: function() { + helper.assertFormQuantity("1"); + helper.assert($('div[name="package_id"] input').val(), "pack_sn_2"); + helper.assert($('div[name="result_package_id"] input').val(), ""); + helper.assert($('div[name="owner_id"] input').val(), "Particulier"); + helper.assert($('div[name="lot_id"] input').val(), "sn4"); + }, + }, + { + trigger: '.o_discard', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_delivery_lot_with_package_delivery_step', {test: true, steps: () => [ + { + trigger: '.o_barcode_line', + run: 'scan LOC-01-02-00', + }, + { + trigger: '.o_barcode_line', + run: 'scan productlot1', + }, + { + trigger: '.o_barcode_line', + run: 'scan sn' + }, + { + trigger: '.o_barcode_line:contains("sn")', + run: 'scan O-BTN.validate' + }, + { + trigger: '.o_notification.border-success', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_delivery_reserved_1', {test: true, steps: () => [ + // test that picking note properly pops up + close it + { trigger: '.alert:contains("A Test Note")' }, + { trigger: '.alert button.btn-close' }, + // Opens and close the line's form view to be sure the note is still hidden. + { trigger: '.o_add_line' }, + { trigger: '.o_discard' }, + { + trigger: '.o_barcode_lines', + run: function() { + const note = document.querySelector('.alert.alert-warning'); + helper.assert(Boolean(note), false, "Note must not be present"); + } + }, + + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_src'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-00-00' + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: function() { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + + // Display the picking's information to trigger a save. + { trigger: '.o_show_information' }, + { trigger: '.o_barcode_control .btn.o_discard' }, + { + trigger: '.o_barcode_line', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_delivery_reserved_2', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan product2' + }, + stepUtils.confirmAddingUnreservedProduct(), + + { + trigger: '.o_barcode_line.o_selected:contains("product2")', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + const p1_lines = helper.getLines({ barcode: 'product1' }); + helper.assertLineIsFaulty(p1_lines[0], false); + helper.assertLineIsFaulty(p1_lines[1], false); + const p2_line = helper.getLine({ barcode: 'product2' }); + helper.assertLineIsFaulty(p2_line, true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_line.o_selected:not(.o_line_completed)', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_validate'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + const lines = helper.getLines({ barcode: 'product1' }); + [0, 1].map(i => helper.assertLineQty(lines[i], "2 / 2")); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_barcode_line:nth-child(4)', + run: function () { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_validate'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + const p1_lines = helper.getLines({ barcode: 'product1' }); + helper.assertLineIsFaulty(p1_lines[0], false); + helper.assertLineIsFaulty(p1_lines[1], false); + helper.assertLineIsFaulty(p1_lines[2], true); + const p2_line = helper.getLine({ barcode: 'product2' }); + helper.assertLineIsFaulty(p2_line, true); + } + }, +]}); + +registry.category("web_tour.tours").add('test_delivery_reserved_3', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + } + }, + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { trigger: '.o_barcode_client_action', run: 'scan this_is_not_a_barcode_dude' }, + { + trigger: '.o_barcode_line.o_highlight', + run: function() { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_validate'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + helper.assertLineIsHighlighted(0, true); + helper.assertLineQty(0, "1 / 1"); + } + }, +]}); + +registry.category("web_tour.tours").add("test_delivery_reserved_4_backorder", { test: true, steps: () => [ + { + trigger: ".o_barcode_client_action", + run: function() { + // The picking has 3 moves but only 2 barcode lines because the move for product3 + // has no reservation, so no move line, so no barcode line neither. + helper.assertLinesCount(2); + helper.assertLineQty(0, "0 / 4"); // 4 demand, 4 reserved. + helper.assertLineQty(1, "0 / 2"); // 4 demand but only 2 reserved. + } + }, + // Scans product1 then tries to validate again -> Should display the backorder dialog. + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { + extra_trigger: ".o_barcode_line.o_selected", + trigger: ".o_validate_page", + }, + { + trigger: ".modal-content.o_barcode_backorder_dialog", + run: function() { + const incompleteLines = document.querySelectorAll(".o_barcode_backorder_product_row"); + helper.assert(incompleteLines.length, 2); + const [line1, line2] = incompleteLines; + helper.assert(line1.querySelector("[name='qty-done']").innerText, "1"); + helper.assert(line1.querySelector("[name='reserved-qty']").innerText, "4"); + helper.assert(line1.querySelector("[name='backorder-qty']").innerText, "3"); + helper.assert(line2.querySelector("[name='qty-done']").innerText, "0"); + helper.assert(line2.querySelector("[name='reserved-qty']").innerText, "2"); + helper.assert(line2.querySelector("[name='backorder-qty']").innerText, "2"); + }, + }, + { trigger: ".modal-dialog button.btn-secondary" }, // Cancel -> Stay on the delivery. + // Scans 3 more times product1 to complete the line then clicks on validate again. + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { + extra_trigger: ".o_barcode_line.o_selected.o_line_completed", + trigger: ".o_validate_page", + }, + { + trigger: ".modal-content.o_barcode_backorder_dialog", + run: function() { + const incompleteLines = document.querySelectorAll(".o_barcode_backorder_product_row"); + helper.assert(incompleteLines.length, 1); + const [incompleteLine] = incompleteLines; + helper.assert(incompleteLine.querySelector("[name='qty-done']").innerText, "0"); + helper.assert(incompleteLine.querySelector("[name='reserved-qty']").innerText, "2"); + helper.assert(incompleteLine.querySelector("[name='backorder-qty']").innerText, "2"); + }, + }, + { trigger: ".modal-dialog button.btn-primary" }, // Validate -> Should create a backorder. + { + trigger: ".o_notification", + run: function() { + const backorderLink = document.querySelector(".o_notification_buttons span"); + helper.assert( + backorderLink.innerText.includes("WH/OUT/"), true, + "The notification should contain a link to the created backorder." + ); + }, + } +]}); + +registry.category("web_tour.tours").add('test_delivery_using_buttons', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + helper.assert( + $('.o_line_button[name=incrementButton]').length, 3, + "3 buttons must be present in the view (one by line)" + ); + helper.assertLineQty(0, "0 / 2"); + helper.assertLineQty(1, "0 / 3"); + helper.assertLineQty(2, "0 / 4"); + helper.assertButtonShouldBeVisible(0, "add_quantity"); + helper.assertButtonShouldBeVisible(1, "add_quantity"); + helper.assertButtonShouldBeVisible(2, "add_quantity"); + } + }, + + // On the first line, goes on the form view and press digipad +1 button. + { trigger: '.o_barcode_line:first-child .o_edit' }, + { trigger: '.o_digipad_button.o_increase' }, + { trigger: '.o_save' }, + { + trigger: '.o_barcode_lines', + run: function() { + helper.assertButtonShouldBeVisible(0, "add_quantity"); + helper.assertLineQty(0, '1 / 2'); + helper.assertLineIsHighlighted(0, true); + helper.assertLineIsHighlighted(1, false); + helper.assertLineIsHighlighted(2, false); + } + }, + // Press +1 button again, now its buttons must be hidden. + { + trigger: '.o_barcode_line:first-child .o_add_quantity' + }, + { + trigger: '.o_barcode_line:first-child.o_selected.o_line_completed', + run: function() { + helper.assertButtonShouldBeVisible(0, "add_quantity", false); + helper.assertLineQty(0, '2 / 2'); + helper.assertButtonShouldBeVisible(1, "add_quantity"); + helper.assertLineQty(1, '0 / 3'); + } + }, + // Press the add remaining quantity button. + { trigger: '.o_barcode_line:nth-child(2) .o_add_quantity' }, + // Product2 is now done, its button must be hidden. + { + trigger: '.o_barcode_line:nth-child(2).o_selected.o_line_completed', + run: function() { + helper.assertLineButtonsAreVisible(1, false, '[name=incrementButton]'); + helper.assertLineQty(1, '3 / 3'); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, true); + helper.assertLineIsHighlighted(2, false); + } + }, + + // Last line at beginning (product3) now at top of list + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertButtonShouldBeVisible(2, 'add_quantity'); + helper.assertLineQty(2, '0 / 4'); + } + }, + // Scan product3 one time, then checks the quantities. + { + trigger: '.o_barcode_client_action', + run: 'scan product3', + }, + { + trigger: '.o_barcode_line:last-child.o_selected .qty-done:contains("1")', + run: function() { + helper.assertButtonShouldBeVisible(2, 'add_quantity'); + helper.assertLineQty(2, '1 / 4'); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, false); + helper.assertLineIsHighlighted(2, true); + } + }, + // Goes on the form view and press digipad +1 button. + { trigger: '.o_barcode_line:last-child .o_edit' }, + { trigger: '.o_digipad_button.o_increase' }, + { trigger: '.o_save' }, + { + trigger: '.o_barcode_lines', + run: function() { + helper.assertButtonShouldBeVisible(0, 'add_quantity'); + helper.assertLineQty(0, '2 / 4'); + } + }, + // Press the add remaining quantity button, then the button must be hidden. + { trigger: '.o_barcode_line:first-child .o_add_quantity' }, + { + trigger: '.o_barcode_line:first-child .qty-done:contains("4")', + run: function() { + helper.assertLineButtonsAreVisible(0, false, '[name=incrementButton]'); + helper.assertLineQty(0, '4 / 4'); + helper.assertValidateIsHighlighted(true); + } + }, + + // Now, scan one more time the product3 to create a new line (its +1 button must be visible). + { + trigger: '.o_barcode_client_action', + run: 'scan product3', + }, + // The new line is created at the second position (directly below the previous selected line). + { + trigger: '.o_barcode_line:nth-child(2).o_selected', + run: function() { + helper.assertLinesCount(4); + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, true); + helper.assertLineIsHighlighted(2, false); + helper.assertLineIsHighlighted(3, false); + helper.assertLineQty(1, '1'); + // +1 button must be present on new line. + helper.assertButtonShouldBeVisible(1, 'add_quantity'); + } + }, + // Press +1 button of the new line. + { + trigger: '.o_barcode_line:nth-child(2) .o_add_quantity' + }, + { + trigger: '.o_barcode_line:nth-child(2) .qty-done:contains("2")', + run: function() { + helper.assertLineIsHighlighted(0, false); + helper.assertLineIsHighlighted(1, true); + helper.assertLineIsHighlighted(2, false); + helper.assertLineIsHighlighted(3, false); + helper.assertLineQty(1, '2'); + // +1 button must still be present. + helper.assertButtonShouldBeVisible(1, 'add_quantity'); + } + }, + + // Validate the delivery. + { + trigger: '.o_validate_page' + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_remaining_decimal_accuracy', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + helper.assertLineQty(0, "0 / 4"); + helper.assertButtonShouldBeVisible(0, "add_quantity"); + } + }, + + // Goes on the form view and add 2.2 . + { trigger: '.o_barcode_line:first-child .o_edit' }, + { + trigger: 'div[name=qty_done] input', + run: 'text 2.2', + }, + { trigger: '.o_save' }, + { + trigger: '.o_barcode_lines', + run: function() { + helper.assertButtonShouldBeVisible(0, "add_quantity"); + helper.assertLineQty(0, '2.2 / 4'); + const buttonAddQty = document.querySelector(".o_add_quantity"); + helper.assert(buttonAddQty.innerText, "+1.8", "Something wrong with the quantities"); + } + }, + + // check button is correctly set for digits < 1 + { trigger: '.o_barcode_line:first-child .o_edit' }, + { + trigger: 'input.o_input[id=qty_done_1]', + run: 'text 3.5', + }, + { trigger: '.o_save' }, + { + trigger: '.o_barcode_lines', + run: function() { + helper.assertButtonShouldBeVisible(0, "add_quantity"); + helper.assertLineQty(0, '3.5 / 4'); + const buttonAddQty = document.querySelector(".o_add_quantity"); + helper.assert(buttonAddQty.innerText, "+0.5", "Something wrong with the quantities"); + } + }, +]}); + +registry.category("web_tour.tours").add('test_receipt_from_scratch_with_lots_1', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_notification.border-danger' + }, + + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertErrorMessage('You are expected to scan one or more products.'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1' + }, + + { + trigger: '.o_barcode_line', + run: 'scan lot1', + }, + + { + trigger: '.o_line_lot_name:contains("lot1")', + run: 'scan LOC-01-00-00' + }, + + { + trigger: '.o_scan_message.o_scan_validate', + run: 'scan productserial1' + }, + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan lot2', + }, + + { + trigger: '.o_line_lot_name:contains("lot2")', + run: 'scan LOC-01-01-00' + }, + + { trigger: '.o_scan_message.o_scan_validate', run: 'scan productserial1' }, + { trigger: '.o_scan_message.o_scan_serial', run: 'scan lot3' }, + { trigger: '.o_scan_message.o_scan_product_or_dest', run: 'scan WH-STOCK-2' }, + { + trigger: '.o_scan_message.o_scan_validate', + run: () => { + helper.assertLinesCount(3); + helper.assertLineDestinationLocation(0, "WH/Stock"); + helper.assertLineDestinationLocation(1, ".../Section 1"); + helper.assertLineDestinationLocation(2, "WH/Stock 2"); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_receipt_from_scratch_with_lots_2', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1' + }, + + { trigger: '.o_barcode_line .o_edit' }, + + { + trigger: '.o_input[id=lot_id_0]', + run: function () { + const $lot_name = $('#lot_name_0'); + // Check if the lot_name is invisible + helper.assert($lot_name.length, 0); + } + }, + + { trigger: '.o_save' }, + + { + trigger: '.o_barcode_line', + run: 'scan lot1', + }, + + { trigger: '.o_line_lot_name:contains(lot1)' }, + + { trigger: '.o_barcode_line .o_edit' }, + + { + trigger: '.o_input[id="lot_name_0"]', + run: function () { + const $lot_id = $('#lot_id_0'); + // check that the lot_id is invisible + helper.assert($lot_id.length, 0); + } + }, + + { trigger: '.o_save' }, + + { + trigger: '.o_line_lot_name:contains(lot1)', + run: 'scan lot1', + }, + + { + trigger: '.qty-done:contains(2)', + run: 'scan lot2', + }, + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan lot2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00' + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_receipt_from_scratch_with_lots_3', {test: true, steps: () => [ + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_barcode_line', + run: function() { + helper.assertLinesCount(1); + const line = helper.getLine({barcode: 'product1'}); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1"); + } + }, + + // Scans a second time product1 after going through the edit form view. + { trigger: '.o_barcode_line.o_selected .btn.o_edit' }, + { trigger: '.o_discard' }, + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + + { + trigger: '.o_barcode_line .qty-done:contains("2")', + run: 'scan productlot1' + }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: function() { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: 'product1' }); + const line2 = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "2"); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line2, "0"); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_selected .qty-done:contains(2)', + run: function() { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: 'product1' }); + const line2 = helper.getLine({ barcode: 'productlot1' }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "2"); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line2, "2"); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_receipt_from_scratch_with_lots_4', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + { + trigger: '.o_add_line', + extra_trigger: '.qty-done:contains("3")', + }, + { + trigger: '.o_field_widget[name="product_id"]', + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_delivery_from_scratch_with_lots_1', {test: true, steps: () => [ + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot2', + }, + // Open the form view to trigger a save + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + { + trigger: '.o_add_line', + extra_trigger: '.o_barcode_line:nth-child(2)', + }, + + { + trigger: '.o_field_widget[name="product_id"]', + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_delivery_from_scratch_with_incompatible_lot', {test: true, steps: () => [ + { trigger: '.o_barcode_client_action', run: 'scan 0000000001' }, + { trigger: '.o_barcode_line:first-child .o_edit' }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_delivery_from_scratch_with_common_lots_name', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line', + run: 'scan LOT01', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOT01', + }, + { + trigger: '.o_barcode_line[data-barcode="product1"] .qty-done:contains("2")', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line:contains("product2")', + run: 'scan LOT01', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOT01', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOT01', + }, + { + trigger: '.qty-done:contains("3")', + run: 'scan SUPERSN', + }, + { trigger: '.o_barcode_line:contains("productserial1")' }, + // Open the form view to trigger a save + { trigger: '.o_barcode_line:first-child .o_edit' }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_receipt_with_sn_1', {test: true, steps: () => [ + { trigger: '.o_barcode_client_action', run: 'scan sn1' }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_delivery_from_scratch_with_sn_1', {test: true, steps: () => [ + /* scan a product tracked by serial number. Then scan 4 a its serial numbers. + */ + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn1', + }, + + { + trigger: '.o_notification.border-danger' + }, + + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertErrorMessage('The scanned serial number is already used.'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn3', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn4', + }, + // Open the form view to trigger a save + { + trigger: '.o_add_line', + }, + + { + trigger: '.o_field_widget[name="product_id"]', + }, + +]}); + +registry.category("web_tour.tours").add('test_delivery_reserved_lots_1', {test: true, steps: () => [ + { trigger: '.o_barcode_client_action', run: 'scan productlot1' }, + { trigger: '.o_barcode_line.o_selected .o_toggle_sublines', run: 'click' }, + { + trigger: '.o_sublines', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const sublines = helper.getSublines(); + helper.assertLineQty(sublines[0], "0 / 2"); + helper.assert(sublines[0].querySelector('button.o_add_quantity').innerText, "+2"); + helper.assertLineQty(sublines[1], "0 / 3"); + helper.assert(sublines[1].querySelector('button.o_add_quantity').innerText, "+3"); + }, + }, + { trigger: '.o_barcode_client_action', run: 'scan lot1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan lot3' }, + { + trigger: '.o_sublines .o_barcode_line:nth-child(3)', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + // Check lines and "Add quantity" buttons quantities are correctly updated. + helper.assertLineQty(sublines[0], "1 / 2"); + helper.assert(sublines[0].querySelector('button.o_add_quantity').innerText, "+1"); + helper.assertLineQty(sublines[1], "1"); + helper.assert(sublines[1].querySelector('button.o_add_quantity').innerText, "+1"); + helper.assertLineQty(sublines[2], "0 / 3"); + helper.assert(sublines[2].querySelector('button.o_add_quantity').innerText, "+3"); + }, + }, + { trigger: '.o_barcode_client_action', run: 'scan lot1' }, + { + trigger: '.o_sublines .o_barcode_line.o_selected.o_line_completed', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + helper.assertLineQty(sublines[0], "2 / 2"); + helper.assert(sublines[0].querySelector('button.o_add_quantity').innerText, "+1"); + helper.assertLineQty(sublines[1], "1"); + helper.assert(sublines[1].querySelector('button.o_add_quantity').innerText, "+1"); + helper.assertLineQty(sublines[2], "0 / 3"); + helper.assert(sublines[2].querySelector('button.o_add_quantity').innerText, "+2"); + }, + }, + { trigger: '.o_barcode_client_action', run: 'scan lot2' }, + { trigger: '.o_barcode_line.o_selected:not(.o_line_completed)', run: 'scan lot2' }, + { + trigger: '.o_barcode_lines > .o_barcode_line.o_line_completed', + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + // Since the reservation is completed, no "Add Quantity" buttons should be displayed. + helper.assertLineQty(sublines[0], "2 / 2"); + helper.assert(sublines[0].querySelector('button.o_add_quantity'), null); + helper.assertLineQty(sublines[1], "1"); + helper.assert(sublines[1].querySelector('button.o_add_quantity'), null); + helper.assertLineQty(sublines[2], "2 / 3"); + helper.assert(sublines[2].querySelector('button.o_add_quantity'), null); + }, + }, + // Open the form view to trigger a save. + { trigger: '.o_add_line' }, + { trigger: '.o_field_widget[name="product_id"]' }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_delivery_different_products_with_same_lot_name', {test: true, steps: () => [ + + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productlot2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + // Open the form view to trigger a save + { + trigger: '.o_add_line', + }, + + { + trigger: '.o_field_widget[name="product_id"]', + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_delivery_reserved_with_sn_1', {test: true, steps: () => [ + /* scan a product tracked by serial number. Then scan 4 a its serial numbers. + */ + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn3', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn3', + }, + + { + trigger: '.o_notification.border-danger' + }, + + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertErrorMessage('The scanned serial number is already used.'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn4', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn2', + }, + // Open the form view to trigger a save + { + trigger: '.o_add_line', + }, + + { + trigger: '.o_field_widget[name="product_id"]', + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_nomenclature_alias_and_conversion', {test: true, steps: () => [ + // Before all, create a new receipt on the fly. + { trigger: '.o_stock_barcode_main_menu', run: 'scan WH-RECEIPTS' }, + // First, scan the alias and check the product was found (a line was then created.) + { trigger: '.o_barcode_client_action', run: 'scan alias_for_upca' }, + { + trigger: '.o_barcode_line.o_selected', + run: function () { + const line = helper.getLine({ barcode: '123123123125' }); + helper.assertLineQty(line, "1"); + } + }, + // Secondly, scan the product's barcode but as a EAN-13. + { trigger: '.o_barcode_line.o_selected .qty-done:contains(1)', run: 'scan 0123123123125' }, + + // Then scan the second alias (who will be replaced by an EAN-13) and check the product is find + // in that case too (the EAN-13 should be converted into a UPC-A even if it comes from an alias, + // that's where the rules order is important since the alias rule should be used before the rule + // who convert an EAN-13 into an UPC-A). + { trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', run: 'scan alias_for_ean13' }, + + // Finally, checks we can still scan the raw product's barcode :) + { trigger: '.o_barcode_line.o_selected .qty-done:contains(3)', run: 'scan 123123123125' }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(4)', + run: function () { + const line = helper.getLine({ barcode: '123123123125' }); + helper.assertLineQty(line, "4"); + } + }, +]}); + +registry.category("web_tour.tours").add('test_receipt_reserved_lots_multiloc_1', {test: true, steps: () => [ + /* Receipt of a product tracked by lots. Open an existing picking with 4 + * units initial demands. Scan 2 units in lot1 in location WH/Stock. Then scan + * 2 unit in lot2 in location WH/Stock/Section 2 + */ + + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_line .qty-done:contains("2")', + run: 'scan LOC-01-02-00', + }, + + { + trigger: '.o_barcode_line .o_line_destination_location:contains("Section 2")', + run: 'scan productlot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot2', + }, + + { + trigger: '.o_barcode_line.o_selected:contains("lot2") .qty-done:contains("2")', + run: 'scan LOC-01-01-00', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_receipt_duplicate_serial_number', {test: true, steps: () => [ + /* Create a receipt. Try to scan twice the same serial in different + * locations. + */ + { + trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")', + }, + // reception + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-RECEIPTS', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_line', + run: 'scan sn1', + }, + + { + trigger: '.o_barcode_line .o_line_lot_name:contains("sn1")', + run: 'scan LOC-01-01-00', + }, + + { + trigger: '.o_barcode_line .o_line_destination_location:contains("../Section 1")', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan sn1', + }, + + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertErrorMessage('The scanned serial number is already used.'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-02-00', + }, + { + trigger: '.o_barcode_line:nth-child(2) .o_line_destination_location:contains("../Section 2")', + run: 'scan O-BTN.validate' + }, + { + trigger: '.o_notification.border-success', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_delivery_duplicate_serial_number', {test: true, steps: () => [ + /* Create a delivery. Try to scan twice the same serial in different + * locations. + */ + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-DELIVERY', + }, + + { + trigger: '.o_scan_message.o_scan_src', + run: 'scan LOC-01-01-00', + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_line:contains("productserial1")', + run: 'scan sn1', + }, + + { + trigger: '.o_barcode_line .o_line_lot_name:contains("sn1")', + run: 'scan LOC-01-01-00', + }, + + { + trigger: '.o_scan_message.o_scan_validate', + run: 'scan productserial1', + }, + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan sn1', + }, + + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertErrorMessage('The scanned serial number is already used.'); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan sn2', + }, + ...stepUtils.validateBarcodeOperation(), + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_bypass_source_scan', {test: true, steps: () => [ + /* Scan directly a serial number, a package or a lot in delivery order. + * It should implicitely trigger the same action than a source location + * scan with the state location. + */ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + } + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan serial1', + }, + + { + trigger: '.o_barcode_line[data-barcode="productserial1"] .o_edit', + }, + + { + trigger: '.o_field_many2one[name=lot_id]', + extra_trigger: '.o_field_widget[name="qty_done"]', + position: "bottom", + run: function (actions) { + actions.text("", this.$anchor.find("input")); + }, + }, + + { + trigger: '.o_field_widget[name=qty_done] input', + run: 'text 0', + }, + + { + trigger: '.o_save' + }, + + { + trigger: '.o_barcode_line', + run: 'scan lot1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan lot1', + }, + + // Tries to scan a pack in a location the delivery shouldn't have access. + { trigger: '.o_scan_message.o_scan_product', run: 'scan SUSPACK' }, + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertErrorMessage("You are expected to scan one or more products or a package available at the picking location"); + }, + }, + { trigger: 'button.o_notification_close' }, + // Scans a package in the right location now. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan THEPACK', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan productserial1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan serial1', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_settings_pick_int_1', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(false); // Can't validate until product with barcode was scanned. + const [ lineProductNoBarcode, lineProduct1 ] = document.querySelectorAll('.o_barcode_line'); + helper.assert( + lineProduct1.querySelector('.btn.o_edit').disabled, true, + "Edit button should be disabled until the product was scanned"); + helper.assert( + Boolean(lineProduct1.querySelector('.btn.o_add_quantity')), false, + "No button to automatically add the quantity if the product scan is mandatory"); + helper.assert( + lineProductNoBarcode.querySelector('.btn.o_edit').disabled, false, + "Edit button is always enabled if the product has no barcode (it can't be scanned')"); + helper.assert( + Boolean(lineProductNoBarcode.querySelector('.btn.o_add_quantity')), true, + "Add quantity button is always displayed if the product has no barcode"); + } + }, + // Scans the source location, it should display an error. + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00', + }, + { + trigger: '.o_notification.border-danger', + run: function() { + helper.assert( + document.querySelector('.o_notification_content').innerText, + "You must scan a product"); + }, + }, + // Scans product1, its buttons should be displayed/enabled. + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line.o_selected', + run: function() { + const lineProduct1 = document.querySelector('.o_barcode_line[data-barcode="product1"]'); + helper.assert( + lineProduct1.querySelector('.btn.o_edit').disabled, false, + "product1 was scanned, the edit button should now be enabled"); + helper.assert( + Boolean(lineProduct1.querySelector('.btn.o_add_quantity')), true, + "product1 was scanned, the add quantity button should be visible"); + helper.assertValidateIsHighlighted(false); + // Since the only product with a barcode was scanned, the validate button is enabled. + helper.assertValidateEnabled(true); + } + }, + // Uses buttons to complete the lines. + { trigger: '.o_barcode_line.o_selected .btn.o_add_quantity' }, + { trigger: '.o_barcode_line .btn.o_add_quantity' }, + // Lines are completed, the message should ask to validate the operation and that's what we do. + { + trigger: '.btn.o_validate_page.btn-success', + extra_trigger: 'div[name="barcode_messages"] .fa-check-square', + }, + { trigger: '.o_notification.border-success', isCheck: true }, + // Checks that, despite scanning set to 'no', source and destination locations are still shown + { trigger: '.o_barcode_line:nth-child(1) .o_line_source_location:contains(".../Section 1")', isCheck: true }, + { trigger: '.o_barcode_line:nth-child(1) .o_line_destination_location:contains("WH/Stock")', isCheck: true }, + { trigger: '.o_barcode_line:nth-child(2) .o_line_source_location:contains(".../Section 1")', isCheck: true }, + { trigger: '.o_barcode_line:nth-child(2) .o_line_destination_location:contains("WH/Stock")', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_settings_pick_int_2', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_src'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(false); // Can't validate until product with barcode was scanned. + const [ lineProductNoBarcode, lineProduct1 ] = document.querySelectorAll('.o_barcode_line'); + helper.assert( + lineProduct1.querySelector('.btn.o_edit').disabled, true, + "Edit button should be disabled until the product was scanned"); + helper.assert( + Boolean(lineProduct1.querySelector('.btn.o_add_quantity')), false, + "No button to automatically add the quantity if the product scan is mandatory"); + helper.assert( + lineProductNoBarcode.querySelector('.btn.o_edit').disabled, true, + "All lines' buttons are disabled until a source location was scanned"); + helper.assert( + lineProductNoBarcode.querySelector('.btn.o_add_quantity').disabled, true, + "All lines' buttons are disabled until a source location was scanned"); + } + }, + // Scans a product, it should display an error. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_notification.border-danger', + run: function() { + helper.assert( + document.querySelector('.o_notification_content').innerText, + "You are supposed to scan WH/Stock or another source location"); + }, + }, + { trigger: '.btn.o_notification_close' }, + + // Scans the source location, the buttons for the product without barcode should be enabled. + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-00-00', + }, + { + trigger: '.o_scan_message.o_scan_product', + run: function () { + const [ lineProductNoBarcode, lineProduct1 ] = document.querySelectorAll('.o_barcode_line'); + helper.assert( + lineProduct1.querySelector('.btn.o_edit').disabled, true, + "Edit button should be disabled until the product was scanned"); + helper.assert( + Boolean(lineProduct1.querySelector('.btn.o_add_quantity')), false, + "No button to automatically add the quantity if the product scan is mandatory"); + helper.assert( + lineProductNoBarcode.querySelector('.btn.o_edit').disabled, false, + "Since the source of this line was scanned and it has no barcode, its buttons should be enabled"); + helper.assert( + lineProductNoBarcode.querySelector('.btn.o_add_quantity').disabled, false, + "Since the source of this line was scanned and it has no barcode, its buttons should be enabled"); + } + }, + // Scans another location, it replaces the previous scanned source as no product was scanned yet. + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00', + }, + + // Scans product1. + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line.o_selected', + run: function() { + const lineProduct1 = document.querySelector('.o_barcode_line[data-barcode="product1"]'); + helper.assert( + lineProduct1.querySelector('.btn.o_edit').disabled, false, + "product1 was scanned, the edit button should now be enabled"); + helper.assert( + Boolean(lineProduct1.querySelector('.btn.o_add_quantity')), true, + "product1 was scanned, the add quantity button should be visible"); + helper.assertValidateIsHighlighted(false); + // Since the only product with a barcode was scanned, the validate button is enabled. + helper.assertValidateEnabled(true); + } + }, + // Scans another product: it should raise an error as the destination should be scanned between each product. + { trigger: '.o_barcode_client_action', run: 'scan product2' }, + { + trigger: '.o_notification.border-danger', + run: function() { + helper.assert( + document.querySelector('.o_notification_content').innerText, + "Please scan destination location for product1 before scanning other product"); + }, + }, + { trigger: '.btn.o_notification_close' }, + + // Uses button to complete the line, then scan the destination. + { trigger: '.o_barcode_line.o_selected .btn.o_add_quantity' }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan LOC-01-00-00', + }, + // Scans again product1: should raise an error as it expects the source (should be scanned after each product). + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_notification.border-danger', + run: function() { + helper.assert( + document.querySelector('.o_notification_content').innerText, + "You are supposed to scan WH/Stock or another source location"); + }, + }, + { trigger: '.btn.o_notification_close' }, + + // Scans the source and updates the remaining product qty with its button (because no barcode). + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00', + }, + { + trigger: '.o_barcode_line .btn.o_add_quantity', + extra_trigger: '.o_scan_message.o_scan_product', + }, + // Tries to validate without scanning the destination: display a warning. + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan O-BTN.validate', + }, + { trigger: '.o_notification.border-danger .o_notification_close.btn' }, + + // Scans the destination location than validate the operation. + { + trigger: 'div[name="barcode_messages"] .fa-sign-in', // "Scan dest. loc." message's icon. + run: 'scan LOC-01-00-00', + }, + { + trigger: '.btn.o_validate_page.btn-success', + extra_trigger: 'div[name="barcode_messages"] .fa-check-square', + }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_receipt_scan_package_and_location_after_group_of_product', {test: true, steps: () => [ + { + trigger: ".o_barcode_client_action", + run: function () { + helper.assertLinesCount(3); + helper.assertLineProduct(0, "Barcodeless Product"); + helper.assertLineProduct(1, "product1"); + helper.assertLineProduct(2, "productlot1"); + } + }, + // Scans 2x product1... + { trigger: ".o_barcode_line", run: "scan product1" }, + { trigger: ".o_barcode_line.o_selected", run: "scan product1" }, + // ... process all the products with no barcode and 3 productlot1 (2 differents lots). + { + extra_trigger: ".o_barcode_line.o_selected .qty-done:contains(2)", + trigger: ".o_barcode_line:not([data-barcode]) .o_line_button.o_add_quantity", + }, + // ... and scans 3 productlot1 from 2 differents lots. + { trigger: ".o_barcode_line.o_selected.o_line_completed", run: "scan productlot1" }, + { trigger: ".o_barcode_line[data-barcode='productlot1']", run: "scan lot-01" }, + { trigger: ".o_barcode_line[data-barcode='productlot1']", run: "scan lot-01" }, + { trigger: ".o_barcode_line[data-barcode='productlot1']", run: "scan lot-02" }, + + // Scans Section 1, the destination should be applied to all previous scanned lines and + // the edited line. For the uncompleted lines, they should be split in two: + // - one line with the processed quantity going to the scanned location; + // - one line with the remaining quantity going to the picking's location. + { trigger: ".o_barcode_line.o_selected .o_toggle_sublines", run: "scan LOC-01-01-00" }, + { + trigger: ".o_barcode_line:nth-child(5)", + run: function () { + helper.assertLinesCount(5); + + helper.assertLineProduct(0, "Barcodeless Product"); + helper.assertLineQty(0, "4 / 4"); + helper.assertLineDestinationLocation(0, ".../Section 1"); + + helper.assertLineProduct(1, "product1"); + helper.assertLineQty(1, "2 / 2"); + helper.assertLineDestinationLocation(1, ".../Section 1"); + + helper.assertLineProduct(2, "product1"); + helper.assertLineQty(2, "0 / 2"); + helper.assertLineDestinationLocation(2, "WH/Stock"); + + helper.assertLineProduct(3, "productlot1"); + helper.assertLineQty(3, "3 / 3"); + helper.assertLineDestinationLocation(3, ".../Section 1"); + + helper.assertLineProduct(4, "productlot1"); + helper.assertLineQty(4, "0 / 3"); + helper.assertLineDestinationLocation(4, "WH/Stock"); + } + }, + + // Scan only one lot then another destination. Only this lot should be moved to this location. + { trigger: ".o_barcode_client_action", run: "scan productlot1" }, + { trigger: ".o_scan_message.o_scan_lot", run: "scan lot-02" }, + { + trigger: ".o_barcode_line.o_selected .o_line_lot_name:contains('lot-02')", + run: "scan LOC-01-02-00", + }, + + { + trigger: ".o_scan_message.o_scan_product", + run: function () { + helper.assertLinesCount(6); + + helper.assertLineProduct(0, "Barcodeless Product"); + helper.assertLineQty(0, "4 / 4"); + helper.assertLineDestinationLocation(0, ".../Section 1"); + + helper.assertLineProduct(1, "product1"); + helper.assertLineQty(1, "2 / 2"); + helper.assertLineDestinationLocation(1, ".../Section 1"); + + helper.assertLineProduct(2, "product1"); + helper.assertLineQty(2, "0 / 2"); + helper.assertLineDestinationLocation(2, "WH/Stock"); + + helper.assertLineProduct(3, "productlot1"); + helper.assertLineQty(3, "3 / 3"); + helper.assertLineDestinationLocation(3, ".../Section 1"); + + helper.assertLineProduct(4, "productlot1"); + helper.assertLineQty(4, "1 / 1"); + helper.assertLineDestinationLocation(4, ".../Section 2"); + + helper.assertLineProduct(5, "productlot1"); + helper.assertLineQty(5, "0 / 2"); + helper.assertLineDestinationLocation(5, "WH/Stock"); + } + }, + + // Process the remaining quantity then scans an existing package: only those lines should be packed. + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_line.o_selected", run: "scan product1" }, + { trigger: ".o_barcode_line.o_selected.o_line_completed", run: "scan productlot1" }, + { trigger: ".o_barcode_line.o_selected:not(.o_line_completed)", run: "scan lot-03" }, + { trigger: ".o_barcode_line.o_selected:not(.o_line_completed)", run: "scan lot-03" }, + { trigger: ".o_barcode_line.o_selected.o_line_completed", run: "scan pack-128" }, + // Scans another destination: only the packaged lines should go to this location. + { trigger: ".o_barcode_line [name='package']", run: "scan shelf3" }, + { + trigger: ".o_scan_message.o_scan_validate", + run: function () { + helper.assertLinesCount(6); + + helper.assertLineProduct(0, "Barcodeless Product"); + helper.assertLineQty(0, "4 / 4"); + helper.assertLineDestinationLocation(0, ".../Section 1"); + + helper.assertLineProduct(1, "product1"); + helper.assertLineQty(1, "2 / 2"); + helper.assertLineDestinationLocation(1, ".../Section 1"); + + let line = helper.getLine({ index: 2 }); + helper.assertLineProduct(line, "product1"); + helper.assertLineQty(line, "2 / 2"); + helper.assertLineDestinationLocation(line, ".../Section 3"); + helper.assert(line.querySelector('[name="package"]').innerText, "pack-128"); + + helper.assertLineProduct(3, "productlot1"); + helper.assertLineQty(3, "3 / 3"); + helper.assertLineDestinationLocation(3, ".../Section 1"); + + helper.assertLineProduct(4, "productlot1"); + helper.assertLineQty(4, "1 / 1"); + helper.assertLineDestinationLocation(4, ".../Section 2"); + + line = helper.getLine({ index: 5 }); + helper.assertLineProduct(5, "productlot1"); + helper.assertLineQty(5, "2 / 2"); + helper.assertLineDestinationLocation(5, ".../Section 3"); + helper.assert(line.querySelector('[name="package"]').innerText, "pack-128"); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_product_packaging', {test: true, steps: () => [ + { + trigger: '.o_barcode_line', + run: () => { + helper.assertScanMessage("scan_product"); + helper.assert(Boolean(document.querySelector('button.o_edit[disabled]')), true, + "Edit button should be visible but disabled"); + } + }, + { trigger: '.o_barcode_line', run: "scan product1x10" }, + { trigger: '.o_barcode_line.o_selected.o_line_completed', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_complete_flux_receipt', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(5); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(false); // Can't validate until product with barcode was scanned. + } + }, + // Scans product1 two times to complete the lines. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: function() { + helper.assertScanMessage('scan_product_or_dest'); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); // Can't validate until product with barcode was scanned. + } + }, + // Process product2 and product with no barcode with the button. + { trigger: '.o_barcode_line[data-barcode="product2"] .btn.o_add_quantity' }, + { + trigger: '.o_barcode_line:not([data-barcode]) .btn.o_add_quantity', + extra_trigger: '.o_barcode_line[data-barcode="product2"].o_line_completed', + }, + // Before to scan remaining product, scans a first time the destination. + { + trigger: '.o_barcode_line:not([data-barcode]).o_line_completed', + run: 'scan WH-INPUT' + }, + // The message should ask to scan a product, so scans product tracked by lots. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan productlot1' + }, + // Scans lot-001 x2, lot-002 x2 and lot-003 x2. + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-001' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-001' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-002' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-002' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-003' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-003' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected.o_line_completed', + run: function() { + helper.assertScanMessage('scan_product_or_dest'); + } + }, + // Scans the product tracked by serial numbers and scans three serials. + { + trigger: '.o_scan_message.o_scan_product_or_dest', + run: 'scan productserial1' + }, + { + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected', + run: 'scan sn-001' + }, + { + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected', + run: 'scan sn-002' + }, + { + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected', + run: 'scan sn-003' + }, + // It should ask to scan the destination, so scans it. + { + trigger: 'div[name="barcode_messages"] .o_scan_product_or_dest', + run: 'scan WH-INPUT', + }, + // Now the destination was scanned, it should say the operation can be validate. + { + extra_trigger: 'div[name="barcode_messages"] .o_scan_validate', + trigger: '.o_validate_page.btn-success', + }, + { + trigger: '.o_notification.border-success', + isCheck: true + }, +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_complete_flux_internal', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(5); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(false); // Can't validate until product with barcode was scanned. + } + }, + // Scans one product1 to move in Section 1, but scans another product between. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { trigger: '.o_barcode_line.o_selected', run: 'scan product2' }, // Should raise an error. + { + trigger: '.o_notification.border-danger', + run: function() { + helper.assertErrorMessage( + "Please scan destination location for product1 before scanning other product"); + }, + }, + { trigger: '.btn.o_notification_close' }, + + { // Scans the destination (Section 1). + trigger: '.o_barcode_line.o_selected', + run: 'scan LOC-01-01-00' + }, + // product1 line is split, 1 qty moves to Section 1, the rest is left as default + { + trigger: '.o_barcode_client_action', + extra_trigger: '.o_barcode_line.o_line_completed .o_line_destination_location .fw-bold:contains("Section 1")', + run: function() { + helper.assertLinesCount(6); + helper.assertScanMessage('scan_product'); + }, + }, + + // Scans product1 again and move it to Section 3. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan product1' + }, + { + trigger: '.o_barcode_line.o_selected', + run: 'scan shelf3' + }, + + // Scans product2 and moves it into Section 2. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan product2' + }, + { + trigger: '.o_barcode_line.o_selected', + run: 'scan LOC-01-02-00' + }, + + // Process quantities for the product with no barcode and move it to Section 1. + { + trigger: '.o_barcode_line:not([data-barcode]) .btn.o_add_quantity', + extra_trigger: '.o_scan_message.o_scan_product', + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan LOC-01-01-00' + }, + + // The message should ask to scan a product, so scans product tracked by lots. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan productlot1' + }, + // Scans lot-001 x2, lot-002 x2 and moves them in Section 3. + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-001' + }, + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + { + trigger: '.o_sublines .o_barcode_line.o_selected', + run: 'scan lot-001' + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected.o_line_completed', + run: 'scan lot-002' + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected:not(.o_line_completed)', + run: 'scan lot-002' + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected.o_line_completed', + run: 'scan shelf3' + }, + + // Scans lot-003 x2 and moves them in Section 4. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan lot-003' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan lot-003' + }, + { + trigger: '.o_barcode_line[data-barcode="productlot1"].o_selected', + run: 'scan shelf4' + }, + + // Scans the product tracked by serial numbers and scans three serials. + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan productserial1' + }, + { + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected', + run: 'scan sn-001' + }, + { + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected', + run: 'scan sn-002' + }, + { + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected', + run: 'scan sn-003' + }, + { // Moves it to Section 4. + trigger: '.o_barcode_line[data-barcode="productserial1"].o_selected.o_line_completed', + run: 'scan shelf4' + }, + // It should say the operation can be validate. + { + extra_trigger: 'div[name="barcode_messages"] .fa-check-square', // "Press validate" message icon. + trigger: '.o_validate_page.btn-success', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_complete_flux_pick', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(7); + helper.assertScanMessage('scan_src'); + helper.assertValidateVisible(true); + helper.assertValidateEnabled(false); + const lineButtons = document.querySelectorAll('.btn.o_edit,.btn.o_add_quantity'); + helper.assert(lineButtons.length, 10, "Should have 1 edit & 1 add qty. buttons on 5 lines"); + for (const button of lineButtons) { + helper.assert(button.disabled, true, + "All lines' buttons are disabled until a source location was scanned"); + } + } + }, + // Scans product1 -> raise an error because it expects the source location. + { + trigger: '.o_scan_message.o_scan_src', + run: 'scan product1' + }, + { + trigger: '.o_notification', + run: function() { + helper.assertErrorMessage( + "You are supposed to scan WH/Stock or another source location"); + }, + }, + { trigger: '.btn.o_notification_close' }, + + // Scan another location (Section 2 for the instance). + { + trigger: '.o_scan_message.o_scan_src', + run: 'scan LOC-01-02-00' + }, + { + trigger: '.o_line_source_location:contains(".../Section 2") .fw-bold', + run: function() { + helper.assertLinesCount(7); + helper.assertScanMessage('scan_product'); + const lineProduct2 = document.querySelector('.o_barcode_line'); + helper.assert( + lineProduct2.querySelector('.btn.o_edit').disabled, false, + "Since the source location was scanned, its buttons should be enabled"); + helper.assert( + lineProduct2.querySelector('.btn.o_add_quantity').disabled, false, + "Since the source location was scanned, its buttons should be enabled"); + } + }, + // Scans product2 then scans another source location (Section 3) => Should raise a warning. + { trigger: '.o_barcode_client_action', run: 'scan product2' }, + { trigger: '.o_barcode_line.o_line_completed', run: 'scan shelf3' }, + { + trigger: '.o_notification', + run: function() { + helper.assertErrorMessage("You must scan a package or put in pack"); + }, + }, + { trigger: '.btn.o_notification_close' }, + + // Scans a pack then scans again Section 3. + { trigger: '.o_barcode_line.o_line_completed', run: 'scan cluster-pack-01' }, + { trigger: '.o_barcode_line.o_selected .result-package', run: 'scan LOC-01-01-00' }, + { + trigger: '.o_line_source_location:contains(".../Section 1") .fw-bold', + run: function() { + helper.assertLinesCount(7); + helper.assertScanMessage('scan_product'); + } + }, + // Scans product1 from Section 1, pack it. + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { trigger: '.o_barcode_client_action', run: 'scan cluster-pack-01' }, + // Do the same from Section 3 + { trigger: '.o_barcode_line.o_line_completed', run: 'scan shelf3' }, + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan productlot1' + }, + { + trigger: '.o_notification', + run: function() { + helper.assertErrorMessage("You must scan a package or put in pack"); + }, + }, + { trigger: '.btn.o_notification_close' }, + { trigger: '.o_barcode_client_action', run: 'scan cluster-pack-01' }, + // scans lot-001 and lot-002 + { + trigger: '.o_barcode_line.o_selected.o_line_completed .result-package', + run: 'scan productlot1' + }, + // Checks we can't edit a line for a tracked product until the tracking number was scan. + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + { + trigger: '.o_barcode_line.o_selected .o_sublines', + run: function() { + const [ lot001Line, lot002Line ] = helper.getSublines(); + helper.assert(lot001Line.querySelector('.btn.o_add_quantity').disabled, true, + "Lot number not scanned yet, so line's buttons are disabled."); + helper.assert(lot002Line.querySelector('.btn.o_add_quantity').disabled, true, + "Lot number not scanned yet, so line's buttons are disabled."); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan lot-001', + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(1)', + run: function() { + const [ lot001Line, lot002Line ] = helper.getSublines(); + helper.assert(lot001Line.querySelector('.btn.o_add_quantity').disabled, false, + "lot-001 was scanned, its line's buttons should be enable"); + helper.assert(lot002Line.querySelector('.btn.o_add_quantity').disabled, true, + "Lot number not scanned yet, so line's buttons are disabled."); + } + }, + { + trigger: '.o_barcode_line.o_selected:not(.o_line_completed)', + run: 'scan lot-001', + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: function() { + const lot001Line = helper.getSubline({ completed: true}); + const lot002Line = helper.getSubline({ completed: false}); + helper.assert(Boolean(lot001Line.querySelector('.btn.o_add_quantity')), true, + "The lot-001 button to add the quantity should still be visible because parent line is not complete."); + helper.assert(lot002Line.querySelector('.btn.o_add_quantity').disabled, true); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan lot-002', + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(1)', + run: function() { + const lot002Line = document.querySelector('.o_sublines .o_barcode_line.o_selected:not(.o_line_completed)'); + helper.assert(lot002Line.querySelector('.btn.o_add_quantity').disabled, false, + "lot-002 was scanned, the button to add quantity should be enabled."); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan lot-002', + }, + + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: function() { + const lot002Line = document.querySelector('.o_sublines .o_barcode_line.o_selected.o_line_completed'); + helper.assert(Boolean(lot002Line.querySelector('.btn.o_add_quantity')), false, + "Demand quantity was scanned, the button shouldn't be visible."); + } + }, + { trigger: '.o_barcode_client_action', run: 'scan cluster-pack-02' }, + + // Scans Section 1 (source) and processes the remaining products. + { trigger: '.o_barcode_line.o_selected.o_line_completed .result-package', run: 'scan LOC-01-01-00' }, + { + extra_trigger: '.o_line_source_location:contains(".../Section 1") .fw-bold', + trigger: '.o_barcode_line:not([data-barcode]) .btn.o_add_quantity', + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed:not([data-barcode])', + run: 'scan cluster-pack-01' + }, + + // Scans Section 4 (source). + { + trigger: '.o_barcode_line.o_selected.o_line_completed .result-package', + run: 'scan shelf4' + }, + // Scans the remaining lot and the serial numbers. + { + trigger: '.o_line_source_location:contains(".../Section 4") .fw-bold', + extra_trigger: '.o_scan_message.o_scan_product', + run: 'scan lot-003', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan sn-001', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan sn-003', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan sn-002', + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + extra_trigger: '.o_scan_message.o_scan_package', + run: 'scan cluster-pack-02' + }, + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan lot-003', + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan cluster-pack-02' + }, + // It should say the operation can be validate. + { + extra_trigger: 'div[name="barcode_messages"] .fa-check-square', // "Press validate" message icon. + trigger: '.o_validate_page.btn-success', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_complete_flux_pack', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(5); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateEnabled(true); + helper.assertValidateIsHighlighted(false); + } + }, + // Scans first cluster pack. + { trigger: '.o_barcode_client_action', run: 'scan cluster-pack-01'}, + // Scans second cluster pack. + { trigger: '.o_barcode_client_action', run: 'scan cluster-pack-02'}, + // Tries to validate: it should ask to put in pack. + { trigger: '.o_validate_page.btn-success' }, + { + trigger: '.o_notification', + run: function() { + helper.assertErrorMessage("All products need to be packed"); + }, + }, + { trigger: '.btn.o_notification_close' }, + // Puts in pack. + { trigger: '.o_barcode_client_action', run: 'scan O-BTN.pack'}, + // Validates the operation. + { + extra_trigger: '.o_scan_message.o_scan_validate', + trigger: '.o_validate_page.btn-success', + }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_picking_type_mandatory_scan_complete_flux_delivery', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_product_or_package'); + } + }, + // Scans the pack, then validate. + { + trigger: '.o_barcode_line:contains("PACK0000001")', + run: 'scan PACK0000001' + }, + // It should say the operation can be validate. + { + extra_trigger: '.o_scan_message.o_scan_validate', // "Press validate" message icon. + trigger: '.o_barcode_line.o_line_completed', + run: 'scan O-BTN.validate', + }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_pack_multiple_scan', {test: true, steps: () => [ + + { + trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")', + }, + // Receipt + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-RECEIPTS', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan O-BTN.pack', + }, + ...stepUtils.validateBarcodeOperation(), + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, + // Delivery transfer to check the error message + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-DELIVERY', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan PACK0001000', + }, + + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan PACK0001000', + }, + + { + trigger: '.o_notification.border-danger' + }, + + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertErrorMessage('This package is already scanned.'); + const line1 = helper.getLine({ barcode: "product1" }); + helper.assertLineIsHighlighted(line1, true); + const line2 = helper.getLine({ barcode: "product2" }); + helper.assertLineIsHighlighted(line2, true); + }, + }, + ...stepUtils.validateBarcodeOperation(), + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_pack_common_content_scan', {test: true, steps: () => [ + /* Scan 2 packages PACK1 and PACK2 that contains both product1 and + * product 2. It also scan a single product1 before scanning both pacakges. + * the purpose is to check that lines with a same product are not merged + * together. For product 1, we should have 3 lines. One with PACK 1, one + * with PACK2 and the last without package. + */ + { + trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")', + }, + + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-DELIVERY', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan PACK1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan PACK2', + }, + + { + trigger: '.o_barcode_client_action:contains("PACK2")', + run: function () { + helper.assertLinesCount(5); + }, + }, + ...stepUtils.validateBarcodeOperation(), + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_pack_multiple_location', {test: true, steps: () => [ + + { + trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")', + }, + + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-INTERNAL', + }, + + { + trigger: '.o_barcode_client_action .o_scan_message.o_scan_src', + run: 'scan LOC-01-01-00' + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan PACK0000666', + }, + + { + trigger: '.o_package_content', + run: () => helper.assertLineQty(0, "1") + }, + + { // Scan a second time the same package => Should raise a warning. + trigger: '.o_barcode_client_action', + run: 'scan PACK0000666', + }, + { // A notification is shown and the package's qty. should be unchanged. + trigger: '.o_notification.border-danger', + run: () => helper.assertLineQty(0, "1") + }, + + { trigger: '.o_package_content' }, + { + trigger: '.o_kanban_view:contains("product1")', + run: function () { + helper.assertKanbanRecordsCount(2); + }, + }, + { trigger: '.o_close' }, + + { + trigger: '.o_scan_message.o_scan_dest', + run: 'scan LOC-01-02-00', + }, + + ...stepUtils.validateBarcodeOperation(".o_scan_message.o_scan_validate"), + + { + trigger: '.o_stock_barcode_main_menu', + run: function () { + helper.assertErrorMessage('The transfer has been validated'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_pack_multiple_location_02', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00' + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan PACK0002020', + }, + + { + trigger: '.o_barcode_client_action', + extra_trigger: '.o_barcode_line.o_selected', + run: 'scan LOC-01-02-00', + }, + + { + trigger: '.o_barcode_line .o_line_destination_location:contains("WH/Stock/Section 2")', + run: 'scan O-BTN.validate', + }, + + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_pack_multiple_location_03', {test: true, steps: () => [ + {trigger: '.o_barcode_client_action', run: 'scan shelf3'}, + { + trigger: '.o_barcode_line', + run: function() { + helper.assertLinesCount(1); + helper.assert($('.o_barcode_line .package').text(), "PACK000666"); + } + }, + {trigger: '.o_barcode_client_action', run: 'scan product1'}, + { + trigger: '.qty-done:contains(1)', + run: function() { + helper.assertLinesCount(1); + helper.assert($('.o_barcode_lines .o_barcode_line .package').length, 0); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_put_in_pack_from_multiple_pages', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_src'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00' + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: function () { + helper.assertLinesCount(4); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + + { + trigger: '.o_barcode_line:nth-child(2).o_line_completed', + run: 'scan LOC-01-02-00', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan O-BTN.pack', + }, + + ...stepUtils.validateBarcodeOperation('.o_barcode_line:contains("PACK")'), +]}); + +registry.category("web_tour.tours").add('test_put_in_pack_float_rounding', {test: true, steps: () => [ + { trigger: 'button.button_operations' }, + { trigger: '.o_kanban_record:contains(Receipts)' }, + + { trigger: '.o_kanban_record_headings:last' }, + + { trigger: '.o_edit' }, + + { + trigger: ".o_field_widget[name=qty_done] input", + run: 'text 5.66', + }, + + { trigger: '.o_save' }, + + { trigger: '.o_put_in_pack' }, + + { trigger: '.o_line_button.o_toggle_sublines' }, + + { trigger: '.o_sublines .o_barcode_line:nth-child(1) .o_edit' }, + + { + trigger: ".o_field_widget[name=qty_done] input", + run: 'text 4.44', + }, + + { trigger: '.o_save' }, + + { trigger: '.o_line_button.o_toggle_sublines .fa-caret-up' }, + + { + trigger: '.o_line_button.o_toggle_sublines .fa-caret-down', + run: function () { + helper.assertLineQty(0, "10.1 / 13.5"); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_reload_flow', {test: true, steps: () => [ + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-RECEIPTS' + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + + { + trigger: '.o_edit', + }, + + { + extra_trigger: '.o_field_widget[name="product_id"]', + trigger: '.o_field_widget[name=qty_done] input', + run: 'text 2', + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_add_line', + }, + + { + trigger: ".o_field_widget[name=product_id] input", + run: 'text product2', + }, + + { + trigger: ".ui-menu-item > a:contains('product2')", + }, + + { + trigger: '.o_save', + }, + + { + trigger: '.o_barcode_line:nth-child(2).o_selected', + run: function () { + helper.assertScanMessage('scan_product_or_dest'); + }, + }, + + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-01-00' }, + // Select first line and scans Section 1 to move it to this location. + { + extra_trigger: '.o_barcode_line:nth-child(2) .o_line_destination_location:contains(".../Section 1")', + trigger: '.o_barcode_line:first-child()', + }, + { + trigger: '.o_barcode_line:first-child().o_selected', + run: 'scan LOC-01-01-00' + }, + { + trigger: '.o_barcode_line:nth-child(1) .o_line_destination_location:contains(".../Section 1")', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_highlight_packs', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_product_or_package'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + helper.assertLineIsHighlighted(0, false); + + }, + }, + + { + trigger: '.o_barcode_client_action', + run: 'scan PACK002', + }, + + { + trigger: '.o_barcode_client_action:contains("PACK002")', + }, + + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(2); + helper.assertScanMessage('scan_product_or_package'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + const packageLine = document.querySelector('.o_barcode_line[data-package="PACK002"]'); + helper.assertLineIsHighlighted(packageLine, true); + }, + }, + +]}); + +registry.category("web_tour.tours").add('test_put_in_pack_from_different_location', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan product2', + }, + + { + trigger: '.o_validate_page.btn-success', + run: 'scan O-BTN.pack', + }, + + { + trigger: '.o_barcode_line:contains("PACK")', + run: function() { + const lines = helper.getLines(); + helper.assert(lines[0].querySelector('.result-package').innerText, "PACK0000001"); + helper.assert(lines[1].querySelector('.result-package').innerText, "PACK0000001"); + }, + }, + // Scans dest. location. + { + trigger: '.o_scan_message.o_scan_product_or_dest', + run: 'scan LOC-01-02-00', + }, + ...stepUtils.validateBarcodeOperation('.o_scan_message.o_scan_validate'), +]}); + +registry.category("web_tour.tours").add('test_put_in_pack_before_dest', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00', + }, + + { + trigger: '.o_barcode_line .o_line_source_location:contains(".../Section 1") .fw-bold', + run: 'scan product1', + }, + { trigger: '.o_barcode_client_action', run: 'scan LOC-01-02-00' }, + + { + trigger: '.o_scan_message.o_scan_src', + run: 'scan shelf3', + }, + + { + trigger: '.o_barcode_line .o_line_source_location:contains(".../Section 3") .fw-bold', + run: 'scan product2', + }, + + { + trigger: '.o_barcode_line .qty-done:contains("1")', + run: 'scan shelf4', + }, + + { + trigger: '.o_scan_message.o_scan_validate', + run: 'scan O-BTN.pack' + }, + + { + trigger: '.modal-title:contains("Choose destination location")', + }, + + { + trigger: '.o_field_widget[name="location_dest_id"] input', + run: 'click', + }, + { + trigger: '.ui-menu-item > a:contains("Section 2")', + auto: true, + in_modal: false, + }, + + { + trigger: '.o_field_widget[name="location_dest_id"]', + run: function () { + helper.assert( + $('.o_field_widget[name="location_dest_id"] input').val(), + 'WH/Stock/Section 2' + ); + }, + }, + + { + trigger: '.btn-primary', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_put_in_pack_scan_package', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function() { + helper.assertLinesCount(3); + } + }, + { + trigger: '.o_scan_message.o_scan_src', + run: 'scan LOC-01-01-00' + }, + + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line[data-barcode="product1"] .qty-done:contains("1")', + run: 'scan O-BTN.pack', + }, + { + trigger: '.o_barcode_line:contains("product1"):contains("PACK0000001")', + run: function() { + const line1 = helper.getLine({ barcode: "product1", selected: true }); + const product1_package = line1.querySelector('div[name="package"]').innerText; + helper.assert(product1_package, 'PACK0000001'); + } + }, + + // Scans product2 then scans the package. + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line.o_highlight:contains("product2")', + run: 'scan PACK0000001', + }, + { + trigger: '.o_barcode_line:contains("product2"):contains("PACK0000001")', + run: function() { + const line1 = helper.getLine({ barcode: "product1", completed: true }); + const line2 = helper.getLine({ barcode: "product2", selected: true }); + const product1_package = line1.querySelector('div[name="package"]').innerText; + const product2_package = line2.querySelector('div[name="package"]').innerText; + helper.assert(product1_package, 'PACK0000001'); + helper.assert(product2_package, 'PACK0000001'); + } + }, + + // Scans next location then scans again product1 and PACK0000001. + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-02-00', + }, + { + trigger: '.o_barcode_line .o_line_source_location .fw-bold:contains("Section 2")', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line[data-barcode="product1"].o_selected .qty-done:contains("1")', + run: 'scan PACK0000001', + }, + { + trigger: '.o_barcode_line:contains("product1").o_selected:contains("PACK0000001")', + run: function() { + const line1 = helper.getLine({ barcode: "product1", selected: true }); + const product1_package = line1.querySelector('div[name="package"]').innerText; + helper.assert(product1_package, 'PACK0000001'); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_put_in_pack_new_lines', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan P00001', + }, + { + trigger: '.o_notification.border-danger', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + { + trigger: '.o_barcode_line:contains("product1")', + run: 'scan P00001', + }, + { + trigger: '.o_barcode_line:contains("product1"):contains("P00001")', + run: 'scan O-BTN.validate', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_picking_owner_scan_package', {test: true, steps: () => [ + { + trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")', + }, + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-DELIVERY', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan P00001', + }, + { + trigger: '.o_barcode_client_action:contains("P00001")', + }, + { + trigger: '.o_barcode_client_action:contains("Azure Interior")', + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_receipt_delete_button', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan product1', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product2', + }, + stepUtils.confirmAddingUnreservedProduct(), + // ensure receipt's extra product CAN be deleted + { + trigger: '.o_barcode_line[data-barcode="product2"] .o_edit', + }, + { + trigger: '.o_field_widget[name="product_id"]', + run: function () { + helper.assert($('.o_delete').length, 1); + }, + }, + { + trigger: '.o_discard', + }, + // ensure receipt's original move CANNOT be deleted + { + trigger: '.o_barcode_line:nth-child(2) .o_edit', + }, + { + trigger: '.o_field_widget[name="product_id"]', + run: function () { + helper.assert($('.o_delete').length, 0); + }, + }, + { + trigger: '.o_discard', + }, + // add extra product not in original move + delete it + { + trigger: '.o_barcode_client_action', + run: 'scan product3', + }, + stepUtils.confirmAddingUnreservedProduct(), + { + trigger: '.o_barcode_line[data-barcode="product3"] .o_edit', + }, + { + trigger: '.o_delete', + }, + { + trigger: '.o_validate_page', + run: 'scan O-BTN.validate', + }, { + content: "check the picking is validated", + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add("test_scrap", {test: true, steps: () => [ + // Opens the receipt and checks we can't scrap if not done. + { trigger: ".o_stock_barcode_main_menu", run: "scan receipt_scrap_test" }, + { trigger: ".o_barcode_actions" }, + { + trigger: ".o_barcode_settings", + run: function() { + const scrapButton = document.querySelector("button.o_scrap"); + helper.assert(Boolean(scrapButton), false, "Scrap button shouldn't be displayed"); + }, + }, + { trigger: "button.o_close" }, + { trigger: ".o_barcode_lines", run: "scan O-BTN.scrap" }, + { trigger: ".o_notification.border-warning:contains('You can\\'t register scrap')" }, + // Process the receipt then re-opens it again. + { trigger: ".o_line_button.o_add_quantity" }, + { trigger: ".o_validate_page.btn-success" }, + { trigger: ".o_stock_barcode_main_menu", run: "scan receipt_scrap_test" }, + { + trigger: ".o_scan_message.o_picking_already_done", + run: "scan O-BTN.scrap", + }, + { + extra_trigger: ".modal-title:contains('Scrap')", + trigger: ".btn[special='cancel']", + }, + { trigger: ".o_barcode_actions" }, + { + trigger: ".o_barcode_settings", + run: function() { + const scrapButton = document.querySelector("button.o_scrap"); + helper.assert(Boolean(scrapButton), true, "Scrap button should be displayed"); + }, + }, + // Exits the receipt and opens the delivery. + { trigger: "button.o_exit" }, + { extra_trigger: ".o_barcode_lines_header", trigger: "button.o_exit" }, + { trigger: ".o_stock_barcode_main_menu", run: "scan delivery_scrap_test" }, + // Checks we can scrap for a delivery. + { trigger: ".o_barcode_actions" }, + { + trigger: ".o_barcode_settings", + run: function() { + const scrapButton = document.querySelector("button.o_scrap"); + helper.assert(Boolean(scrapButton), true, "Scrap button should be displayed"); + }, + }, + { trigger: "button.o_close" }, + { trigger: ".o_barcode_lines", run: "scan O-BTN.scrap" }, + { + extra_trigger: ".modal-title:contains('Scrap')", + trigger: ".btn[special='cancel']", + }, + // Process the delivery then re-opens it again. + { trigger: ".o_line_button.o_add_quantity" }, + { trigger: ".o_validate_page.btn-success" }, + { trigger: ".o_stock_barcode_main_menu", run: "scan delivery_scrap_test" }, + { trigger: ".o_barcode_lines_header", run: "scan O-BTN.scrap" }, + { trigger: ".o_notification.border-warning:contains('You can\\'t register scrap')" }, + { trigger: ".o_barcode_actions" }, + { + trigger: ".o_barcode_settings", + run: function() { + const scrapButton = document.querySelector("button.o_scrap"); + helper.assert(Boolean(scrapButton), false, "Scrap button shouldn't be displayed"); + }, + }, +]}); + +registry.category("web_tour.tours").add("test_picking_scan_package_confirmation", {test: true, steps: () => [ + // Scan product 1 + { trigger: '.o_barcode_client_action', run: 'scan product1' }, + // Scan Package 1 to trigger the scan confirmation + { trigger: '.o_barcode_line .qty-done:contains("1")', run: 'scan package001' }, + // Cancel the package scan + { trigger: ".modal-content button.btn-secondary" }, + // Scan Package 1 to trigger the scan confirmation + { trigger: '.o_barcode_line .qty-done:contains("1")', run: 'scan package001' }, + // Confirm the package scan, thus the line quantity will be increased + { trigger: ".modal-content button.btn-primary" }, + { trigger: '.o_barcode_line .qty-done:contains("2")', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_show_entire_package', {test: true, steps: () => [ + { trigger: 'button.button_operations' }, + { trigger: '.o_kanban_record:contains(Delivery Orders)' }, + + // Opens picking with the package level. + { trigger: '.o_kanban_record:contains(Delivery with Package Level)' }, + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_product_or_package'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + const line = helper.getLine(); + helper.assertLineIsHighlighted(line, false); + helper.assertButtonShouldBeVisible(line, "package_content"); + helper.assert(line.querySelector('[name="package"]').innerText, "package001package001"); + helper.assertLineQty(line, "0 / 1"); + }, + }, + { trigger: '.o_line_button.o_package_content' }, + { + trigger: '.o_kanban_view .o_kanban_record', + run: function () { + helper.assertKanbanRecordsCount(1); + }, + }, + { trigger: 'button.o_close' }, + // Scans package001 to be sure no moves will be created but the package line will be done. + { trigger: '.o_barcode_lines', run: 'scan package001' }, + { + trigger: '.o_barcode_line:contains("1/ 1")', + run: function () { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_validate'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + const line = helper.getLine(); + helper.assertLineIsHighlighted(line, false); + helper.assertButtonShouldBeVisible(line, "package_content"); + helper.assert(line.querySelector('[name="package"]').innerText, "package001package001"); + helper.assertLineQty(line, "1 / 1"); + }, + }, + { trigger: 'button.o_exit' }, + + // Opens picking with the move. + { trigger: '.o_kanban_record:contains(Delivery with Stock Move)' }, + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + helper.assertScanMessage('scan_product'); + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(false); + helper.assertValidateEnabled(true); + const line = helper.getLine(); + helper.assertLineIsHighlighted(line, false); + helper.assertButtonShouldBeVisible(line, "package_content", false); + helper.assert(line.querySelector('[name="package"]').innerText, "package002"); + helper.assertLineQty(0, '0 / 2'); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_define_the_destination_package', {test: true, steps: () => [ + { + trigger: '.o_line_button.o_add_quantity', + }, + { + trigger: '.o_barcode_line .qty-done:contains("1")', + run: 'scan PACK02', + }, + { + extra_trigger: '.o_barcode_line:contains("PACK02")', + trigger: '.btn.o_validate_page', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('stock_barcode_package_with_lot', {test: true, steps: () => [ + { + trigger: "[data-menu-xmlid='stock_barcode.stock_barcode_menu']", // open barcode app + }, + { + trigger: ".button_inventory", + }, + { + trigger: '.o_barcode_client_action', + run: 'scan Lot-test' // scan lot on a new location + }, + { + extra_trigger: '.o_barcode_line .package:contains(Package-test)', // verify it takes the right quantity + trigger: '.o_apply_page', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_scan_same_lot_different_products', {test: true, steps: () => [ + // Scanning 123 will fetch the lot 123 for the 'aaa' product and add them + // both in the cache (the 'aaa' product and its lot.) + { + trigger: '.o_barcode_client_action', + run: 'scan 123', + }, + { + trigger: '.o_notification.border-danger', + run: 'scan bbb', + }, + // Scanning again 123 should now fetch the lot for selected product ('bbb') + // even if the lot 123 for 'aaa' product is already in the cache. + { + trigger: '.o_barcode_line:contains("bbb")', + run: 'scan 123', + }, + { + trigger: '.o_barcode_line:contains("bbb"):contains("123")', + run: function () { + helper.assertLinesCount(1); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_avoid_useless_line_creation', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan LOT01', + }, + { + trigger: '.o_barcode_line', + run: 'scan LOREM', + }, + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertErrorMessage('You are expected to scan one or more products.'); + }, + }, + // Open the form view to trigger a save + { trigger: '.o_barcode_line:first-child .o_edit' }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_split_line_reservation', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(3); + helper.assertScanMessage('scan_src'); + }, + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-00-00' + }, + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan productlot1' + }, + { + trigger: '.o_scan_message.o_scan_lot', + run: 'scan LOT01' + }, + { + trigger: '.o_scan_message.o_scan_lot', + run: 'scan LOT02' + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', + run: 'scan LOC-01-01-00' + }, + { + trigger: '.o_barcode_line .o_line_source_location:contains("Section 1")', + run: function () { + helper.assertLinesCount(4); + let line = helper.getLine({ barcode: 'productlot1', completed: true }); + helper.assertLineSourceLocation(line, 'WH/Stock'); + helper.assertLineQty(line, '2 / 2'); + line = helper.getLine({ barcode: 'productlot1', completed: false }); + helper.assertLineSourceLocation(line, '.../Section 1'); + helper.assertLineQty(line, '0 / 3'); + }, + }, + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOT02' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOT02' + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', + run: 'scan LOC-01-02-00' + }, + { + trigger: '.o_barcode_line .o_line_source_location:contains("Section 2")', + run: function () { + helper.assertLinesCount(5); + }, + }, + { + trigger: '.o_barcode_client_action', + run: 'scan productlot1' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOT03' + }, + { + trigger: '.o_barcode_line .o_line_lot_name:contains("LOT03")', + run: function () { + const lines = helper.getLines({ barcode: 'productlot1' }); + [0, 1, 2].map(i => helper.assertLineQty(lines[i], ["2 / 2", "2 / 2", "1 / 1"][i])); + }, + }, + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-00-00' + }, + // scan product1 x2 + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', + run: 'scan LOC-01-01-00' + }, + { + trigger: '.o_barcode_line[data-barcode="product1"].o_line_completed', + run: function () { + helper.assertLinesCount(6); + const lines = helper.getLines({ barcode: 'product1' }); + [0, 1].map(i => helper.assertLineQty(lines[i], ["2 / 2", "0 / 2"][i])); + }, + }, + // scan product1 x2 from Section 1 + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product1' + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan LOC-01-00-00' + }, + // scan product2 x2 from WH/Stock + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', + run: 'scan LOC-01-01-00' + }, + { + trigger: '.o_barcode_line[data-barcode="product2"].o_line_completed', + run: function () { + helper.assertLinesCount(7); + const lines = helper.getLines({ barcode: 'product2' }); + [0, 1].map(i => helper.assertLineQty(lines[i], ["2 / 2", "0 / 1"][i])); + }, + }, + // scan product2 x1 from Section 1 + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + // trigger a save + { + trigger: '.o_barcode_line .o_edit', + }, + { + trigger: '.o_discard', + }, + { + trigger: '.o_validate_page', + run: function () { + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + // Check lines' quantity didn't change. + let lines = helper.getLines({ barcode: 'product1' }); + [0, 1].map(i => helper.assertLineQty(lines[i], ["2 / 2", "2 / 2"][i])); + lines = helper.getLines({ barcode: 'product2' }); + [0, 1].map(i => helper.assertLineQty(lines[i], ["2 / 2", "1 / 1"][i])); + lines = helper.getLines({ barcode: 'productlot1' }); + [0, 1, 2].map(i => helper.assertLineQty(lines[i], ["2 / 2", "2 / 2", "1 / 1"][i])); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_split_line_on_destination_scan', {test: true, steps: () => [ + // Open the receipt then scans 2x product1. + { trigger: '.o_stock_barcode_main_menu', run: "scan receipt_split_line_on_destination_scan" }, + { trigger: '.o_barcode_line', run: "scan product1" }, + { trigger: '.o_barcode_line', run: "scan product1" }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains("2")', + run: () => { + helper.assertLinesCount(1); + helper.assertLineDestinationLocation(0, "WH/Stock"); + helper.assertLineQty(0, "2 / 4"); + } + }, + // Scans the line's destination -> The line should be splitted in two. + { trigger: '.o_barcode_line', run: "scan LOC-01-00-00" }, + { + trigger: '.o_barcode_line:nth-child(2)', + run: () => { + helper.assertLinesCount(2); + helper.assertLineDestinationLocation(0, "WH/Stock"); + helper.assertLineDestinationLocation(1, "WH/Stock"); + helper.assertLineQty(0, "2 / 2"); + helper.assertLineQty(1, "0 / 2"); + } + }, + // Scans remaining quantity, then shelf1 as the destination and close the receipt. + { trigger: '.o_barcode_line', run: "scan product1" }, + { trigger: '.o_barcode_line.o_selected:not(".o_line_completed")', run: "scan product1" }, + { trigger: '.o_barcode_line.o_selected.o_line_completed', run: "scan LOC-01-01-00" }, + { + trigger: '.o_validate_page.btn-success', + run: () => { + helper.assertLinesCount(2); + helper.assertLineDestinationLocation(0, "WH/Stock"); + helper.assertLineDestinationLocation(1, ".../Section 1"); + helper.assertLineQty(0, "2 / 2"); + helper.assertLineQty(1, "2 / 2"); + } + }, + ...stepUtils.validateBarcodeOperation(), + // Now, open the internal transfer and scan Section 1 as the source location. + { trigger: '.o_stock_barcode_main_menu', run: "scan internal_split_line_on_destination_scan" }, + { + trigger: '.o_barcode_line', + run: () => { + helper.assertLinesCount(2); + helper.assertLineLocations(0, ".../Section 1", "WH/Stock"); + helper.assertLineQty(0, "0 / 3"); + helper.assertLineLocations(1, ".../Section 2", "WH/Stock"); + helper.assertLineQty(1, "0 / 4"); + } + }, + { trigger: '.o_scan_message.o_scan_src', run: "scan LOC-01-01-00" }, + // Scan 2x product2 then scan Section 3 as the destination. + { trigger: '.o_barcode_line', run: "scan product2" }, + { trigger: '.o_barcode_line', run: "scan product2" }, + { trigger: '.o_barcode_line.o_selected .qty-done:contains("2")', run: "scan shelf3" }, + { + trigger: '.o_scan_message.o_scan_src', + run: () => { + helper.assertLinesCount(3); + helper.assertLineLocations(0, ".../Section 1", ".../Section 3"); + helper.assertLineQty(0, "2 / 2"); + helper.assertLineLocations(1, ".../Section 1", "WH/Stock"); + helper.assertLineQty(1, "0 / 1"); + helper.assertLineLocations(2, ".../Section 2", "WH/Stock"); + helper.assertLineQty(2, "0 / 4"); + } + }, + // Scan 1x product2 then scan WH/Stock as the destination. + { trigger: '.o_barcode_line', run: "scan LOC-01-01-00" }, + { trigger: '.o_scan_message.o_scan_product', run: "scan product2" }, + { trigger: '.o_barcode_line.o_selected.o_line_completed', run: "scan LOC-01-00-00" }, + { + trigger: '.o_scan_message.o_scan_src', + run: () => { + helper.assertLinesCount(3); + helper.assertLineLocations(0, ".../Section 1", ".../Section 3"); + helper.assertLineQty(0, "2 / 2"); + helper.assertLineLocations(1, ".../Section 1", "WH/Stock"); + helper.assertLineQty(1, "1 / 1"); + helper.assertLineLocations(2, ".../Section 2", "WH/Stock"); + helper.assertLineQty(2, "0 / 4"); + } + }, + // Scan Section 2 as the source and then 2x product2. + { trigger: '.o_barcode_line', run: "scan LOC-01-02-00" }, + { trigger: '.o_scan_message.o_scan_product', run: "scan product2" }, + { trigger: '.o_scan_message.o_scan_product_or_dest', run: "scan product2" }, + // Now scan Section 2 also as the destination. + { trigger: '.o_barcode_line.o_selected .qty-done:contains("2")', run: "scan LOC-01-02-00" }, + { + trigger: '.o_scan_message.o_scan_src', + run: () => { + helper.assertLinesCount(4); + helper.assertLineLocations(0, ".../Section 1", ".../Section 3"); + helper.assertLineQty(0, "2 / 2"); + helper.assertLineLocations(1, ".../Section 1", "WH/Stock"); + helper.assertLineQty(1, "1 / 1"); + helper.assertLineLocations(2, ".../Section 2", ".../Section 2"); + helper.assertLineQty(2, "2 / 2"); + helper.assertLineLocations(3, ".../Section 2", "WH/Stock"); + helper.assertLineQty(3, "0 / 2"); + } + }, + // Scan 2x product2, Section 1 as the destination and close the internal transfer. + { trigger: '.o_scan_message.o_scan_src', run: "scan LOC-01-02-00" }, + { trigger: '.o_scan_message.o_scan_product', run: "scan product2" }, + { trigger: '.o_scan_message.o_scan_product_or_dest', run: "scan product2" }, + { trigger: '.o_scan_message.o_scan_dest', run: "scan LOC-01-01-00" }, + ...stepUtils.validateBarcodeOperation('.o_validate_page.btn-success'), +]}); + +registry.category("web_tour.tours").add('test_split_line_on_exit_for_delivery', {test: true, steps: () => [ + // Opens the delivery and checks its lines. + { trigger: ".o_stock_barcode_main_menu", run: "scan delivery_split_line_on_exit" }, + { + trigger: ".o_barcode_client_action", + run: () => { + helper.assertLinesCount(3); + helper.assertLineProduct(0, "product1"); + helper.assertLineQty(0, "0 / 4"); + helper.assertLineProduct(1, "product2"); + helper.assertLineQty(1, "0 / 4"); + helper.assertLineProduct(2, "product3"); + helper.assertLineQty(2, "0 / 2"); + } + }, + // Scans 4x product1, 2x product2 and leaves the delivery without scanning product3. + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_line.o_selected.o_line_completed", run: "scan product2" }, + { trigger: ".o_barcode_line.o_selected:not(.o_line_completed)", run: "scan product2" }, + // Leaves the delivery and re-open it directly, then checks not lines were splitted. + { trigger: "button.o_exit" }, + { trigger: ".o_stock_barcode_main_menu", isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_split_line_on_exit_for_receipt', {test: true, steps: () => [ + // Opens the receipt and check its lines. + { trigger: ".o_stock_barcode_main_menu", run: "scan receipt_split_line_on_exit" }, + { + trigger: ".o_barcode_client_action", + run: () => { + helper.assertLinesCount(2); + helper.assertLineProduct(0, "product1"); + helper.assertLineQty(0, "0 / 4"); + helper.assertLineProduct(1, "product2"); + helper.assertLineQty(1, "0 / 4"); + } + }, + // Scans 1x product1 then put in pack => Should split the line. + { trigger: ".o_barcode_client_action", run: "scan product1" }, + { trigger: ".o_barcode_line.o_selected", run: "scan O-BTN.pack" }, + // Scans again 2x product1 => The line with no package just be incremented. + { trigger: ".o_barcode_line.o_selected .result-package", run: "scan product1" }, + { trigger: ".o_barcode_line.o_selected.o_line_not_completed", run: "scan product1" }, + // Scans 1x product2 then checks the lines' state. + { trigger: ".o_barcode_line.o_selected .qty-done:contains('2')", run: "scan product2" }, + { + trigger: ".o_barcode_line.o_selected .qty-done:contains('1')", + run: () => { + helper.assertLinesCount(3); + const [line1, line2, line3] = helper.getLines(); + helper.assertLineProduct(line1, "product1"); + helper.assertLineQty(line1, "2 / 3"); + helper.assertLineProduct(line2, "product2"); + helper.assertLineQty(line2, "1 / 4"); + helper.assertLineProduct(line3, "product1"); + helper.assertLineQty(line3, "1 / 1"); + helper.assert(line3.querySelector(".result-package").innerText, "PACK0001000") + } + }, + // Goes back to the main menu (that's here the uncompleted lines shoud be split.) + { trigger: "button.o_exit" }, + // Re-opens the picking and checks uncompleted lines were split. + { trigger: ".o_stock_barcode_main_menu", run: "scan receipt_split_line_on_exit" }, + { + trigger: ".o_barcode_client_action", + run: () => { + helper.assertLinesCount(5); + const [line1, line2, line3, line4, line5] = helper.getLines(); + helper.assertLineProduct(line1, "product1"); + helper.assertLineQty(line1, "0 / 1"); + helper.assertLineProduct(line2, "product2"); + helper.assertLineQty(line2, "0 / 3"); + helper.assertLineProduct(line3, "product1"); + helper.assertLineQty(line3, "2 / 2"); + helper.assertLineProduct(line4, "product1"); + helper.assertLineQty(line4, "1 / 1"); + helper.assert(line4.querySelector(".result-package").innerText, "PACK0001000") + helper.assertLineProduct(line5, "product2"); + helper.assertLineQty(line5, "1 / 1"); + } + }, +]}); + +registry.category("web_tour.tours").add('test_split_line_on_scan', {test: true, steps: () => [ + // Scan product2 twice + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(1)', + run: 'scan product2' + }, + // Add current balance to empty pack + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(2)', + run: 'scan THEPACK1' + }, + // Check that line gets split properly + { + trigger: '.o_barcode_line[data-barcode="product2"].o_line_completed', + run: function () { + helper.assertLinesCount(2); + [0, 1].map(i => helper.assertLineQty(i, ["0 / 3", "2 / 2"][i])); + }, + }, + // Assign empty move line to other empty pack + { + trigger: '.o_barcode_client_action', + run: 'scan THEPACK2' + }, + // Ensure it doesn't split prematurely + { + trigger: '.o_barcode_line.o_selected:contains("THEPACK2") .qty-done:contains(0)', + run: function () { + helper.assertLinesCount(2); + const lines = helper.getLines({ barcode: 'product2' }); + helper.assert(lines[0].querySelector('.result-package').innerText, "THEPACK2"); + helper.assert(lines[1].querySelector('.result-package').innerText, "THEPACK1"); + }, + }, + // Add product2 x3 to finish the new move line + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + { + trigger: '.o_barcode_client_action', + run: 'scan product2' + }, + { + trigger: '.o_validate_page', + run: function () { + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + // Check that lines' quantity didn't change. + helper.assertLinesCount(2); + [0, 1].map(i => helper.assertLineQty(i, ["3 / 3", "2 / 2"][i])); + }, + }, + { trigger: '.btn.o_validate_page' }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_scan_line_splitting_preserve_destination', {test: true, steps: () => [ + // Select the first (only) line + { + trigger: '.o_barcode_line', + run: 'click', + }, + { + trigger: '.o_barcode_line.o_selected', + run: function () { + helper.assertLinesCount(1); + helper.assertLineQty(0, '0 / 5'); + helper.assertLineDestinationLocation(0, 'WH/Stock'); + }, + }, + // Reassign destination, add product2 x3, then pack it + { + trigger: '.o_barcode_line', + run: 'scan shelf3', + }, + { + trigger: '.o_barcode_line .o_line_destination_location:contains("Section 3")', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line .qty-done:contains("2")', + run: 'scan THEPACK1', + }, + // Ensure that packing split the line and preserved the new destination + { + trigger: '.o_barcode_line.o_selected .qty-done:contains(0)', + run: function () { + helper.assertLinesCount(2); + [0, 1].map(i => helper.assertLineQty(i, ["0 / 3", "2 / 2"][i])); + [0, 1].map(i => helper.assertLineDestinationLocation(i, '.../Section 3')); + }, + }, + // Add product2 x3, completing the remaining line, then add to a pack, then reassign destination + { + trigger: '.o_barcode_line', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line', + run: 'scan product2', + }, + { + trigger: '.o_barcode_line.o_selected.o_line_completed', + run: 'scan THEPACK2', + }, + { + trigger: '.o_barcode_line.o_selected .result-package:contains("THEPACK2")', + run: 'scan shelf4', + }, + { + trigger: '.o_barcode_line .o_line_destination_location:contains("Section 4")', + run: function () { + helper.assertValidateVisible(true); + helper.assertValidateIsHighlighted(true); + helper.assertValidateEnabled(true); + // Check that lines' quantity didn't change. + helper.assertLinesCount(2); + const lines = helper.getLines({ barcode: 'product2' }); + [0, 1].map(i => helper.assert(lines[i].querySelector('.result-package').innerText, ["THEPACK2","THEPACK1"][i])); + [0, 1].map(i => helper.assertLineQty(lines[i], ["3 / 3", "2 / 2"][i])); + [0, 1].map(i => helper.assertLineDestinationLocation(lines[i], [".../Section 4", ".../Section 3"][i])); + }, + }, + { trigger: '.btn.o_validate_page' }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_editing_done_picking', { + test: true, steps: () => [ + { trigger: '.o_barcode_client_action', run: 'scan O-BTN.validate' }, + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertErrorMessage("This picking is already done"); + }, + }, + ] +}); + +registry.category("web_tour.tours").add("test_sml_sort_order_by_product_category", { test: true, steps: () => [ + { + trigger: ".o_barcode_client_action", + run: () => { + helper.assertLinesCount(3); + // Product B should be first because it belongs to category A. + const line1 = document.querySelector('.o_barcode_line:first-child'); + helper.assertLineProduct(line1, "Product B"); + // Product A should comes after Product B because of its category + // and before Product C because of its product's name. + const line2 = document.querySelector('.o_barcode_line:nth-child(2)'); + helper.assertLineProduct(line2, "Product A"); + // Product C should be last. + const line3 = document.querySelector('.o_barcode_line:last-child'); + helper.assertLineProduct(line3, "Product C"); + } + }, +]}); + +registry.category("web_tour.tours").add('test_create_backorder_after_qty_modified', { + test: true, steps: () => [ + { trigger: '.o_edit'}, + { trigger: '.o_increase'}, + { trigger: '.o_save'}, + { trigger: '.o_validate_page'}, + { trigger: '.modal-dialog button.btn-primary', run: 'click' }, + ] +}); + +registry.category("web_tour.tours").add('test_open_picking_dont_override_assigned_user', {test: true, steps: () => [ + { + trigger: '.button_operations', + run: 'click', + }, + { + trigger: '.o_kanban_record_title > span:contains(Receipts)', + run: 'click', + }, + { + trigger: '.o_facet_value:contains("To Do") + .o_facet_remove', + run: 'click', + }, + { + trigger: '.btn.o_kanban_record_title > span:contains("test_responsible_receipt")', + run: 'click', + }, + { + trigger: '.o_exit', + run: 'click', + }, + { + isCheck: true, + trigger: '.o_breadcrumb > ol > li > a:contains(Operations)', + }, +]}); + +registry.category("web_tour.tours").add('test_multi_company_record_access_in_barcode', { + test: true, steps: () => [ + { trigger: '.o_stock_barcode_main_menu', run: 'scan company2_receipt' }, + // Shouldn't have access to company1 prod while in company2 picking type + { trigger: '.o_barcode_client_action', run: 'scan company1_product' }, + { + trigger: '.o_notification.border-danger', + run: () => { + helper.assertErrorMessage('You are expected to scan one or more products.'); + }, + }, + { trigger: '.o_barcode_client_action', run: 'scan company2_product' }, + { trigger: '.btn.o_validate_page', run: 'click' }, + { trigger: '.o_stock_barcode_main_menu', isCheck: true }, + ] +}); + +registry.category("web_tour.tours").add('test_no_zero_demand_new_line_from_split', { + test: true, steps: () => [ + { trigger: '.o_stock_barcode_main_menu', run: 'scan TNZDNLFS picking' }, + { trigger: '.o_edit', run: 'click' }, + { + extra_trigger: '.o_field_widget[name="product_id"]', + trigger: '.o_field_widget[name="qty_done"] input', + run: 'text 1', + }, + { trigger: '.o_save', run: 'click' }, + { + extra_trigger: '.o_barcode_line', + trigger: '.o_exit', + run: 'click' + }, + { trigger: '.o_stock_barcode_main_menu', run: 'scan TNZDNLFS picking' }, + { trigger: '.o_edit', run: 'click' }, + { + extra_trigger: '.o_field_widget[name="product_id"]', + trigger: '.o_field_widget[name="qty_done"] input', + run: 'text 0', + }, + { trigger: '.o_save', run: 'click' }, + { + extra_trigger: '.o_barcode_line', + trigger: '.o_exit', + run: 'click' + }, + ] +}); diff --git a/stock_barcode/static/tests/tours/tour_test_barcode_gs1.js b/stock_barcode/static/tests/tours/tour_test_barcode_gs1.js new file mode 100644 index 0000000..9f94a78 --- /dev/null +++ b/stock_barcode/static/tests/tours/tour_test_barcode_gs1.js @@ -0,0 +1,1422 @@ +/** @odoo-module **/ + +import helper from '@stock_barcode/../tests/tours/tour_helper_stock_barcode'; +import { registry } from "@web/core/registry"; +import { stepUtils } from "./tour_step_utils"; + +// Inventory Tests. +registry.category("web_tour.tours").add('test_gs1_inventory_gtin_8', {test: true, steps: () => [ + { + trigger: '.button_inventory', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000082655853', // (01)00000082655853 -> GTIN-8 -> product barcode == 8265585 + }, + { + trigger: '.o_barcode_client_action:contains("PRO_GTIN_8")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1"); + } + }, + { + trigger: '.o_barcode_client_action:contains("PRO_GTIN_8")', + run: 'scan 3777', // (37)77 -> add 77 Units to the selected product (the last one) + }, + { + trigger: '.o_barcode_line:contains("78")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "78"); + } + }, + ...stepUtils.validateBarcodeOperation('.o_barcode_line .qty-done:contains("78")'), +]}); + +registry.category("web_tour.tours").add('test_gs1_inventory_product_units', {test: true, steps: () => [ + { + trigger: '.button_inventory', + }, + // The following scanned barcode should be decomposed like that: + // - (01)00000082655853 > product barcode (8265585) + // - (37)102 > units (102) + { + trigger: '.o_barcode_client_action', + run: 'scan 010000008265585337102', + }, + { + trigger: '.o_barcode_client_action:contains("PRO_GTIN_8")', + }, + { + trigger: '.o_barcode_line:contains("102")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "102"); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_gs1_inventory_lot_serial', {test: true, steps: () => [ + { + trigger: '.button_inventory', + }, + // The following scanned barcode should be decomposed like that: + // - (01)00111155555717 > tracked by lot product barcode (111155555717) + // - (10)LOT-AAA > lot (LOT-AAA) + // - (30)5 > quantity (5) + { + trigger: '.o_barcode_client_action', + run: 'scan 010011115555571710LOT-AAA~305', + }, + { + trigger: '.o_barcode_line:contains("AAA")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ selected: true }); + helper.assertLineProduct(line, "PRO_GTIN_12_lot"); + helper.assert(line.querySelector('.o_line_lot_name').textContent, 'LOT-AAA'); + helper.assertLineQty(line, "5"); + } + }, + // Scans product + lot, and then scans the quantity after the line's creation. + { + trigger: '.o_barcode_client_action', + run: 'scan 010011115555571710LOT-AAB', + }, + { trigger: '.o_sublines .o_barcode_line:contains("AAB")' }, + { + trigger: '.o_sublines .o_barcode_line.o_selected:contains("AAB")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const parentLine = helper.getLine({ selected: true }); + const subline = helper.getSubline({ selected: true }); + helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot"); + helper.assertLineQty(parentLine, "6"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'LOT-AAB'); + helper.assertLineQty(subline, "1"); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan 30009', + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains("10")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const parentLine = helper.getLine({ selected: true }); + const subline = helper.getSubline({ selected: true }); + helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot"); + helper.assertLineQty(parentLine, "15"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'LOT-AAB'); + helper.assertLineQty(subline, "10"); + } + }, + // Scans a second time a quantity (should increment the current line). + { + trigger: '.o_barcode_client_action', + run: 'scan 305', + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected .qty-done:contains("15")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const parentLine = helper.getLine({ selected: true }); + const subline = helper.getSubline({ selected: true }); + helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot"); + helper.assertLineQty(parentLine, "20"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'LOT-AAB'); + helper.assertLineQty(subline, "15"); + } + }, + // Scans a lot + quantity (should get back the product from the previous + // line and create a new line). + { + trigger: '.o_barcode_client_action', + run: 'scan 3020##10LOT-AAC', + }, + { + trigger: '.o_barcode_line.o_selected:contains("AAC")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const parentLine = helper.getLine({ selected: true }); + const subline = helper.getSubline({ selected: true }); + helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot"); + helper.assertLineQty(parentLine, "40"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'LOT-AAC'); + helper.assertLineQty(subline, "20"); + } + }, + // Scans manually (with a custom separator) lot + quantity but with a lot already scanned, + // so it should increment the quantity on the line with this lot. + { trigger: '.o_barcode_client_action .o_stock_mobile_barcode' }, + { + trigger: '.modal-content .modal-body #manual_barcode', + run: function(actions) { + actions.text("305Alt02910LOT-AAA"); + } + }, + { trigger: '.modal-content .modal-footer .btn-primary:not(:disabled)' }, + + { + trigger: '.o_barcode_line.o_selected .qty-done:contains("10")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const parentLine = helper.getLine({ selected: true }); + const subline = helper.getSubline({ selected: true }); + helper.assertLineProduct(parentLine, "PRO_GTIN_12_lot"); + helper.assertLineQty(parentLine, "45"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'LOT-AAA'); + helper.assertLineQty(subline, "10"); + } + }, + + // The following scanned barcode should be decomposed like that: + // - (01)15222222222219 > tracked by SN product barcode (15222222222219) + // - (21)Serial1 > serial number (Serial1) + { + trigger: '.o_barcode_client_action', + run: 'scan 011522222222221921Serial1', + }, + // Folds the previous line. + { trigger: '.o_toggle_sublines .fa-caret-up' }, + { + trigger: '.o_barcode_line:contains("Serial1")', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(0); + const line = helper.getLine({ selected: true }); + helper.assertLineProduct(line, "PRO_GTIN_14_serial"); + helper.assert(line.querySelector('.o_line_lot_name').textContent, 'Serial1'); + helper.assertLineQty(line, "1"); + } + }, + // The following scanned barcode should be decomposed like that: + // - (01)15222222222219 > tracked by SN product barcode (15222222222219) + // - (21)Serial2 > serial number (Serial2) + { + trigger: '.o_barcode_client_action', + run: 'scan 011522222222221921Serial2', + }, + { trigger: '.o_sublines .o_barcode_line:contains("Serial2")' }, + { + trigger: '.o_barcode_line:contains("Serial2")', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(2); + } + }, + // Tries to scan multiple quantities for product tracked by SN, should set + // the inventory qty. to 1 instead, and display a notification. + { + trigger: '.o_barcode_client_action', + run: 'scan 011522222222221921Serial3\x1D3020', + }, + { + trigger: '.o_notification.border-danger', + }, + { + trigger: '.o_barcode_line:contains("Serial3")', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(3); + const parentLine = document.querySelector('.o_barcode_line.o_selected'); + const subline = document.querySelector('.o_sublines .o_barcode_line.o_selected'); + helper.assertLineQty(parentLine, "3"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'Serial3'); + helper.assertLineQty(subline, "1"); + } + }, + // Tries to scan multiple quantities for product tracked by SN but without + // a SN, should set the inventory qty. to the scanned one (20). + { + trigger: '.o_barcode_client_action', + run: 'scan 01152222222222193020', + }, + { + trigger: '.o_sublines .o_barcode_line:nth-child(4)', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(4); + const parentLine = document.querySelector('.o_barcode_line.o_selected'); + const subline = document.querySelector('.o_sublines .o_barcode_line.o_selected'); + helper.assertLineQty(parentLine, "23"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, ''); + helper.assertLineQty(subline, "20"); + } + }, + // Scans a serial number, it should not write it on the previous line (as + // multiple quantitieswas scanned) and create a new one instead. + { + trigger: '.o_barcode_client_action', + run: 'scan 011522222222221921Serial4', + }, + { + trigger: '.o_sublines .o_barcode_line:nth-child(5)', + run: function () { + helper.assertLinesCount(2); + helper.assertSublinesCount(5); + const parentLine = document.querySelector('.o_barcode_line.o_selected'); + const subline = document.querySelector('.o_sublines .o_barcode_line.o_selected'); + helper.assertLineQty(parentLine, "24"); + helper.assert(subline.querySelector('.o_line_lot_name').textContent, 'Serial4'); + helper.assertLineQty(subline, "1"); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan O-BTN.validate', + }, + // Ask for confirmation when validate because of quantities for tracked product without SN. + { + trigger: '.modal-content:contains("Tracked Products in Inventory Adjustment")', + }, + { + trigger: '.modal-content .btn[name=action_confirm]', + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + }, +]}); + +registry.category("web_tour.tours").add('test_gs1_inventory_package', {test: true, steps: () => [ + { trigger: '.button_inventory' }, + // Scans the package in Section 1 => Should raise a warning. + { + trigger: '.o_barcode_client_action', + run: 'scan 00987654123487568456', + }, + { + trigger: '.o_notification.border-danger' + }, + // Changes location for Section 1 and scans again the package. + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-01-00', + }, + { + trigger: '.o_scan_product_or_src:contains("WH/Stock/Section 1")', + run: 'scan 00987654123487568456', + }, + { + trigger: '.o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "product1" }); + const product1_package = line.querySelector('div[name="package"]').innerText; + helper.assert(product1_package, '987654123487568456'); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "8 / 8"); + }, + }, + + // Changes location for Section 2 and scans the second package. + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-02-00', + }, + { + trigger: '.o_scan_product_or_src:contains("WH/Stock/Section 2")', + run: 'scan 00487325612456785124', + }, + { + trigger: '.o_barcode_line[data-barcode="product2"]', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: "product2" }); + const product2_package = line.querySelector('div[name="package"]').innerText; + helper.assert(product2_package, '487325612456785124'); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "6 / 6"); + }, + }, + // Tries to scan the same package => Should raise a warning. + { + trigger: '.o_barcode_client_action', + run: 'scan 00487325612456785124', + }, + { + trigger: '.o_notification.border-danger' + }, + + // Scans additionnal products and put them in a new pack by scanning a non-existing package barcode. + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000082655853304', + }, + { + trigger: '.o_barcode_line:nth-child(2)', + run: 'scan 00122333444455555670', + }, + { + trigger: '.o_barcode_line:contains(122333444455555670)', + run: function () { + helper.assertLinesCount(3); + const line1 = helper.getLine({ barcode: "product2" }); + const line1_package = line1.querySelector('div[name="package"]').innerText; + helper.assertLineIsHighlighted(line1, false); + helper.assert(line1_package, '487325612456785124'); + helper.assertLineQty(line1, "6 / 6"); + const line2 = helper.getLine({ barcode: "82655853" }); + const line2_package = line2.querySelector('div[name="package"]').innerText; + helper.assertLineIsHighlighted(line2, true); + helper.assert(line2_package, '122333444455555670'); + helper.assertLineQty(line2, "4"); + }, + }, + + // Validates the inventory. + { + trigger: '.o_apply_page' + }, + { + trigger: '.o_notification.border-success', + isCheck: true, + } +]}); + +// Picking Tests. + +registry.category("web_tour.tours").add('test_gs1_package_receipt', {test: true, steps: () => [ + { trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")' }, + { trigger: '.o_stock_barcode_main_menu', run: 'scan WH-RECEIPTS' }, + // Scans PRO_GTIN_8 x4 + { trigger: '.o_barcode_client_action', run: 'scan 0100000082655853300004' }, + { + trigger: '.o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line1 = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line1, true); + helper.assertLineQty(line1, "4"); + } + }, + // Scans a package => As it doesn't exist in the DB, should put in pack the + // previously scanned quantities. + { trigger: '.o_barcode_client_action', run: 'scan 00546879213579461324' }, + { + trigger: '.o_barcode_line:contains(546879213579461324)', + run: function () { + helper.assertLinesCount(1); + const line1 = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line1, true); + helper.assertLineQty(line1, "4"); + const product1_package = line1.querySelector('[name="package"]').innerText; + helper.assert(product1_package, '546879213579461324'); + } + }, + // Scans PRO_GTIN_12 x8. + { trigger: '.o_barcode_client_action', run: 'scan 300008\x1D0100584687955629' }, + { + trigger: '.o_barcode_line:nth-child(2)', + run: function () { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "4"); + const product1_package = line1.querySelector('[name="package"]').innerText; + helper.assert(product1_package, '546879213579461324'); + const line2 = helper.getLine({ barcode: "584687955629" }); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line2, "8"); + } + }, + // Scans again the same package. Now it already exists but should be assigned anyway. + { trigger: '.o_barcode_client_action', run: 'scan 00546879213579461324' }, + { + trigger: '.o_barcode_line[data-barcode="584687955629"]:contains(546879213579461324)', + run: function () { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "4"); + const product1_package = line1.querySelector('[name="package"]').innerText; + helper.assert(product1_package, '546879213579461324'); + const line2 = helper.getLine({ barcode: "584687955629" }); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line2, "8"); + const product2_package = line2.querySelector('[name="package"]').innerText; + helper.assert(product2_package, '546879213579461324'); + } + }, + // Selects a line and scans a package type, it should be assing the package + // type to selected line's result package. + { trigger: '.o_barcode_line[data-barcode=584687955629]' }, + { trigger: '.o_selected[data-barcode=584687955629]', run: 'scan 91WOODC' }, + { + trigger: '.o_barcode_line[data-barcode="584687955629"]:contains("(Wooden Chest)")', + run: function () { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "4"); + const product1_package = line1.querySelector('[name="package"]').innerText; + helper.assert(product1_package, '546879213579461324 (Wooden Chest)'); + const line2 = helper.getLine({ barcode: "584687955629" }); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line2, "8"); + const product2_package = line2.querySelector('[name="package"]').innerText; + helper.assert(product2_package, '546879213579461324 (Wooden Chest)'); + } + }, + + // Scans PRO_GTIN_8 x6 + { trigger: '.o_barcode_client_action', run: 'scan 0100000082655853300006' }, + { + trigger: '.o_barcode_line.o_selected:contains("PRO_GTIN_8")', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ selected: true }); + helper.assertLineQty(line, "6"); + } + }, + // Scans a package with a type => put in pack the selected line in this package with the type. + { trigger: '.o_barcode_client_action', run: 'scan 00130406658041178543\x1D91IRONC' }, + { + trigger: '.o_barcode_line.o_selected:contains("130406658041178543")', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ selected: true }); + helper.assertLineQty(line, "6"); + const linePackage = line.querySelector('[name="package"]').innerText; + helper.assert(linePackage, '130406658041178543 (Iron Chest)'); + } + }, + // Scans PRO_GTIN_12 x12, then scans a package type to put in pack in a new package. + { trigger: '.o_barcode_client_action', run: 'scan 30000000120100584687955629' }, + { + trigger: '.o_barcode_line.o_selected[data-barcode="584687955629"]', + run: function () { + helper.assertLinesCount(4); + const line = helper.getLine({ selected: true }); + helper.assertLineQty(line, "12"); + } + }, + { trigger: '.o_barcode_client_action', run: 'scan 91WOODC' }, + { + trigger: '.o_barcode_line.o_selected[data-barcode="584687955629"] [name="package"]', + run: function () { + helper.assertLinesCount(4); + const line = helper.getLine({ selected: true }); + helper.assertLineQty(line, "12"); + const linePackage = line.querySelector('[name="package"]').innerText; + helper.assert(linePackage, 'PACK0000123 (Wooden Chest)'); + } + }, + // Scan another package type => Should change the package's type. + { trigger: '.o_barcode_client_action', run: 'scan 91IRONC' }, + { + trigger: '.o_selected[data-barcode="584687955629"] [name="package"]:contains("Iron Chest")', + run: function () { + helper.assertLinesCount(4); + const line = helper.getLine({ selected: true }); + helper.assertLineQty(line, "12"); + const linePackage = line.querySelector('[name="package"]').innerText; + helper.assert(linePackage, 'PACK0000123 (Iron Chest)'); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_gs1_package_delivery', {test: true, steps: () => [ + { trigger: '.o_stock_barcode_main_menu:contains("Barcode Scanning")' }, + { + trigger: '.o_stock_barcode_main_menu', + run: 'scan WH-DELIVERY', + }, + // Scans the package + { + trigger: '.o_barcode_client_action', + run: 'scan 00546879213579461324', + }, + { + trigger: '.o_barcode_line:nth-child(2)', + run: function () { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: "82655853" }); + helper.assertLineIsHighlighted(line1, true); + helper.assertLineQty(line1, "4"); + helper.assert(line1.querySelector('.package').innerText, '546879213579461324'); + helper.assert(line1.querySelector('.result-package').innerText, '546879213579461324'); + const line2 = helper.getLine({ barcode: "584687955629" }); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line2, "8"); + helper.assert(line2.querySelector('.package').innerText, '546879213579461324'); + helper.assert(line2.querySelector('.result-package').innerText, '546879213579461324'); + } + }, + ...stepUtils.validateBarcodeOperation(), +]}); + +registry.category("web_tour.tours").add('test_gs1_reserved_delivery', {test:true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "11011019" }); + helper.assertLineIsHighlighted(line, false); + helper.assertLineQty(line, "0 / 10"); + helper.assertValidateIsHighlighted(false); + } + }, + // Scans 6 qty. of PRO_GTIN_8 (waiting for 10). + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000011011019306', + }, + { + trigger: '.o_barcode_line .qty-done:contains(6)', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "11011019" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "6 / 10"); + helper.assertValidateIsHighlighted(false); + } + }, + // Scans 8 additional qty. of PRO_GTIN_8 (waiting for 10, so we have 4 extra). + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000011011019308', + }, + { + trigger: '.o_barcode_line .qty-done:contains(10)', + run: function () { + helper.assertLinesCount(2); + const [line1, line2] = helper.getLines(); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineIsHighlighted(line2, true); + helper.assertLineQty(line1, "10 / 10"); + helper.assertLineQty(line2, "4"); + helper.assertValidateIsHighlighted(true); + } + }, + // Validates the transfer. + ...stepUtils.validateBarcodeOperation(".o_validate_page.btn-success"), +]}); + +registry.category("web_tour.tours").add('test_gs1_receipt_conflicting_barcodes_1', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "11011019"}); + helper.assertLineIsHighlighted(line, false); + helper.assertLineQty(line, "0 / 1"); + helper.assertValidateIsHighlighted(false); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000011011019', // (01)00000011011019 product barcode (11011019) + }, + { + trigger: '.o_barcode_line.o_selected', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "11011019"}); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1 / 1"); + helper.assertValidateIsHighlighted(true); + } + }, + ...stepUtils.validateBarcodeOperation(".o_validate_page.btn-success"), +]}); + +registry.category("web_tour.tours").add('test_gs1_delivery_ambiguous_lot_number', {test:true, steps: () => [ + // Create a delivery. + { trigger: '.o_stock_barcode_main_menu_container', run: 'scan WH-DELIVERY' }, + // Scan the GS1 barcode (contains product + lot) + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan 0100000022222220152407101012345', + }, + { + trigger: '.o_barcode_line .qty-done:contains(1)', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "22222220" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1"); + helper.assertLinesTrackingNumbers([line], ["12345"]); + } + }, + + // Cancel the transfer and do the same but with packaging barcode instead. + { trigger: '.o_barcode_client_action', run: 'scan O-CMD.cancel' }, + { trigger: '.o_stock_barcode_main_menu_container', run: 'scan WH-DELIVERY' }, + // Scan the GS1 barcode (contains product packaging + lot) + { + trigger: '.o_scan_message.o_scan_product', + run: 'scan 0110000000240489152407101012345', + }, + { + trigger: '.o_barcode_line .qty-done:contains(1)', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "22222220"}); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1"); + helper.assertLinesTrackingNumbers([line], ["12345"]); + } + }, + // Validates the transfer. + { + trigger: '.o_validate_page.btn-success', + run: 'scan O-BTN.validate', + }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); + +registry.category("web_tour.tours").add('test_gs1_delivery_ambiguous_serial_number', {test:true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: 'scan LOC-01-00-00', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan 01057115440019521524071021304', + }, + { + trigger: '.o_barcode_line .qty-done:contains(1)', + run: function () { + helper.assertLinesCount(1); + const $line = helper.getLine({barcode: '05711544001952'}); + helper.assertLineIsHighlighted($line, true); + helper.assertLineQty($line, "1 / 1"); + } + }, + // Validates the transfer. + ...stepUtils.validateBarcodeOperation(".o_validate_page.btn-success"), +]}); +registry.category("web_tour.tours").add('test_gs1_receipt_conflicting_barcodes_2', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "000011011019" }); + helper.assertLineIsHighlighted(line, false); + helper.assertLineQty(line, "0 / 1"); + helper.assertValidateIsHighlighted(false); + } + }, + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000011011019', // (01)00000011011019 product barcode (000011011019) + }, + { + trigger: '.o_barcode_line.o_selected', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "000011011019" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1 / 1"); + helper.assertValidateIsHighlighted(true); + } + }, + ...stepUtils.validateBarcodeOperation(".o_validate_page.btn-success"), +]}); + +registry.category("web_tour.tours").add('test_gs1_receipt_conflicting_barcodes_3', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: "11011019" }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "0 / 1"); + helper.assertLineProduct(line1, "PRO_GTIN_8"); + const line2 = helper.getLine({ barcode: "000011011019" }); + helper.assertLineIsHighlighted(line2, false); + helper.assertLineQty(line2, "0 / 1"); + helper.assertLineProduct(line2, "PRO_GTIN_12"); + helper.assertValidateIsHighlighted(false); + } + }, + // Scans '0100000011011019', should get 'PRO_GTIN_8' as this is the product put in the lazy cache. + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000011011019', + }, + { + trigger: '.o_barcode_line.o_selected', + run: function () { + helper.assertLinesCount(2); + const line1 = helper.getLine({ barcode: "11011019" }); + helper.assertLineIsHighlighted(line1, true); + helper.assertLineQty(line1, "1 / 1"); + helper.assertLineProduct(line1, "PRO_GTIN_8"); + const line2 = helper.getLine({ barcode: "000011011019" }); + helper.assertLineIsHighlighted(line2, false); + helper.assertLineQty(line2, "0 / 1"); + helper.assertLineProduct(line2, "PRO_GTIN_12"); + helper.assertValidateIsHighlighted(false); + } + }, + // Scans a second time '0100000011011019', should create a new line for PRO_GTIN_8. + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000011011019', + }, + { + trigger: '.o_barcode_line:nth-child(3)', + run: function () { + helper.assertLinesCount(3); + const [lineGTIN12, lineGTIN8_1, lineGTIN8_2] = helper.getLines(); + helper.assertLineIsHighlighted(lineGTIN12, false); + helper.assertLineQty(lineGTIN12, "0 / 1"); + helper.assertLineProduct(lineGTIN12, 'PRO_GTIN_12'); + helper.assertLineIsHighlighted(lineGTIN8_1, false); + helper.assertLineQty(lineGTIN8_1, "1 / 1"); + helper.assertLineProduct(lineGTIN8_1, 'PRO_GTIN_8'); + helper.assertLineIsHighlighted(lineGTIN8_2, true); + helper.assertLineQty(lineGTIN8_2, "1"); + helper.assertLineProduct(lineGTIN8_2, 'PRO_GTIN_8'); + helper.assertValidateIsHighlighted(false); + } + }, + // Scans the PRO_GTIN_12 (non-GS1) barcode: '000011011019'. + { + trigger: '.o_barcode_client_action', + run: 'scan 000011011019', + }, + { + trigger: '.o_validate_page.btn-success', + run: function () { + helper.assertLinesCount(3); + const [line1, line2] = helper.getLines({ barcode: "11011019" }); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineQty(line1, "1 / 1"); + helper.assertLineProduct(line1, "PRO_GTIN_8"); + helper.assertLineIsHighlighted(line2, false); + helper.assertLineQty(line2, "1"); + helper.assertLineProduct(line2, "PRO_GTIN_8"); + const line3 = helper.getLine({ barcode: "000011011019" }); + helper.assertLineIsHighlighted(line3, true); + helper.assertLineQty(line3, "1 / 1"); + helper.assertLineProduct(line3, "PRO_GTIN_12"); + helper.assertValidateIsHighlighted(true); + } + }, + ...stepUtils.validateBarcodeOperation(".o_validate_page.btn-success"), +]}); + +registry.category("web_tour.tours").add("test_gs1_receipt_conflicting_barcodes_mistaken_as_gs1", {test: true, steps: () => [ + // Creates a new receipt. + { trigger: ".o_stock_barcode_main_menu", run: "scan WH-RECEIPTS" }, + // Scans 3000000015 -> Will be parsed as 15 units by the GS1 nomenclature + // but since we don't expect a quantity here (no line yet), it should also + // check if this barcode matches something else (by-passing the nomenclature.) + { trigger: ".o_barcode_client_action", run: "scan 3000000015" }, + { + trigger: ".o_barcode_line", + run: function() { + const line = helper.getLine({ barcode: "3000000015" }); + helper.assertLineQty(line, "1"); + }, + }, + // Scans 21000000000003 -> Will be parsed as a serial number by the GS1 nomenclature but since + // it's irrelevant to scan a SN here (previous scanned product is not tracked), it should also + // check if it's something else barcode (by-passing the nomenclature.) + { trigger: ".o_barcode_client_action", run: "scan 21000000000003" }, + { + trigger: ".o_barcode_line[data-barcode='21000000000003']", + run: function() { + const line = helper.getLine({ barcode: "21000000000003" }); + helper.assertLineQty(line, "1"); + }, + }, + // Scans again 3000000015 but since it could genuinely be a quantity, we have no way to find if + // it's really a GS1 or something else and use it as it was parsed. + { trigger: ".o_barcode_client_action", run: "scan 3000000015" }, + { + trigger: ".o_barcode_line.o_selected .qty-done:contains('16')", + run: function() { + const line = helper.getLine({ barcode: "21000000000003" }); + // The qty of the selected product should be incremented by 15. + helper.assertLineQty(line, "16"); + }, + }, + // Scans 21-Chouette-MegaPack whom can be interpreted as a lot (AI 21, lot name: + // "-Chouette-MegaPack") but who is actually an existing package. + { trigger: ".o_barcode_client_action", run: "scan 21-Chouette-MegaPack" }, + { + trigger: ".o_barcode_line[data-barcode='21000000000003'] div[name='package']", + run: function() { + const line = helper.getLine({ barcode: "21000000000003" }); + helper.assertLineQty(line, "16"); + helper.assert(line.querySelector(".result-package").innerText, "21-Chouette-MegaPack"); + }, + }, + // Now, scans a product tracked by SN and ensures the barcode starting by 21 are indeed + // interpreted as serial number once a tracked product's waiting a SN. + { trigger: ".o_barcode_client_action", run: "scan productserial1" }, + { trigger: ".o_barcode_line[data-barcode='productserial1']", run: "scan 21-Chouette-MegaPack" }, + { + trigger: ".o_barcode_line.o_selected .o_line_lot_name", + run: function() { + const line = helper.getLine({ barcode: "productserial1" }); + helper.assert(line.querySelector(".o_line_lot_name").innerText, "-Chouette-MegaPack"); + }, + }, + { trigger: ".o_barcode_client_action", run: "scan 21000000000003" }, + { trigger: ".o_barcode_line.o_selected .o_line_button.o_toggle_sublines" }, + { + trigger: ".o_sublines .o_barcode_line.o_selected", + run: function() { + helper.assert(document.querySelector(".o_barcode_line_summary .qty-done").innerText, "2"); + helper.assert( + document.querySelector(".o_sublines .o_selected .o_line_lot_name").innerText, + "000000000003" + ); + }, + }, +]}); + +registry.category("web_tour.tours").add('test_gs1_receipt_lot_serial', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(1); + helper.assertLineIsHighlighted(0, false); + helper.assertLineQty(0, "0 / 40"); + } + }, + // The following scanned barcode should be decomposed like that: + // - (01)00000076543210 > product barcode (76543210) + // - (30)00000008 > quantity (8) + + // Open manual scanner. + { + trigger: '.o_barcode_client_action .o_stock_mobile_barcode', + }, + // Manually add '(01)00000076543210(10)b1-b001(30)00000008' barcode for GS1 test. + { + trigger: '.modal-content .modal-body #manual_barcode', + run: function(actions) { + actions.text("(01)00000076543210(30)00000008"); + } + }, + // Apply the manual entry of barcode. + { + trigger: '.modal-content .modal-footer .btn-primary:not(:disabled)', + }, + + { + trigger: '.o_barcode_line.o_selected', + run: function () { + helper.assertLinesCount(1); + helper.assertLineIsHighlighted(0, true); + helper.assertLineQty(0, "8 / 40"); + } + }, + // Scans the lot: as the line has already done quantity but no lot, + // it should apply the lot without increase the quantity. + { + trigger: '.o_barcode_client_action', + run: 'scan 10b1-b001', + }, + { + trigger: '.o_barcode_line:contains("b1-b001")', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({barcode: '76543210'}); + helper.assert(line.querySelector('.o_line_lot_name').innerText, 'b1-b001'); + helper.assertLineQty(line, '8 / 40'); + } + }, + // Scan the product, lot and quantity all at once: + // - (01)00000076543210 > product barcode (76543210) + // - (10)b1-b002 > lot (b1-b002) + // - (30)00000004 > quantity (4) + { + trigger: '.o_barcode_client_action', + run: 'scan 010000007654321010b1-b002\x1D3000000004', + }, + { trigger: '.o_barcode_line.o_selected .btn.o_toggle_sublines .fa-caret-down' }, + { + trigger: '.o_barcode_line:contains("b1-b002")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const parentLine = helper.getLine({ barcode: '76543210' }); + const [line1, line2] = helper.getSublines(); + helper.assertLinesTrackingNumbers([line1, line2], ["b1-b001", "b1-b002"]); + helper.assertLineQty(parentLine, "12 / 40"); + helper.assertLineQty(line1, "8 / 40"); + helper.assertLineQty(line2, "4"); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineIsHighlighted(line2, true); + } + }, + { + trigger: '.o_sublines .o_barcode_line:nth-child(2).o_selected', + run: 'scan 010000007654321010b1-b002\x1D3000000004', + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected .qty-done:contains("8")', + run: function () { + helper.assertSublinesCount(2); + const [line1, line2] = helper.getSublines(); + helper.assertLinesTrackingNumbers([line1, line2], ["b1-b001", "b1-b002"]); + helper.assertLineQty(line1, "8 / 40"); + helper.assertLineQty(line2, "8"); + helper.assertLineIsHighlighted(line1, false); + helper.assertLineIsHighlighted(line2, true); + } + }, + // Scans a non-GS1 lot barcode to be sure it's compatible. + { + trigger: '.o_barcode_client_action', + run: 'scan b1-b003', + }, + { + trigger: '.o_barcode_line:contains("b1-b003")', + run: function () { + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "1"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], true); + } + }, + // Scan two more time the previous barcode... + { + trigger: '.o_barcode_client_action', + run: 'scan b1-b003', + }, + { + trigger: '.o_barcode_client_action', + run: 'scan b1-b003', + }, + { + trigger: '.o_barcode_line.o_selected .qty-done:contains("3")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "3"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], true); + } + }, + // ... then scan a GS1 barcode to add 5 more qty., without lot reference, + // to be sure the qty. will go on the last selected line. + { + trigger: '.o_barcode_client_action', + run: 'scan 3000000005', + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected:contains("8")', + run: function () { + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "8"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], true); + } + }, + // Adds a line with the "Add Product" button, then scans the lot/qty. + { trigger: '.o_add_line' }, + { + trigger: '.o_field_widget[name=product_id] input', + run: 'text B1', + }, + { trigger: ".ui-menu-item > a:contains('Battle Droid')" }, + { + trigger: '[name=qty_done] input', + run: 'text 0', + }, + { trigger: '.o_save' }, + { + trigger: '.o_barcode_line:nth-child(4)', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(4); + const sublines = helper.getSublines({ selected: false }); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003"]); + const line4 = helper.getSubline({ selected: true }); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "8"); + helper.assertLineQty(line4, "0"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], false); + helper.assertLineIsHighlighted(line4, true); + } + }, + // The following scanned barcode should be decomposed like that: + // - (30)00000004 > quantity (4) + // - (10)b1-b004 > lot (b1-b004) + // - (01)00000076543210 > product barcode (76543210) + { + trigger: '.o_barcode_client_action', + run: 'scan 3000000004\x1D10b1-b004\x1D0100000076543210', + }, + { + trigger: '.o_sublines .o_barcode_line:contains("b1-b004") .qty-done:contains("4")', + run: function () { + helper.assertSublinesCount(4); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003", "b1-b004"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "8"); + helper.assertLineQty(sublines[3], "4"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], false); + helper.assertLineIsHighlighted(sublines[3], true); + } + }, + // Scans only a lot => should create a new line with 1 qty. + { + trigger: '.o_barcode_client_action', + run: 'scan 10b1-b005', + }, + { + trigger: '.o_sublines .o_barcode_line:contains("b1-b005") .qty-done:contains("1")', + run: function () { + helper.assertLinesCount(1); + helper.assertSublinesCount(5); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003", "b1-b004", "b1-b005"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "8"); + helper.assertLineQty(sublines[3], "4"); + helper.assertLineQty(sublines[4], "1"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], false); + helper.assertLineIsHighlighted(sublines[3], false); + helper.assertLineIsHighlighted(sublines[4], true); + } + }, + // Now scans the quantity. + { + trigger: '.o_barcode_client_action', + run: 'scan 3000007', + }, + { + trigger: '.o_sublines .o_barcode_line:contains("b1-b005") .qty-done:contains("8")', + run: function () { + helper.assertSublinesCount(5); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003", "b1-b004", "b1-b005"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "8"); + helper.assertLineQty(sublines[3], "4"); + helper.assertLineQty(sublines[4], "8"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], false); + helper.assertLineIsHighlighted(sublines[3], false); + helper.assertLineIsHighlighted(sublines[4], true); + } + }, + // Scans a lot already in the view with additional qty. => Should select the + // existing line for this lot and update its quantity done. + { + trigger: '.o_barcode_client_action', + run: 'scan 10b1-b004\x1D3000000004', + }, + { + trigger: '.o_sublines .o_barcode_line.o_selected:contains("b1-b004")', + run: function () { + helper.assertSublinesCount(5); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["b1-b001", "b1-b002", "b1-b003", "b1-b004", "b1-b005"]); + helper.assertLineQty(sublines[0], "8 / 40"); + helper.assertLineQty(sublines[1], "8"); + helper.assertLineQty(sublines[2], "8"); + helper.assertLineQty(sublines[3], "8"); + helper.assertLineQty(sublines[4], "8"); + helper.assertLineIsHighlighted(sublines[0], false); + helper.assertLineIsHighlighted(sublines[1], false); + helper.assertLineIsHighlighted(sublines[2], false); + helper.assertLineIsHighlighted(sublines[3], true); + helper.assertLineIsHighlighted(sublines[4], false); + } + }, + ...stepUtils.validateBarcodeOperation(".o_validate_page"), +]}); + +registry.category("web_tour.tours").add('test_gs1_receipt_quantity_with_uom', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(0); + } + }, + // Scans 5 kg for the "Product by Units" => Wrong UoM category, should display an error (instead of creating a new line) + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000152643293100000005', + }, + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertLinesCount(0); + const errorMessageTitle = document.querySelector('.o_notification_title'); + helper.assert(errorMessageTitle.innerText, 'Wrong Unit of Measure'); + } + }, + { trigger: '.o_notification_close' }, + // Scans 4 units for the "Product by Units". + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000152643293700000004', + }, + { + trigger: '.o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "15264329" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "4 Units"); + } + }, + // Scans 5 kg for the "Product by Units" => Wrong UoM category, should display an error (instead of updating the existing line) + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000152643293100000005', + }, + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "15264329" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "4 Units"); + const errorMessageTitle = document.querySelector('.o_notification_title'); + helper.assert(errorMessageTitle.innerText, 'Wrong Unit of Measure'); + } + }, + { trigger: '.o_notification_close' }, + + // Scans 5 kg for the "Product by kg". + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000152648793100000005', + }, + { + trigger: '.o_barcode_line:contains("Product by kg")', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: "15264879" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "5 kg"); + } + }, + // Scans 6 units for the "Product by kg" => Wrong UoM category, shoud display an error. + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000152648793700000006', + }, + { + trigger: '.o_notification.border-danger', + run: function () { + helper.assertLinesCount(2); + const line = helper.getLine({ barcode: "15264879" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "5 kg"); + const errorMessageTitle = document.querySelector('.o_notification_title'); + helper.assert(errorMessageTitle.innerText, 'Wrong Unit of Measure'); + } + }, + { trigger: '.o_notification_close' }, + + // Scans 1.25 kg for the "Product by g" => Compatible UoM but kg need to be converted to g. + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000152648933102000125', + }, + { + trigger: '.o_barcode_line:contains("Product by g")', + run: function () { + helper.assertLinesCount(3); + const line = helper.getLine({ barcode: "15264893" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "1250 g"); + } + }, + // Clicks on the edit button to trigger a save. + { trigger: '.o_barcode_line:nth-child(3) .o_edit' }, + { + trigger: '[name=qty_done] input', + run: function () { + helper.assertFormQuantity("1250"); + } + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_gs1_receipt_packaging', {test: true, steps: () => [ + { + trigger: '.o_barcode_client_action', + run: function () { + helper.assertLinesCount(0); + } + }, + // Scans a packaging without any quantity + { + trigger: '.o_barcode_client_action', + run: 'scan 0100000000002226', + }, + { + trigger: '.o_barcode_line', + run: function () { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "1113" }); + helper.assertLineIsHighlighted(line, true); + helper.assertLineQty(line, "6"); + } + }, + // Scans 4 packaging + { + trigger: '.o_barcode_client_action', + run: 'scan 01000000000022263700000004', + }, + { + trigger: '.o_barcode_line [name=quantity]:contains("30")', + run: function () { + helper.assertLinesCount(1); + helper.assertLineIsHighlighted(0, true); + helper.assertLineQty(0, "30"); + } + }, + // Clicks on the edit button to trigger a save. + { trigger: '.o_barcode_line:first-child .o_edit' }, + { + trigger: '[name="qty_done"] input', + run: function () { + helper.assertFormQuantity("30"); + } + }, + ...stepUtils.discardBarcodeForm(), +]}); + +registry.category("web_tour.tours").add('test_gs1_receipt_packaging_with_uom', {test: true, steps: () => [ + { trigger: ".o_stock_barcode_main_menu", run: "scan WH-RECEIPTS"}, + /* Scan (01)10347543011337(3103)000900(17)240701(10)100005 + - (01) 10347543011337: packaging barcode (6 units); + - (3103) 000900: 0.9 kg -> Should be ignored; + - (17) 240701: expiration date (1st July 2024); + - (10) 100005: tracking number. + */ + { + trigger: ".o_barcode_client_action", + run: "scan 011034754301133731030009001724070110100005" + }, + { + trigger: ".o_barcode_line", + run: function() { + helper.assertLineQty(0, "6 Units"); + } + }, + /* Scan another lots with both quantity and weight. + (01)03287890001332(10)92404603(17)240304(3103)001500(37)5 + - (01) 03287890001332: product barcode; + - (10) 92404603: tracking number; + - (17) 240304: expiration date (4th March 2024); + - (3103) 001500: 1.5 kg -> Should be ignored; + - (37) 5: 5 units -> Should be used as the line quantity. + */ + { + trigger: ".o_barcode_client_action", + run: "scan 01032878900013321092404603\x1D172403043103001500375" + }, + { trigger: ".o_toggle_sublines .fa-caret-down" }, + { + trigger: ".o_toggle_sublines .fa-caret-up", + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(2); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["100005", "92404603"]); + helper.assertLineQty(sublines[0], "6 Units"); + helper.assertLineQty(sublines[1], "5 Units"); + } + }, + // Same scenario but with scanning the packaging instead of the product, the weight should + // still be ignored but the scanned quantity should multiply the packaging quantity. + { + trigger: ".o_barcode_client_action", + run: "scan 011034754301133710123456\x1D172403043103001500375" + }, + { + trigger: ".o_barcode_line:nth-child(3)", + run: function() { + helper.assertLinesCount(1); + helper.assertSublinesCount(3); + const sublines = helper.getSublines(); + helper.assertLinesTrackingNumbers(sublines, ["100005", "92404603", "123456"]); + helper.assertLineQty(sublines[0], "6 Units"); + helper.assertLineQty(sublines[1], "5 Units"); + // Package qty: 6; scanned qty: 5 -> Line qty = 6 x 5 = 30. + helper.assertLineQty(sublines[2], "30 Units"); + } + }, +]}); + +registry.category("web_tour.tours").add('test_gs1_tracked_packaging', {test: true, steps: () => [ + // Create a receipt and check non-existing lot is correctly scanned alongside the packaging. + { trigger: '.o_stock_barcode_main_menu', run: "scan WH-RECEIPTS" }, + { trigger: '.o_barcode_client_action', run: "scan 020000001265325610lot-001" }, + { + trigger: '.o_barcode_line', + run: () => { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "productlot1" }); + helper.assertLineQty(line, "6", "Scanned packaging has quantity of 6"); + helper.assertLineProduct(line, "productlot1"); + helper.assertLinesTrackingNumbers([line], ["lot-001"]); + }, + }, + { trigger: '.o_validate_page' }, + + // Create a delivery and check existing lot is correctly found alongside the packaging. + { trigger: '.o_stock_barcode_main_menu', run: "scan WH-DELIVERY" }, + { trigger: '.o_barcode_client_action', run: "scan 020000001265325610lot-001" }, + { + trigger: '.o_barcode_line', + run: () => { + helper.assertLinesCount(1); + const line = helper.getLine({ barcode: "productlot1" }); + helper.assertLineQty(line, "6", "Scanned packaging has quantity of 6"); + helper.assertLineProduct(line, "productlot1"); + helper.assertLinesTrackingNumbers([line], ["lot-001"]); + }, + }, + { trigger: '.o_validate_page' }, + { trigger: '.o_notification.border-success', isCheck: true }, +]}); diff --git a/stock_barcode/static/tests/units/stock_mobile_picking_barcode_tests.js b/stock_barcode/static/tests/units/stock_mobile_picking_barcode_tests.js new file mode 100644 index 0000000..7fc6418 --- /dev/null +++ b/stock_barcode/static/tests/units/stock_mobile_picking_barcode_tests.js @@ -0,0 +1,73 @@ +/** @odoo-module **/ + +import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; +import * as BarcodeScanner from "@web/webclient/barcode/barcode_scanner"; +import { destroy, getFixture, patchWithCleanup } from "@web/../tests/helpers/utils"; + +QUnit.module('stock_mobile_barcode', {}, function () { + +QUnit.module('Barcode', { + beforeEach: function () { + var self = this; + + this.clientData = { + action: { + tag: 'stock_barcode_client_action', + type: 'ir.actions.client', + res_model: "stock.picking", + context: {}, + }, + currentState: { + actions: {}, + data: { + records: { + 'barcode.nomenclature': [{ + id: 1, + rule_ids: [], + }], + 'stock.location': [], + 'stock.move.line': [], + 'stock.picking': [], + }, + nomenclature_id: 1, + }, + groups: {}, + }, + }; + this.mockRPC = function (route, args) { + if (route === '/stock_barcode/get_barcode_data') { + return Promise.resolve(self.clientData.currentState); + } else if (route === '/stock_barcode/static/img/barcode.svg') { + return Promise.resolve(); + } + }; + } +}); + +QUnit.test('scan barcode button in mobile device', async function (assert) { + assert.expect(1); + const pickingRecord = { + id: 2, + state: 'done', + move_line_ids: [], + }; + this.clientData.action.context.active_id = pickingRecord.id; + this.clientData.currentState.data.records['stock.picking'].push(pickingRecord); + this.clientData.currentState.groups.group_stock_multi_locations = false; + + patchWithCleanup(BarcodeScanner, { + isBarcodeScannerSupported: () => true, + scanBarcode: async () => {}, + }); + + const target = getFixture(); + + const webClient = await createWebClient({ + mockRPC: this.mockRPC, + }); + await doAction(webClient, this.clientData.action); + assert.containsOnce(target, '.o_stock_mobile_barcode'); + destroy(webClient); +}); + +}); diff --git a/stock_barcode/static/tests/units/stock_picking_barcode_tests.js b/stock_barcode/static/tests/units/stock_picking_barcode_tests.js new file mode 100644 index 0000000..70315c7 --- /dev/null +++ b/stock_barcode/static/tests/units/stock_picking_barcode_tests.js @@ -0,0 +1,63 @@ +/** @odoo-module **/ + +import { createWebClient, doAction } from "@web/../tests/webclient/helpers"; +import { getFixture } from "@web/../tests/helpers/utils"; + +QUnit.module('stock_barcode', {}, function () { + +QUnit.module('Barcode', { + beforeEach: function () { + var self = this; + + this.clientData = { + action: { + tag: 'stock_barcode_client_action', + type: 'ir.actions.client', + res_model: "stock.picking", + context: {}, + }, + currentState: { + actions: {}, + data: { + records: { + 'barcode.nomenclature': [{ + id: 1, + rule_ids: [], + }], + 'stock.location': [], + 'stock.move.line': [], + 'stock.picking': [], + }, + nomenclature_id: 1, + }, + groups: {}, + }, + }; + this.mockRPC = function (route, args) { + if (route === '/stock_barcode/get_barcode_data') { + return Promise.resolve(self.clientData.currentState); + } else if (route === '/stock_barcode/static/img/barcode.svg') { + return Promise.resolve(); + } + }; + } +}); + +QUnit.test('exclamation-triangle when picking is done', async function (assert) { + assert.expect(1); + const pickingRecord = { + id: 2, + state: 'done', + move_line_ids: [], + }; + this.clientData.action.context.active_id = pickingRecord.id; + this.clientData.currentState.data.records['stock.picking'].push(pickingRecord); + const target = getFixture(); + const webClient = await createWebClient({ + mockRPC: this.mockRPC, + }); + await doAction(webClient, this.clientData.action); + assert.containsOnce(target, '.fa-5x.fa-exclamation-triangle:not(.d-none)', "Should have warning icon"); +}); + +}); diff --git a/stock_barcode/tests/__init__.py b/stock_barcode/tests/__init__.py new file mode 100644 index 0000000..c118503 --- /dev/null +++ b/stock_barcode/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +from . import test_barcode +from . import test_barcode_client_action +from . import test_barcode_client_action_inventory +from . import test_barcode_client_action_picking +from . import test_controller diff --git a/stock_barcode/tests/test_barcode.py b/stock_barcode/tests/test_barcode.py new file mode 100644 index 0000000..5d6b656 --- /dev/null +++ b/stock_barcode/tests/test_barcode.py @@ -0,0 +1,246 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import HttpCase, tagged + + +@tagged('-at_install', 'post_install') +class TestBarcodeClientAction(HttpCase): + def test_filter_picking_by_product_gs1(self): + """ Checks if a product is searched with a complete GS1 barcode, the + product data is correctly retrieved and the search operates only on the + product's part of the GS1 barcode. Also, checks a product can still be + searched by its raw barcode even if GS1 nomenclature is used. + """ + Product = self.env['product.product'] + product_category_all = self.env.ref('product.product_category_all') + # Creates three products. + product1 = Product.create({ + 'name': 'product1', + 'barcode': '01304510', + 'categ_id': product_category_all.id, + 'type': 'product', + }) + product2 = Product.create({ + 'name': 'product2', + 'barcode': '73411048', + 'categ_id': product_category_all.id, + 'type': 'product', + }) + product3 = Product.create({ + 'name': 'product3', + 'barcode': '00000073411048', # Ambiguous with the product2 barcode. + 'categ_id': product_category_all.id, + 'type': 'product', + }) + + # Searches while using the default barcode nomenclature. + product = Product.search([('barcode', '=', '01304510')]) + self.assertEqual(len(product), 1, "Product should be found when searching by its barcode") + self.assertEqual(product.id, product1.id) + product = Product.search([('barcode', '=', '0100000001304510')]) + self.assertEqual(len(product), 0, "Product shouldn't be found with GS1 barcode if GS1 nomenclature is inactive") + + # Searches while using the GS1 barcode nomenclature. + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + for operator in ['=', 'ilike']: + product = Product.search([('barcode', operator, '01304510')]) + self.assertEqual(len(product), 1, "Product should still be found when searching by its raw barcode even if GS1 nomenclature is active") + self.assertEqual(product.id, product1.id) + product = Product.search([('barcode', operator, '300005\x1D0100000001304510')]) + self.assertEqual(len(product), 1, "Product should be found when scanning a GS1 barcode containing its data") + self.assertEqual(product.id, product1.id) + product = Product.search([('barcode', operator, '0100000001304510\x1Dt00.d4r|<')]) + self.assertEqual(len(product), 0, "No products should be found because of invalid GS1 barcode") + product = Product.search([('barcode', operator, '0100000073411048')]) + self.assertEqual(len(product), 2, "Should found two products because of the ambiguity") + self.assertEqual(product.ids, [product2.id, product3.id]) + + # Checks search for all products except one from a GS1 barcode is workking as expected. + for operator in ['!=', 'not ilike']: + products = Product.search([('barcode', operator, '01304510')]) + self.assertFalse(product1 in products) + self.assertTrue(product2 in products and product3 in products) + products = Product.search([('barcode', operator, '300005\x1D0100000001304510')]) + self.assertFalse(product1 in products) + self.assertTrue(product2 in products and product3 in products) + products = Product.search([('barcode', operator, '00000073411048')]) + self.assertTrue(product1 in products) + self.assertFalse(product2 in products, "product2 shouldn't be found due to unpadding of the barcode implied in the search") + self.assertFalse(product3 in products) + products = Product.search([('barcode', operator, '0100000073411048300005')]) + self.assertTrue(product1 in products) + self.assertFalse(product2 in products or product3 in products) + + def test_filter_picking_by_package_gs1(self): + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(3, grp_pack.id)]}) + + Package = self.env['stock.quant.package'] + # Creates three packages. + package1 = Package.create({ + 'name': '1234560000000018', + }) + package2 = Package.create({ + 'name': '7189085627231896', + }) + package3 = Package.create({ + 'name': '007189085627231896', # Ambiguous with the package2 barcode. + }) + + # Searches while using the default barcode nomenclature. + self.env.company.nomenclature_id = self.env.ref('barcodes.default_barcode_nomenclature') + package = Package.search([('name', '=', '1234560000000018')]) + self.assertEqual(len(package), 1, "Package should be found when searching by its barcode") + self.assertEqual(package.id, package1.id) + package = Package.search([('name', '=', '00007189085627231896')]) + self.assertFalse(package, "Package shouldn't be found with GS1 barcode if GS1 nomenclature is inactive") + + # Searches while using the GS1 barcode nomenclature. + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + for operator in ['=', 'ilike']: + package = Package.search([('name', operator, '1234560000000018')]) + self.assertEqual(len(package), 1, "Package should still be found when searching by its raw barcode even if GS1 nomenclature is active") + self.assertEqual(package.id, package1.id) + package = Package.search([('name', operator, '300005\x1D00001234560000000018')]) + self.assertEqual(len(package), 1, "Package should be found when scanning a GS1 barcode containing its data") + self.assertEqual(package.id, package1.id) + package = Package.search([('name', operator, '00007189085627231896\x1Dt00.d4r|<')]) + self.assertEqual(len(package), 0, "No package should be found because of invalid GS1 barcode") + package = Package.search([('name', operator, '00007189085627231896')]) + self.assertEqual(len(package), 2, "Should found two packages because of the ambiguity") + self.assertTrue(package.ids, (package2 | package3).ids) + + # Checks search for all packages except one from a GS1 barcode is workking as expected. + for operator in ['!=', 'not ilike']: + packages = Package.search([('name', operator, '1234560000000018')]) + self.assertFalse(package1 in packages) + self.assertTrue(packages.ids, (package2 | package3).ids) + packages = Package.search([('name', operator, '300005\x1D00001234560000000018')]) + self.assertFalse(package1 in packages) + self.assertTrue(packages.ids, (package2 | package3).ids) + packages = Package.search([('name', operator, '007189085627231896')]) + self.assertTrue(package1 in packages) + self.assertFalse(package2 in packages, "package2 shouldn't be found due to unpadding of the barcode implied in the search") + self.assertFalse(package3 in packages) + package = Package.search([('name', operator, '00007189085627231896')]) + self.assertTrue(package1 in packages) + self.assertFalse(package2 in packages or package3 in packages) + + def test_filter_picking_by_location_gs1(self): + Location = self.env['stock.location'] + # Creates three locations. + location1 = Location.create({ + 'name': 'loc1', + 'barcode': '5055218716187', + }) + location2 = Location.create({ + 'name': 'loc2', + 'barcode': '614141000531', + }) + location3 = Location.create({ + 'name': 'loc3', + 'barcode': '0614141000531', # Ambiguous with the package2 barcode. + }) + + # Searches while using the default barcode nomenclature. + self.env.company.nomenclature_id = self.env.ref('barcodes.default_barcode_nomenclature') + location = Location.search([('barcode', '=', '5055218716187')]) + self.assertEqual(len(location), 1, "Location should be found when searching by its barcode") + self.assertEqual(location.id, location1.id) + package = Location.search([('name', '=', '4100614141000531')]) + self.assertFalse(package, "Package shouldn't be found with GS1 barcode if GS1 nomenclature is inactive") + + # Searches while using the GS1 barcode nomenclature. + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + for operator in ['=', 'ilike']: + location = Location.search([('barcode', operator, '5055218716187')]) + self.assertEqual(len(location), 1, "Location should still be found when searching by its raw barcode even if GS1 nomenclature is active") + self.assertEqual(location.id, location1.id) + location = Location.search([('barcode', operator, '300005\x1D4145055218716187')]) + self.assertEqual(len(location), 1, "Location should be found when scanning a GS1 barcode containing its data") + self.assertEqual(location.id, location1.id) + location = Location.search([('barcode', operator, '4100614141000531\x1Dt00.d4r|<')]) + self.assertEqual(len(location), 0, "No location should be found because of invalid GS1 barcode") + location = Location.search([('barcode', operator, '4100614141000531')]) + self.assertEqual(len(location), 2, "Should found two locations because of the ambiguity") + self.assertTrue(location.ids, (location2 | location3).ids) + + # Checks search for all locations except one from a GS1 barcode is workking as expected. + for operator in ['!=', 'not ilike']: + locations = Location.search([('barcode', operator, '5055218716187')]) + self.assertFalse(location1 in locations) + self.assertTrue(location2.id in locations.ids and location3.id in locations.ids) + locations = Location.search([('barcode', operator, '300005\x1D4145055218716187')]) + self.assertFalse(location1 in locations) + self.assertTrue(location2.id in locations.ids and location3.id in locations.ids) + locations = Location.search([('barcode', operator, '0614141000531')]) + self.assertTrue(location1 in locations) + self.assertFalse(location2 in locations, "location2 shouldn't be found due to unpadding of the barcode implied in the search") + self.assertFalse(location3 in locations) + locations = Location.search([('barcode', operator, '4100614141000531')]) + self.assertTrue(location1 in locations) + self.assertFalse(location2 in locations or location3 in locations) + + def test_searching_lot_gs1(self): + """ Checks if a lot is searched with a complete GS1 barcode, the + lot data is correctly retrieved and the search operates only on the + lot's part of the GS1 barcode. Also, checks a lot can still be + searched by its raw barcode even if GS1 nomenclature is used. + """ + product = self.env['product.product'].create({ + 'name': 'product1', + 'type': 'product', + 'tracking': 'lot', + }) + # create 2 lots + lot1 = self.env['stock.lot'].create({ + 'name': 'lot1', + 'product_id': product.id, + 'company_id': self.env.company.id, + }) + lot2 = self.env['stock.lot'].create({ + 'name': 'lot2', + 'product_id': product.id, + 'company_id': self.env.company.id, + }) + lot3 = self.env['stock.lot'].create({ + 'name': '0000lot2', + 'product_id': product.id, + 'company_id': self.env.company.id, + }) + + + # Searches while using the default barcode nomenclature. + lot = self.env['stock.lot'].search([('name', '=', 'lot1')]) + self.assertEqual(len(lot), 1, "Lot should be found when searching by its barcode") + self.assertEqual(lot.id, lot1.id) + lot = self.env['stock.lot'].search([('name', '=', '01lot1')]) + self.assertEqual(len(lot), 0, "Lot shouldn't be found with GS1 barcode if GS1 nomenclature is inactive") + + # Searches while using the GS1 barcode nomenclature. + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + for operator in ['=', 'ilike']: + lot = self.env['stock.lot'].search([('name', operator, '10lot1')]) + self.assertEqual(len(lot), 1, "Lot should still be found when searching by its raw barcode even if GS1 nomenclature is active") + self.assertEqual(lot.id, lot1.id) + lot = self.env['stock.lot'].search([('name', operator, '300005\x1D10lot1')]) + self.assertEqual(len(lot), 1, "Lot should be found when scanning a GS1 barcode containing its data") + self.assertEqual(lot.id, lot1.id) + lot = self.env['stock.lot'].search([('name', operator, '1000000010304510\x1Dt00.d4r|<')]) + self.assertEqual(len(lot), 0, "No lots should be found because of invalid GS1 barcode") + lot = self.env['stock.lot'].search([('name', operator, '100000lot2')]) + self.assertEqual(len(lot), 1, "Should found only one lot because of the ambiguity") + self.assertEqual(lot.ids, [lot3.id]) + + # Checks search for all lots except one from a GS1 barcode is working as expected. + for operator in ['!=', 'not ilike']: + lots = self.env['stock.lot'].search([('name', operator, '10lot1')]) + self.assertFalse(lot1 in lots) + self.assertTrue(lot2 in lots and lot3 in lots) + lots = self.env['stock.lot'].search([('name', operator, '300005\x1D10000000lot1')]) + self.assertTrue(lot1 in lots and lot2 in lots and lot3 in lots, "Should found all lots because lot are not trimmed") + lots = self.env['stock.lot'].search([('name', operator, 'lot2')]) + self.assertTrue(lot1 in lots) + self.assertFalse(lot2 in lots, "lot2 shouldn't be found due to unpadding of the barcode implied in the search") + lots = self.env['stock.lot'].search([('name', operator, '10lot2300005')]) + self.assertTrue(lot1 in lots and lot2 in lots, "Lot lenght is variable so we can't trim it") diff --git a/stock_barcode/tests/test_barcode_client_action.py b/stock_barcode/tests/test_barcode_client_action.py new file mode 100644 index 0000000..c834bd4 --- /dev/null +++ b/stock_barcode/tests/test_barcode_client_action.py @@ -0,0 +1,117 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import HttpCase, tagged + + +@tagged('-at_install', 'post_install') +class TestBarcodeClientAction(HttpCase): + def setUp(self): + super(TestBarcodeClientAction, self).setUp() + # Disables the sound effect so we don't go crazy while running the test tours locally. + self.env['ir.config_parameter'].set_param('stock_barcode.mute_sound_notifications', True) + + self.uid = self.env.ref('base.user_admin').id + self.supplier_location = self.env.ref('stock.stock_location_suppliers') + self.stock_location = self.env.ref('stock.stock_location_stock') + self.stock_location.write({ + 'barcode': 'LOC-01-00-00', + }) + self.customer_location = self.env.ref('stock.stock_location_customers') + self.pack_location = self.env.ref('stock.location_pack_zone') + self.shelf3 = self.env['stock.location'].create({ + 'name': 'Section 3', + 'location_id': self.stock_location.id, + 'barcode': 'shelf3', + }) + self.shelf1 = self.env["stock.location"].create({ + 'name': 'Section 1', + 'location_id': self.env.ref('stock.warehouse0').lot_stock_id.id, + 'barcode': 'LOC-01-01-00', + }) + self.shelf2 = self.env['stock.location'].create({ + 'name': 'Section 2', + 'location_id': self.env.ref('stock.warehouse0').lot_stock_id.id, + 'barcode': 'LOC-01-02-00', + }) + self.shelf4 = self.env['stock.location'].create({ + 'name': 'Section 4', + 'location_id': self.stock_location.id, + 'barcode': 'shelf4', + }) + self.picking_type_in = self.env.ref('stock.picking_type_in') + self.picking_type_internal = self.env.ref('stock.picking_type_internal') + self.picking_type_out = self.env.ref('stock.picking_type_out') + + self.uom_unit = self.env.ref('uom.product_uom_unit') + self.uom_dozen = self.env.ref('uom.product_uom_dozen') + + # Two stockable products without tracking + self.product1 = self.env['product.product'].create({ + 'name': 'product1', + 'default_code': 'TEST', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product1', + }) + self.product2 = self.env['product.product'].create({ + 'name': 'product2', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product2', + }) + self.productserial1 = self.env['product.product'].create({ + 'name': 'productserial1', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'productserial1', + 'tracking': 'serial', + }) + self.productlot1 = self.env['product.product'].create({ + 'name': 'productlot1', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'productlot1', + 'tracking': 'lot', + }) + self.package = self.env['stock.quant.package'].create({ + 'name': 'P00001', + }) + self.owner = self.env['res.partner'].create({ + 'name': 'Azure Interior', + }) + + # Creates records specific to GS1 use cases. + self.product_tln_gtn8 = self.env['product.product'].create({ + 'name': 'Battle Droid', + 'default_code': 'B1', + 'type': 'product', + 'tracking': 'lot', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '76543210', # (01)00000076543210 (GTIN-8 format) + 'uom_id': self.env.ref('uom.product_uom_unit').id + }) + + self.call_count = 0 + + def clean_access_rights(self): + """ Removes all access right link to stock application to the users + given as parameter""" + grp_lot = self.env.ref('stock.group_production_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_uom = self.env.ref('uom.group_uom') + self.env.user.write({'groups_id': [(3, grp_lot.id)]}) + self.env.user.write({'groups_id': [(3, grp_multi_loc.id)]}) + self.env.user.write({'groups_id': [(3, grp_pack.id)]}) + # Explicitly remove the UoM group. + group_user = self.env.ref('base.group_user') + group_user.write({'implied_ids': [(3, grp_uom.id)]}) + self.env.user.write({'groups_id': [(3, grp_uom.id)]}) + + def tearDown(self): + self.call_count = 0 + super(TestBarcodeClientAction, self).tearDown() + + def _get_client_action_url(self, picking_id): + action = self.env["ir.actions.actions"]._for_xml_id("stock_barcode.stock_barcode_picking_client_action") + return '/web#action=%s&active_id=%s' % (action['id'], picking_id) diff --git a/stock_barcode/tests/test_barcode_client_action_inventory.py b/stock_barcode/tests/test_barcode_client_action_inventory.py new file mode 100644 index 0000000..0b59a31 --- /dev/null +++ b/stock_barcode/tests/test_barcode_client_action_inventory.py @@ -0,0 +1,559 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import logging + +from odoo import fields +from odoo.tests import tagged, loaded_demo_data +from odoo.addons.stock_barcode.tests.test_barcode_client_action import TestBarcodeClientAction + +_logger = logging.getLogger(__name__) + + +@tagged('post_install', '-at_install') +class TestInventoryAdjustmentBarcodeClientAction(TestBarcodeClientAction): + def test_inventory_adjustment(self): + """ Simulate the following actions: + - Open the inventory from the barcode app. + - Scan twice the product 1. + - Edit the line. + - Add a product with the form view. + - Validate + """ + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_adjustment', login='admin', timeout=180) + + inventory_moves = self.env['stock.move'].search([('product_id', 'in', [self.product1.id, self.product2.id]), + ('is_inventory', '=', True)]) + self.assertEqual(len(inventory_moves), 2) + self.assertEqual(inventory_moves.mapped('quantity'), [2.0, 2.0]) + self.assertEqual(inventory_moves.mapped('state'), ['done', 'done']) + + quants = self.env['stock.quant'].search([('product_id', 'in', [self.product1.id, self.product2.id]), + ('location_id.usage', '=', 'internal')]) + self.assertEqual(quants.mapped('quantity'), [2.0, 2.0]) + self.assertEqual(quants.mapped('inventory_quantity'), [0, 0]) + self.assertEqual(quants.mapped('inventory_diff_quantity'), [0, 0]) + + def test_inventory_adjustment_dont_update_location(self): + """ Ensures the existing quants location cannot be update.""" + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + # Adds some quants and request a count. + # Adds quants for the same product in two locations. + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 5) + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf2, 5) + # Marks them as to count by the user. + quants = self.env['stock.quant'].search([('product_id', '=', self.product1.id)]) + quants.user_id = self.env.user + quants.inventory_quantity_set = True + quants.inventory_date = fields.Date.today() + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_inventory_adjustment_dont_update_location', login='admin', timeout=180) + quants = self.env['stock.quant'].search([ + ('product_id', '=', self.product1.id), + ('location_id.usage', '=', 'internal'), + ]) + self.assertRecordValues(quants, [ + {'location_id': self.stock_location.id, 'quantity': 1}, + {'location_id': self.shelf2.id, 'quantity': 0}, + {'location_id': self.shelf1.id, 'quantity': 1}, + ]) + + def test_inventory_adjustment_multi_company(self): + """ When doing an Inventory Adjustment, ensures only products belonging + to current company or to no company can be scanned.""" + self.clean_access_rights() + # Creates two companies and assign them to the user. + company_a = self.env['res.company'].create({'name': 'Comp A - F2 FTW'}) + company_b = self.env['res.company'].create({'name': 'Comp B - F3 Wee-Wee Pool'}) + self.env.user.write({ + 'company_ids': [(4, company_a.id), (4, company_b.id)], + 'company_id': company_a.id, + }) + # Changes the company of some products. + self.product1.company_id = company_a + self.product2.company_id = company_b + product_no_company = self.env['product.product'].create({ + 'name': 'Company-less Product', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product_no_company', + }) + self.start_tour("/web", 'test_inventory_adjustment_multi_company', login='admin', timeout=180) + # Checks an inventory adjustment was correctly validated for each company. + inventory_moves = self.env['stock.move'].search([ + ('is_inventory', '=', True), + ('product_id', 'in', (self.product1 | self.product2 | product_no_company).ids), + ]) + self.assertRecordValues(inventory_moves.sorted(lambda mv: (mv.product_id.id, mv.id)), [ + {'product_id': self.product1.id, 'quantity': 1, 'company_id': company_a.id}, + {'product_id': self.product2.id, 'quantity': 1, 'company_id': company_b.id}, + {'product_id': product_no_company.id, 'quantity': 1, 'company_id': company_a.id}, + {'product_id': product_no_company.id, 'quantity': 1, 'company_id': company_b.id}, + ]) + + def test_inventory_adjustment_multi_location(self): + """ Simulate the following actions: + - Generate those lines with scan: + WH/stock product1 qty: 2 + WH/stock product2 qty: 1 + WH/stock/shelf1 product2 qty: 1 + WH/stock/shelf2 product1 qty: 1 + - Validate + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_adjustment_multi_location', login='admin', timeout=180) + + inventory_moves = self.env['stock.move'].search([('product_id', 'in', [self.product1.id, self.product2.id]), + ('is_inventory', '=', True)]) + self.assertEqual(len(inventory_moves), 4) + self.assertEqual(inventory_moves.mapped('state'), ['done', 'done', 'done', 'done']) + inventory_move_in_WH_stock = inventory_moves.filtered(lambda l: l.location_dest_id == self.stock_location) + self.assertEqual(set(inventory_move_in_WH_stock.mapped('product_id')), {self.product1, self.product2}) + self.assertEqual(inventory_move_in_WH_stock.filtered(lambda l: l.product_id == self.product1).quantity, 2.0) + self.assertEqual(inventory_move_in_WH_stock.filtered(lambda l: l.product_id == self.product2).quantity, 1.0) + + inventory_move_in_shelf1 = inventory_moves.filtered(lambda l: l.location_dest_id == self.shelf1) + self.assertEqual(len(inventory_move_in_shelf1), 1) + self.assertEqual(inventory_move_in_shelf1.product_id, self.product2) + self.assertEqual(inventory_move_in_shelf1.quantity, 1.0) + + inventory_move_in_shelf2 = inventory_moves.filtered(lambda l: l.location_dest_id == self.shelf2) + self.assertEqual(len(inventory_move_in_shelf2), 1) + self.assertEqual(inventory_move_in_shelf2.product_id, self.product1) + self.assertEqual(inventory_move_in_shelf2.quantity, 1.0) + + def test_inventory_adjustment_tracked_product(self): + """ Simulate the following actions: + - Generate those lines with scan: + productlot1 with a lot named lot1 (qty 2) + productserial1 with serial1 (qty 1) + productserial1 with serial2 (qty 1) + productserial1 with serial3 (qty 1) + productserial1 without serial (qty 1) + productlot1 with a lot named lot2 (qty 1) + productlot1 with a lot named lot3 (qty 1) + - Validate + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_adjustment_tracked_product', login='admin', timeout=180) + + inventory_moves = self.env['stock.move'].search([('product_id', 'in', [self.productlot1.id, self.productserial1.id]), + ('is_inventory', '=', True)]) + self.assertEqual(len(inventory_moves), 7) + self.assertTrue(all(s == 'done' for s in inventory_moves.mapped('state'))) + + moves_with_lot = inventory_moves.filtered(lambda l: l.product_id == self.productlot1) + moves_with_sn = inventory_moves.filtered(lambda l: l.product_id == self.productserial1) + mls_with_lot = moves_with_lot.move_line_ids + mls_with_sn = moves_with_sn.move_line_ids + self.assertEqual(len(mls_with_lot), 3) + self.assertEqual(len(mls_with_sn), 4) + self.assertEqual(mls_with_lot.mapped('lot_id.name'), ['lot1', 'lot2', 'lot3']) + self.assertEqual(mls_with_lot.filtered(lambda ml: ml.lot_id.name == 'lot1').qty_done, 3) + self.assertEqual(mls_with_lot.filtered(lambda ml: ml.lot_id.name == 'lot2').qty_done, 1) + self.assertEqual(mls_with_lot.filtered(lambda ml: ml.lot_id.name == 'lot3').qty_done, 1) + self.assertEqual(set(mls_with_sn.mapped('lot_id.name')), {'serial1', 'serial2', 'serial3'}) + + def test_inventory_adjustment_tracked_product_multilocation(self): + """ This test ensures two things: + - When the user has to count the same lot from multiple locations, the right line will be + incremented when they scan the lot's barcode, depending of the previous scanned location. + - When scanning a tracked product, if this product alread has quants, it will retrieve and + create a barcode line for each quant. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + # Adds some quants for the product tracked by lots in two locations. + lot_default_values = {'product_id': self.productlot1.id, 'company_id': self.env.company.id} + lot_1 = self.env['stock.lot'].create(dict(lot_default_values, name="lot1")) + self.env['stock.quant']._update_available_quantity(self.productlot1, self.shelf1, 3, lot_id=lot_1) + self.env['stock.quant']._update_available_quantity(self.productlot1, self.shelf2, 5, lot_id=lot_1) + # Marks them as to count by the user. + quants = self.env['stock.quant'].search([('product_id', '=', self.productlot1.id)]) + quants.user_id = self.env.user + quants.inventory_quantity_set = True + quants.inventory_date = fields.Date.today() + quants[0].inventory_quantity = 3 + quants[1].inventory_quantity = 0 + # Adds some quants for the product tracked by serial numbers in two locations. + serial_default_values = {'product_id': self.productserial1.id, 'company_id': self.env.company.id} + for location, numbers in [(self.shelf1, [1, 2, 3]), (self.shelf3, [4, 5])]: + for n in numbers: + serial_number = self.env['stock.lot'].create(dict(serial_default_values, name=f'sn{n}')) + self.env['stock.quant']._update_available_quantity(self.productserial1, location, 1, lot_id=serial_number) + # Opens the inventory adjustement and process it. + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = f"/web#action={action_id.id}" + self.start_tour(url, "test_inventory_adjustment_tracked_product_multilocation", login="admin", timeout=180) + + def test_inventory_adjustment_tracked_product_permissive_quants(self): + """Make an inventory adjustment for a product tracked by lot having quants without lot. + The following actions are made in the barcode app: + - Scan productlot1 + - Scan lot1 twice + - Set productlot1 quantity without lot to available + - Validate + """ + if not loaded_demo_data(self.env): + _logger.warning("This test relies on demo data. To be rewritten independently of demo data for accurate and reliable results.") + return + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + self.env["stock.lot"].create({ + 'name': 'lot1', + 'product_id': self.productlot1.id, + 'company_id': self.env.company.id + }) + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 5) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_adjustment_tracked_product_permissive_quants', login='admin', timeout=180) + + inventory_moves = self.env['stock.move'].search([('product_id', '=', self.productlot1.id), + ('is_inventory', '=', True)]) + self.assertEqual(len(inventory_moves), 2) + self.assertEqual(inventory_moves.mapped('state'), ['done', 'done']) + self.assertEqual(inventory_moves.mapped('product_id'), self.productlot1) + + self.assertEqual(len(inventory_moves.move_line_ids), 2) + move_line_1, move_line_2 = inventory_moves.move_line_ids + self.assertEqual(move_line_1.qty_done, 0) + self.assertEqual(move_line_2.lot_id.name, 'lot1') + self.assertEqual(move_line_2.qty_done, 2) + + def test_inventory_create_quant(self): + """ Creates a quant and checks it will not be deleted until the inventory was validated. + """ + self.clean_access_rights() + Quant = self.env['stock.quant'] + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_inventory_create_quant', login='admin', timeout=180) + + Quant._unlink_zero_quants() + product1_quant = Quant.search([('product_id', '=', self.product1.id)]) + self.assertEqual(len(product1_quant), 1) + self.assertEqual(product1_quant.inventory_quantity, 0.0) + + # Validates the inventory, then checks there is no 0 qty quant. + product1_quant.action_validate() + Quant.invalidate_model() # Updates the cache. + Quant._unlink_zero_quants() + product1_quant = Quant.search([('product_id', '=', self.product1.id)]) + self.assertEqual(len(product1_quant), 0) + + def test_inventory_nomenclature(self): + """ Simulate scanning a product and its weight + thanks to the barcode nomenclature """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes.default_barcode_nomenclature') + + product_weight = self.env['product.product'].create({ + 'name': 'product_weight', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '2145631000000', + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_nomenclature', login='admin', timeout=180) + quantity = self.env['stock.move.line'].search([ + ('product_id', '=', product_weight.id), + ('state', '=', 'done'), + ('location_id', '=', product_weight.property_stock_inventory.id), + ]) + + self.assertEqual(quantity.qty_done, 12.35) + + def test_inventory_package(self): + """ Simulate an adjustment where a package is scanned and edited """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + pack = self.env['stock.quant.package'].create({ + 'name': 'PACK001', + }) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 7, package_id=pack) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 3, package_id=pack) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, "test_inventory_package", login="admin", timeout=180) + + # Check the package is updated after adjustment + self.assertDictEqual( + {q.product_id: q.quantity for q in pack.quant_ids}, + {self.product1: 7, self.product2: 21} + ) + + def test_inventory_packaging(self): + """ Scans a product's packaging and ensures its quantity is correctly + counted regardless if there is already products in stock or not. + """ + self.clean_access_rights() + grp_pack = self.env.ref('product.group_stock_packaging') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + self.env['product.packaging'].create({ + 'name': 'product1 x15', + 'qty': 15, + 'barcode': 'pack007', + 'product_id': self.product1.id + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_inventory_packaging', login='admin', timeout=180) + + def test_inventory_owner_scan_package(self): + group_owner = self.env.ref('stock.group_tracking_owner') + group_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, group_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, group_owner.id, 0)]}) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 7, package_id=self.package, owner_id=self.owner) + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_owner_scan_package', login='admin', timeout=180) + + inventory_moves = self.env['stock.move'].search([('product_id', '=', self.product1.id), ('is_inventory', '=', True)]) + self.assertEqual(len(inventory_moves), 1) + self.assertEqual(inventory_moves.state, 'done') + self.assertEqual(inventory_moves.move_line_ids.owner_id.id, self.owner.id) + + def test_inventory_using_buttons(self): + """ Creates an inventory from scratch, then scans products and verifies + the buttons behavior is right. + """ + self.clean_access_rights() + # Adds some quantities for product2. + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 10) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_inventory_using_buttons', login='admin', timeout=180) + product1_quant = self.env['stock.quant'].search([ + ('product_id', '=', self.product1.id), + ('quantity', '>', 0) + ]) + self.assertEqual(len(product1_quant), 1) + self.assertEqual(product1_quant.quantity, 1.0) + self.assertEqual(product1_quant.location_id.id, self.stock_location.id) + + productlot1_quant = self.env['stock.quant'].search([ + ('product_id', '=', self.productlot1.id), + ('quantity', '>', 0) + ]) + self.assertEqual(len(product1_quant), 1) + self.assertEqual(productlot1_quant.quantity, 1.0) + self.assertEqual(productlot1_quant.lot_id.name, 'toto-42') + self.assertEqual(productlot1_quant.location_id.id, self.stock_location.id) + + def test_gs1_inventory_gtin_8(self): + """ Simulate scanning a product with his gs1 barcode """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + + product = self.env['product.product'].create({ + 'name': 'PRO_GTIN_8', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '82655853', # GTIN-8 format + 'uom_id': self.env.ref('uom.product_uom_unit').id + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_gs1_inventory_gtin_8', login='admin', timeout=180) + + # Checks the inventory adjustment correclty created a move line. + move_line = self.env['stock.move.line'].search([ + ('product_id', '=', product.id), + ('state', '=', 'done'), + ('location_id', '=', product.property_stock_inventory.id), + ]) + self.assertEqual(move_line.qty_done, 78) + + def test_gs1_inventory_product_units(self): + """ Scans a product with a GS1 barcode containing multiple quantities.""" + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + + product = self.env['product.product'].create({ + 'name': 'PRO_GTIN_8', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '82655853', # GTIN-8 format + 'uom_id': self.env.ref('uom.product_uom_unit').id + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_gs1_inventory_product_units', login='admin', timeout=180) + + quantity = self.env['stock.move.line'].search([ + ('product_id', '=', product.id), + ('state', '=', 'done'), + ('location_id', '=', product.property_stock_inventory.id), + ]) + + self.assertEqual(quantity.qty_done, 102) + + def test_gs1_inventory_package(self): + """ Scans existing packages and checks their products are correclty added + to the inventory adjustment. Then scans some products, scans a new package + and checks the package was created and correclty assigned to those products. + """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + product = self.env['product.product'].create({ + 'name': 'PRO_GTIN_8', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '82655853', # GTIN-8 format + 'uom_id': self.env.ref('uom.product_uom_unit').id + }) + + # Creates a first package in Section 1 and adds some products. + pack_1 = self.env['stock.quant.package'].create({'name': '987654123487568456'}) + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 8, package_id=pack_1) + # Creates a second package in Section 2 and adds some other products. + pack_2 = self.env['stock.quant.package'].create({'name': '487325612456785124'}) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf2, 6, package_id=pack_2) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_gs1_inventory_package', login='admin', timeout=180) + + pack_3 = self.env['stock.quant.package'].search([('name', '=', '122333444455555670')]) + self.assertEqual(pack_3.location_id.id, self.shelf2.id) + self.assertEqual(pack_3.quant_ids.product_id.ids, [product.id]) + + def test_gs1_inventory_lot_serial(self): + """ Checks tracking numbers and quantites are correctly got from GS1 + barcodes for tracked products. + Also, this test is an opportunity to ensure custom GS1 separators are used clientside.""" + if not loaded_demo_data(self.env): + _logger.warning("This test relies on demo data. To be rewritten independently of demo data for accurate and reliable results.") + return + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + self.env.company.nomenclature_id.gs1_separator_fnc1 = r'(Alt029|#|\x1D|~)' + + product_lot = self.env['product.product'].create({ + 'name': 'PRO_GTIN_12_lot', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '111155555717', # GTIN-12 format + 'uom_id': self.env.ref('uom.product_uom_unit').id, + 'tracking': 'lot', + }) + + product_serial = self.env['product.product'].create({ + 'name': 'PRO_GTIN_14_serial', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '15222222222219', # GTIN-14 format + 'uom_id': self.env.ref('uom.product_uom_unit').id, + 'tracking': 'serial', + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_gs1_inventory_lot_serial', login='admin', timeout=180) + + smls_lot = self.env['stock.move.line'].search([ + ('product_id', '=', product_lot.id), + ('state', '=', 'done'), + ('location_id', '=', product_lot.property_stock_inventory.id), + ]) + self.assertEqual(len(smls_lot), 3) + self.assertEqual(smls_lot[0].qty_done, 10) + self.assertEqual(smls_lot[1].qty_done, 15) + self.assertEqual(smls_lot[2].qty_done, 20) + self.assertEqual( + smls_lot.lot_id.mapped('name'), + ['LOT-AAA', 'LOT-AAB', 'LOT-AAC'] + ) + + smls_serial = self.env['stock.move.line'].search([ + ('product_id', '=', product_serial.id), + ('state', '=', 'done'), + ('location_id', '=', product_serial.property_stock_inventory.id), + ]) + self.assertEqual(len(smls_serial), 5) + self.assertEqual(smls_serial[0].qty_done, 1) + self.assertEqual(smls_serial[1].qty_done, 1) + self.assertEqual(smls_serial[2].qty_done, 1) + self.assertEqual(smls_serial[3].qty_done, 20) + self.assertEqual(smls_serial[4].qty_done, 1) + self.assertEqual( + smls_serial.lot_id.mapped('name'), + ['Serial1', 'Serial2', 'Serial3', 'Serial4'] + ) + + def test_scan_product_lot_with_package(self): + """ + Check that a lot can be scanned in the inventory Adjustments, + when the package is set in the quant. + """ + # Enable the package option + self.env['res.config.settings'].create({'group_stock_tracking_lot': True}).execute() + product = self.env['product.product'].create({ + 'name': 'Product', + 'type': 'product', + 'tracking': 'lot', + }) + self.env["stock.quant"].create({ + 'product_id': product.id, + 'location_id': self.env.ref('stock.stock_location_stock').id, + 'quantity': 10, + 'package_id': self.env['stock.quant.package'].create({ + 'name': 'Package-test', + }).id, + 'lot_id': self.env['stock.lot'].create({ + 'name': 'Lot-test', + 'product_id': product.id, + 'company_id': self.env.company.id, + }).id, + }) + self.assertEqual(product.qty_available, 10) + self.start_tour("/web", 'stock_barcode_package_with_lot', login="admin") diff --git a/stock_barcode/tests/test_barcode_client_action_picking.py b/stock_barcode/tests/test_barcode_client_action_picking.py new file mode 100644 index 0000000..7eba2d7 --- /dev/null +++ b/stock_barcode/tests/test_barcode_client_action_picking.py @@ -0,0 +1,3426 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from unittest.mock import patch + +import odoo +from odoo import Command +from odoo.tests import Form, tagged +from odoo.addons.stock_barcode.tests.test_barcode_client_action import TestBarcodeClientAction + + +@tagged('post_install', '-at_install') +class TestPickingBarcodeClientAction(TestBarcodeClientAction): + def test_internal_picking_from_scratch(self): + """ Opens an empty internal picking and creates following move through the form view: + - move 2 `self.product1` from shelf1 to shelf2 + - move 1 `self.product2` from shelf1 to shelf3 + - move 1 `self.product2` from shelf1 to shelf2 + Then creates a fourth move by scanning product1 (from shelf1 to shelf3). + Counts the number of picking's write. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_internal.id, + }) + url = self._get_client_action_url(internal_picking.id) + + # Mock the calls to write and run the phantomjs script. + picking_write_orig = odoo.addons.stock.models.stock_picking.Picking.write + picking_button_validate_orig = odoo.addons.stock.models.stock_picking.Picking.button_validate + product1 = self.product1 + stock_location = self.stock_location + shelf1 = self.shelf1 + shelf3 = self.shelf3 + assertEqual = self.assertEqual + self1 = self + self1.stop_count_write = False + + def picking_write_mock(self, vals): + if self1.stop_count_write: + # Stops to count before `stock.picking` `button_validate` was called because + # that method and its overrides can call an unpredictable amount of write. + return picking_write_orig(self, vals) + self1.call_count += 1 + if self1.call_count == 1: # Open the edit form view for a line added by scanning its product. + cmd = vals['move_line_ids'][0] + write_vals = cmd[2] + assertEqual(cmd[0], 0) + assertEqual(cmd[1], 0) + assertEqual(write_vals['product_id'], product1.id) + assertEqual(write_vals['picking_id'], internal_picking.id) + assertEqual(write_vals['location_id'], shelf1.id) + assertEqual(write_vals['location_dest_id'], stock_location.id) + assertEqual(write_vals['quantity'], 1) + elif self1.call_count == 2: # Write before the validate. + cmd = vals['move_line_ids'][0] + write_vals = cmd[2] + assertEqual(cmd[0], 1) + assertEqual(write_vals['location_dest_id'], shelf3.id) + return picking_write_orig(self, vals) + + def picking_button_validate_mock(self): + self1.stop_count_write = True # Stops to count write once validate is called. + return picking_button_validate_orig(self) + + with patch('odoo.addons.stock.models.stock_picking.Picking.write', new=picking_write_mock),\ + patch('odoo.addons.stock.models.stock_picking.Picking.button_validate', new=picking_button_validate_mock): + self.start_tour(url, 'test_internal_picking_from_scratch', login='admin', timeout=180) + + self.assertEqual(self.call_count, 2) + self.assertEqual(len(internal_picking.move_line_ids), 4) + prod1_ml = internal_picking.move_line_ids.filtered(lambda ml: ml.product_id.id == self.product1.id).sorted( + lambda ml: (ml.location_id.complete_name, ml.location_dest_id.complete_name, ml.id)) + prod2_ml = internal_picking.move_line_ids.filtered(lambda ml: ml.product_id.id == self.product2.id).sorted( + lambda ml: (ml.location_id.complete_name, ml.location_dest_id.complete_name, ml.id)) + self.assertEqual(prod1_ml[0].quantity, 2) + self.assertTrue(prod1_ml[0].picked) + self.assertEqual(prod1_ml[0].location_id, self.shelf1) + self.assertEqual(prod1_ml[0].location_dest_id, self.shelf2) + self.assertEqual(prod1_ml[1].quantity, 1) + self.assertTrue(prod1_ml[1].picked) + self.assertEqual(prod1_ml[1].location_id, self.shelf1) + self.assertEqual(prod1_ml[1].location_dest_id, self.shelf3) + self.assertEqual(prod2_ml[0].quantity, 1) + self.assertTrue(prod2_ml[0].picked) + self.assertEqual(prod2_ml[0].location_id, self.shelf1) + self.assertEqual(prod2_ml[0].location_dest_id, self.shelf2) + self.assertEqual(prod2_ml[1].quantity, 1) + self.assertTrue(prod2_ml[1].picked) + self.assertEqual(prod2_ml[1].location_id, self.shelf1) + self.assertEqual(prod2_ml[1].location_dest_id, self.shelf3) + + def test_picking_scan_package_confirmation(self): + """ + This test ensures that whenever a product is already scanned in a package, + if we scan the package, a confirmation is asked before adding the content of the package. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + package1 = self.env['stock.quant.package'].create({'name': 'package001'}) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 1, package_id=package1) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 1, package_id=package1) + + delivery_with_move = self.env['stock.picking'].create({ + 'name': "Delivery with Stock Move", + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + 'move_ids': [(0, 0, { + 'name': 'scan_package_confirmation', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2 + })], + }) + delivery_with_move.action_confirm() + delivery_with_move.action_assign() + + action = self.env["ir.actions.actions"]._for_xml_id("stock_barcode.stock_barcode_picking_client_action") + url = '/web#action=%s&active_id=%s' % (action['id'], delivery_with_move.id) + self.start_tour(url, 'test_picking_scan_package_confirmation', login='admin', timeout=180) + + def test_internal_picking_from_scratch_with_package(self): + """ Opens an empty internal picking, scans the source (shelf1), then scans + the products (product1 and product2), scans a existing empty package to + assign it as the result package, and finally scans the destination (shelf2). + Checks the dest location is correctly set on the lines. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0), (4, grp_pack.id, 0)]}) + self.picking_type_internal.active = True + # Creates a new package and add some quants. + package2 = self.env['stock.quant.package'].create({'name': 'P00002'}) + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 1, package_id=package2) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 2, package_id=package2) + self.assertEqual(package2.location_id.id, self.stock_location.id) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_internal_picking_from_scratch_with_package', login='admin', timeout=1800000) + + self.assertEqual(len(self.package.quant_ids), 2) + self.assertEqual(self.package.location_id.id, self.shelf2.id) + self.assertRecordValues(self.package.quant_ids, [ + {'product_id': self.product1.id, 'quantity': 1, 'location_id': self.shelf2.id}, + {'product_id': self.product2.id, 'quantity': 1, 'location_id': self.shelf2.id}, + ]) + + self.assertEqual(package2.location_id.id, self.shelf2.id) + self.assertRecordValues(package2.quant_ids, [ + {'product_id': self.product1.id, 'quantity': 1, 'location_id': self.shelf2.id}, + {'product_id': self.product2.id, 'quantity': 2, 'location_id': self.shelf2.id}, + ]) + + def test_internal_picking_reserved_1(self): + """ Open a reserved internal picking + - move 1 `self.product1` and 1 `self.product2` from shelf1 to shelf2 + - move 1 `self.product1` from shelf3 to shelf4. + Before doing the reservation, move 1 `self.product1` from shelf3 to shelf2 + """ + self.clean_access_rights() + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_internal.id, + }) + odoo.addons.stock.models.stock_picking.Picking.write + url = self._get_client_action_url(internal_picking.id) + + # prepare the picking + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf3, 1) + move1 = self.env['stock.move'].create({ + 'name': 'test_internal_picking_reserved_1_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': internal_picking.id, + }) + move2 = self.env['stock.move'].create({ + 'name': 'test_internal_picking_reserved_1_2', + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': internal_picking.id, + }) + internal_picking.action_confirm() + internal_picking.action_assign() + move1.move_line_ids.location_dest_id = self.shelf2.id + for ml in move2.move_line_ids: + if ml.location_id.id == self.shelf1.id: + ml.location_dest_id = self.shelf2.id + else: + ml.location_dest_id = self.shelf4.id + + self.start_tour(url, 'test_internal_picking_reserved_1', login='admin', timeout=180) + + def test_receipt_from_scratch_with_lots_1(self): + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + # Create a sibling stock location to check we can scan not only picking's + # destination and its sublocations for immediate transfers. + stock_2 = self.env['stock.location'].create({ + 'name': "Stock 2", + 'location_id': self.stock_location.location_id.id, + 'barcode': 'WH-STOCK-2', + }) + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_receipt_from_scratch_with_lots_1', login='admin', timeout=180) + self.assertRecordValues(receipt_picking.move_line_ids, [ + {'lot_name': 'lot1', 'location_dest_id': self.stock_location.id}, + {'lot_name': 'lot2', 'location_dest_id': self.shelf1.id}, + {'lot_name': 'lot3', 'location_dest_id': stock_2.id}, + ]) + + def test_receipt_from_scratch_with_lots_2(self): + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + self.picking_type_in.write({ + "use_existing_lots": True, + "use_create_lots": True, + }) + + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_receipt_from_scratch_with_lots_2', login='admin', timeout=180) + self.assertEqual(receipt_picking.move_line_ids.mapped('lot_name'), ['lot1', 'lot2']) + self.assertEqual(receipt_picking.move_line_ids.mapped('qty_done'), [2, 2]) + + def test_receipt_from_scratch_with_lots_3(self): + """ Scans a non tracked product, then scans a tracked by lots product, then scans a + production lot twice and checks the tracked product quantity was rightly increased. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_receipt_from_scratch_with_lots_3', login='admin', timeout=180) + move_lines = receipt_picking.move_line_ids + self.assertEqual(move_lines[0].product_id.id, self.product1.id) + self.assertEqual(move_lines[0].qty_done, 2.0) + self.assertEqual(move_lines[1].product_id.id, self.productlot1.id) + self.assertEqual(move_lines[1].qty_done, 2.0) + self.assertEqual(move_lines[1].lot_name, 'lot1') + + def test_receipt_from_scratch_with_lots_4(self): + """ With picking type options "use_create_lots" and "use existing lots" disabled, + scan a tracked product 3 times and checks the tracked product quantity was rightly + increased without the need to enter serial/lot number. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + self.picking_type_in.use_create_lots = False + self.picking_type_in.use_existing_lots = False + + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_receipt_from_scratch_with_lots_4', login='admin', timeout=180) + move_lines = receipt_picking.move_line_ids + self.assertEqual(move_lines[0].product_id.id, self.productserial1.id) + self.assertEqual(move_lines[0].qty_done, 3.0) + + def test_receipt_with_sn_1(self): + """ With picking type options "use_create_lots" and "use_existing_lots" enabled, scan a + tracked product and enter a serial number already registered (but not used) in the system. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + self.picking_type_in.use_create_lots = True + self.picking_type_in.use_existing_lots = True + snObj = self.env['stock.lot'] + snObj.create({'name': 'sn1', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + 'state': 'draft', + }) + + self.env['stock.move'].create({ + 'name': 'test_receipt_1', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.productserial1.id, + 'product_uom': self.productserial1.uom_id.id, + 'product_uom_qty': 1, + 'picking_id': receipt_picking.id, + 'picking_type_id': self.picking_type_in.id, + }) + + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_receipt_with_sn_1', login='admin', timeout=180) + move_lines = receipt_picking.move_line_ids + self.assertEqual(move_lines[0].product_id.id, self.productserial1.id) + self.assertEqual(move_lines[0].lot_id.name, 'sn1') + self.assertEqual(move_lines[0].quantity, 1.0) + + def test_receipt_reserved_1(self): + """ Open a receipt. Move four units of `self.product1` and four units of + unit of `self.product2` into shelf1. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + picking_write_orig = odoo.addons.stock.models.stock_picking.Picking.write + url = self._get_client_action_url(receipt_picking.id) + + # Create a sibling stock location to check we can only scan picking's + # destination and its sublocations as move line destination. + self.env['stock.location'].create({ + 'name': "Stock 2", + 'location_id': self.stock_location.location_id.id, + 'barcode': 'WH-STOCK-2', + }) + + move1 = self.env['stock.move'].create({ + 'name': 'test_receipt_reserved_1_1', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': receipt_picking.id, + }) + move2 = self.env['stock.move'].create({ + 'name': 'test_receipt_reserved_1_2', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': receipt_picking.id, + }) + receipt_picking.action_confirm() + receipt_picking.action_assign() + + # Mock the calls to write and run the phantomjs script. + assertEqual = self.assertEqual + ml1 = move1.move_line_ids + ml2 = move2.move_line_ids + shelf1 = self.shelf1 + self1 = self + + def picking_write_mock(self, vals): + self1.call_count += 1 + if self1.call_count == 1: + assertEqual(len(vals['move_line_ids']), 2) + assertEqual(vals['move_line_ids'][0][:2], [1, ml2.id]) + assertEqual(vals['move_line_ids'][1][:2], [1, ml1.id]) + return picking_write_orig(self, vals) + + with patch('odoo.addons.stock.models.stock_picking.Picking.write', new=picking_write_mock): + self.start_tour(url, 'test_receipt_reserved_1', login='admin', timeout=180) + self.assertEqual(self.call_count, 1) + self.assertEqual(receipt_picking.move_line_ids[0].location_dest_id.id, shelf1.id) + self.assertEqual(receipt_picking.move_line_ids[1].location_dest_id.id, shelf1.id) + + def test_receipt_reserved_2_partial_put_in_pack(self): + """ For a planned receipt, check put in pack a uncompleted move line will split it. """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + # Create a receipt and confirm it. + receipt_form = Form(self.env['stock.picking']) + receipt_form.picking_type_id = self.picking_type_in + with receipt_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 3 + with receipt_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 3 + receipt_picking = receipt_form.save() + receipt_picking.action_confirm() + receipt_picking.action_assign() + receipt_picking.name = "receipt_test" + + # Set packages' sequence to 1000 to find it easily during the tour. + package_sequence = self.env['ir.sequence'].search([('code', '=', 'stock.quant.package')], limit=1) + package_sequence.write({'number_next_actual': 1000}) + + # Opens the barcode main menu to be able to open the pickings by scanning their name. + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, "test_receipt_reserved_2_partial_put_in_pack", login="admin", timeout=180) + + package1 = self.env['stock.quant.package'].search([('name', '=', 'PACK0001000')]) + package2 = self.env['stock.quant.package'].search([('name', '=', 'PACK0001001')]) + self.assertRecordValues(receipt_picking.move_ids, [ + {'product_id': self.product1.id, 'product_uom_qty': 3, 'quantity': 3, 'picked': True}, + {'product_id': self.product2.id, 'product_uom_qty': 1, 'quantity': 1, 'picked': True}, + ]) + self.assertRecordValues(receipt_picking.move_line_ids.sorted(), [ + {'product_id': self.product2.id, 'quantity': 1, 'picked': True, 'result_package_id': package2.id}, + {'product_id': self.product1.id, 'quantity': 1, 'picked': True, 'result_package_id': package2.id}, + {'product_id': self.product1.id, 'quantity': 2, 'picked': True, 'result_package_id': package1.id}, + ]) + # Since the receipt wasn't complete, a backorder should be created. + receipt_backorder = receipt_picking.backorder_ids + self.assertRecordValues(receipt_backorder.move_ids, [ + {'product_id': self.product2.id, 'product_uom_qty': 2, 'quantity': 2, 'picked': False}, + ]) + + def test_receipt_product_not_consecutively(self): + """ Check that there is no new line created when scanning the same product several times but not consecutively.""" + self.clean_access_rights() + + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + 'state': 'draft', + }) + + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_receipt_product_not_consecutively', login='admin', timeout=180) + + self.assertEqual(len(receipt_picking.move_line_ids), 2) + self.assertEqual(receipt_picking.move_line_ids.product_id.mapped('id'), [self.product1.id, self.product2.id]) + self.assertEqual(receipt_picking.move_line_ids.mapped('quantity'), [2, 1]) + + def test_delivery_source_location(self): + """ Ensures a location who isn't the picking's source location or one of its sublocations + can't be scanned as the source while processing a delivery. + Ensures also this constraint is not applyable for immediate transfers.""" + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + # Creates a new location at the same level than WH/Stock. + sibling_loc = self.env['stock.location'].create({ + 'name': "Second Stock", + 'location_id': self.stock_location.location_id.id, + 'barcode': 'WH-SECOND-STOCK', + }) + # Adds some quantities in stock and creates a delivery using them. + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4) + delivery_from_stock = self.env['stock.picking'].create({ + 'name': 'delivery_from_stock', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + self.env['stock.move'].create({ + 'name': 'product1 x4 (WH/Stock)', + 'location_id': delivery_from_stock.location_id.id, + 'location_dest_id': delivery_from_stock.location_dest_id.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': delivery_from_stock.id, + }) + delivery_from_stock.action_confirm() + delivery_from_stock.action_assign() + # Adds some quantities in 2nd stock and creates a delivery using them. + self.env['stock.quant']._update_available_quantity(self.product1, sibling_loc, 4) + delivery_from_stock_2 = self.env['stock.picking'].create({ + 'name': 'delivery_from_second_stock', + 'location_id': sibling_loc.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + self.env['stock.move'].create({ + 'name': 'product1 x4 (WH/Second Stock)', + 'location_id': delivery_from_stock_2.location_id.id, + 'location_dest_id': delivery_from_stock_2.location_dest_id.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': delivery_from_stock_2.id, + }) + delivery_from_stock_2.action_confirm() + delivery_from_stock_2.action_assign() + + action = self.env["ir.actions.actions"]._for_xml_id("stock_barcode.stock_barcode_action_main_menu") + url = f'/web#action={action["id"]}' + self.start_tour(url, 'test_delivery_source_location', login='admin', timeout=180) + + def test_delivery_lot_with_multi_companies(self): + """ This test ensures that scanning a lot or serial number who exists for + multiple companies will fetch only the one who belongs to the active company. + """ + self.clean_access_rights() + # Creates two companies and assign them to the user. + company_a = self.env['res.company'].create({'name': 'Company "Ah !" (le meme TMTC)'}) + company_b = self.env['res.company'].create({'name': 'Company Bae 😏😘'}) + self.env.user.write({ + 'groups_id': [(4, self.env.ref('stock.group_production_lot').id)], + 'company_ids': [(4, company_a.id), (4, company_b.id)], + 'company_id': company_b.id, + }) + warehouse_b = self.env['stock.warehouse'].search([('company_id', '=', company_b.id)]) + location_a = self.env['stock.warehouse'].search([('company_id', '=', company_a.id)]).lot_stock_id + location_b = warehouse_b.lot_stock_id + picking_type_out_b = warehouse_b.out_type_id + location_id_by_company = { + company_a: location_a.id, + company_b: location_b.id, + } + # Creates some serial numbers (some of them being in the two companies.) + sn_a_1 = self.env['stock.lot'].create({'name': 'tsn-001', 'product_id': self.productserial1.id, 'company_id': company_a.id}) + sn_a_2 = self.env['stock.lot'].create({'name': 'tsn-002', 'product_id': self.productserial1.id, 'company_id': company_a.id}) + sn_b_1 = self.env['stock.lot'].create({'name': 'tsn-001', 'product_id': self.productserial1.id, 'company_id': company_b.id}) + sn_b_2 = self.env['stock.lot'].create({'name': 'tsn-003', 'product_id': self.productserial1.id, 'company_id': company_b.id}) + for sn in [sn_a_1, sn_a_2, sn_b_1, sn_b_2]: + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': self.productserial1.id, + 'inventory_quantity': 1, + 'lot_id': sn.id, + 'location_id': location_id_by_company[sn.company_id], + }) + # Creates a delivery for Company B. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = picking_type_out_b + delivery = picking_form.save() + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_delivery_lot_with_multi_companies', login='admin', timeout=180) + self.assertRecordValues(delivery.move_line_ids.lot_id, [ + {'name': 'tsn-001', 'company_id': company_b.id}, + {'name': 'tsn-003', 'company_id': company_b.id}, + ]) + + def test_delivery_lot_with_package(self): + """ Have a delivery for a product tracked by SN, scan a non-reserved SN + and checks the new created line has the right SN's package & owner. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + grp_owner = self.env.ref('stock.group_tracking_owner') + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_owner.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + # Creates 4 serial numbers and adds 2 qty. for the reservation. + snObj = self.env['stock.lot'] + sn1 = snObj.create({'name': 'sn1', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + sn2 = snObj.create({'name': 'sn2', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + sn3 = snObj.create({'name': 'sn3', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + sn4 = snObj.create({'name': 'sn4', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + package1 = self.env['stock.quant.package'].create({'name': 'pack_sn_1'}) + package2 = self.env['stock.quant.package'].create({'name': 'pack_sn_2'}) + partner = self.env['res.partner'].create({'name': 'Particulier'}) + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': self.productserial1.id, + 'inventory_quantity': 1, + 'lot_id': sn1.id, + 'location_id': self.stock_location.id, + 'package_id': package1.id, + }).action_apply_inventory() + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': self.productserial1.id, + 'inventory_quantity': 1, + 'lot_id': sn2.id, + 'location_id': self.stock_location.id, + 'package_id': package1.id, + }).action_apply_inventory() + + # Creates and confirms the delivery. + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + self.env['stock.move'].create({ + 'name': self.productserial1.name, + 'product_id': self.productserial1.id, + 'product_uom_qty': 2, + 'product_uom': self.productserial1.uom_id.id, + 'picking_id': delivery_picking.id, + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + }) + delivery_picking.action_confirm() + delivery_picking.action_assign() + # Add 2 more qty. after the reservation. + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': self.productserial1.id, + 'inventory_quantity': 1, + 'lot_id': sn3.id, + 'location_id': self.stock_location.id, + 'package_id': package2.id, + }).action_apply_inventory() + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': self.productserial1.id, + 'inventory_quantity': 1, + 'lot_id': sn4.id, + 'location_id': self.stock_location.id, + 'package_id': package2.id, + 'owner_id': partner.id, + }).action_apply_inventory() + + # Runs the tour. + url = self._get_client_action_url(delivery_picking.id) + self.start_tour(url, 'test_delivery_lot_with_package', login='admin', timeout=180) + + # Checks move lines values after delivery was completed. + self.assertEqual(delivery_picking.state, "done") + # ensure that SNs not scanned by validation time are removed + self.assertEqual(len(delivery_picking.move_line_ids), 2) + move_line_1 = delivery_picking.move_line_ids[0] + move_line_2 = delivery_picking.move_line_ids[1] + self.assertEqual(move_line_1.lot_id, sn3) + self.assertEqual(move_line_1.package_id, package2) + self.assertEqual(move_line_1.owner_id.id, False) + self.assertEqual(move_line_2.lot_id, sn4) + self.assertEqual(move_line_2.package_id, package2) + self.assertEqual(move_line_2.owner_id, partner) + + def test_delivery_lot_with_package_delivery_step(self): + """ + Test that we unpack from the right package in case of having + multiple packages (or package and no package) for the same lot + in multi-locations configuration. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + + sn = self.env['stock.lot'].create({'name': 'sn', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + package1 = self.env['stock.quant.package'].create({'name': 'pack_sn'}) + package2 = self.env['stock.quant.package'].create({'name': 'pack_sn_2'}) + self.env['stock.quant'].create([ + { + 'product_id': self.productlot1.id, + 'inventory_quantity': 1, + 'lot_id': sn.id, + 'location_id': self.shelf1.id, + 'package_id': package1.id, + }, { + 'product_id': self.productlot1.id, + 'inventory_quantity': 1, + 'lot_id': sn.id, + 'location_id': self.shelf2.id, + }, + { + 'product_id': self.productlot1.id, + 'inventory_quantity': 1, + 'lot_id': sn.id, + 'location_id': self.shelf2.id, + 'package_id': package2.id, + } + ]).action_apply_inventory() + + # Creates and confirms the delivery. + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.shelf2.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + move = self.env['stock.move'].create({ + 'name': self.productlot1.name, + 'product_id': self.productlot1.id, + 'product_uom_qty': 1, + 'product_uom': self.productlot1.uom_id.id, + 'picking_id': delivery_picking.id, + 'location_id': self.shelf2.id, + 'location_dest_id': self.customer_location.id, + }) + delivery_picking.action_confirm() + delivery_picking.action_assign() + + # Runs the tour. + url = self._get_client_action_url(delivery_picking.id) + self.start_tour(url, 'test_delivery_lot_with_package_delivery_step', login='admin', timeout=180) + self.assertEqual(delivery_picking.state, "done") + self.assertRecordValues(move.move_line_ids, [ + {'lot_id': sn.id, 'product_id': self.productlot1.id, 'quantity': 1, 'package_id': package2.id, 'result_package_id': False}, + ]) + + def test_delivery_reserved_1(self): + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + 'note': "A Test Note", + }) + picking_write_orig = odoo.addons.stock.models.stock_picking.Picking.write + url = self._get_client_action_url(delivery_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_1_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': delivery_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_1_2', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': delivery_picking.id, + }) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 4) + + delivery_picking.action_confirm() + delivery_picking.action_assign() + + self1 = self + + # Mock the calls to write and run the phantomjs script. + def picking_write_mock(self, vals): + self1.call_count += 1 + return picking_write_orig(self, vals) + with patch('odoo.addons.stock.models.stock_picking.Picking.write', new=picking_write_mock): + self.start_tour(url, 'test_delivery_reserved_1', login='admin', timeout=180) + self.assertEqual(self.call_count, 1) + + def test_delivery_reserved_2(self): + self.clean_access_rights() + self.picking_type_out.restrict_scan_source_location = 'no' + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + picking_write_orig = odoo.addons.stock.models.stock_picking.Picking.write + url = self._get_client_action_url(delivery_picking.id) + + partner_1 = self.env['res.partner'].create({'name': 'Parter1'}) + partner_2 = self.env['res.partner'].create({'name': 'Partner2'}) + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_2_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': delivery_picking.id, + 'restrict_partner_id': partner_1.id + }) + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_2_2', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': delivery_picking.id, + 'restrict_partner_id': partner_2.id + }) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 4) + + delivery_picking.action_confirm() + delivery_picking.action_assign() + self.assertEqual(len(delivery_picking.move_ids), 2) + + self1 = self + + def picking_write_mock(self, vals): + self1.call_count += 1 + return picking_write_orig(self, vals) + + with patch('odoo.addons.stock.models.stock_picking.Picking.write', new=picking_write_mock): + self.start_tour(url, 'test_delivery_reserved_2', login='admin', timeout=180) + self.assertEqual(self.call_count, 0) + + def test_delivery_reserved_3(self): + self.clean_access_rights() + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + picking_write_orig = odoo.addons.stock.models.stock_picking.Picking.write + url = self._get_client_action_url(delivery_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_2_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': delivery_picking.id, + }) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 2) + + delivery_picking.action_confirm() + delivery_picking.action_assign() + + self1 = self + + def picking_write_mock(self, vals): + self1.call_count += 1 + return picking_write_orig(self, vals) + + with patch('odoo.addons.stock.models.stock_picking.Picking.write', new=picking_write_mock): + self.start_tour(url, 'test_delivery_reserved_3', login='admin', timeout=180) + self.assertEqual(self.call_count, 0) + + def test_delivery_reserved_4_backorder(self): + """ Checks the backorders are correctly created when all quantity isn't processed and the + confirmation's dialog is shown at the right time with the right informations. + """ + self.clean_access_rights() + product3 = self.env['product.product'].create({ + 'name': 'product3', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product3', + }) + # Creates a delivery with three different products. + delivery = self.env['stock.picking'].create({ + 'picking_type_id': self.picking_type_out.id, + }) + common_vals = { + 'location_dest_id': self.stock_location.id, + 'location_id': self.stock_location.id, + 'name': 'test_delivery_reserved_4_backorder', + 'picking_id': delivery.id, + 'product_uom_qty': 4, + } + self.env['stock.move'].create(dict(common_vals, product_id=self.product1.id)) + self.env['stock.move'].create(dict(common_vals, product_id=self.product2.id)) + self.env['stock.move'].create(dict(common_vals, product_id=product3.id)) + # Adds quantity on hand for the delivery, but not to fulfill it. + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 2) + # Confirms and reserves the delivery, then process it. + delivery.action_confirm() + delivery.action_assign() + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_delivery_reserved_4_backorder', login='admin', timeout=180) + + # The delivery should have a backorder with two moves. + self.assertEqual(len(delivery.backorder_ids), 1) + backorder = delivery.backorder_ids + self.assertEqual(len(backorder.move_ids), 2) + self.assertRecordValues(backorder.move_ids, [ + {'product_uom_qty': 4, 'quantity': 2, 'picked': False, 'product_id': self.product2.id}, + {'product_uom_qty': 4, 'quantity': 0, 'picked': False, 'product_id': product3.id}, + ]) + + def test_delivery_from_scratch_1(self): + """ Scan unreserved lots on a delivery order. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + # Adds lot1 and lot2 for productlot1 + lotObj = self.env['stock.lot'] + lotObj.create({'name': 'lot1', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + lotObj.create({'name': 'lot2', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + + # Creates an empty picking. + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + url = self._get_client_action_url(delivery_picking.id) + + self.start_tour(url, 'test_delivery_from_scratch_with_lots_1', login='admin', timeout=180) + + lines = delivery_picking.move_line_ids + self.assertEqual(lines[0].lot_id.name, 'lot1') + self.assertEqual(lines[1].lot_id.name, 'lot2') + self.assertEqual(lines[0].qty_done, 2) + self.assertEqual(lines[1].qty_done, 2) + + def test_delivery_from_scratch_with_incompatible_lot(self): + """ + If a product and a lot have the same barcode, when this barcode is + scanned, both are found, but to avoid issue, the lot is ignored because + a lot shouldn't be applied to a line if its product is not the same. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id)]}) + + self.picking_type_out.use_create_lots = False + self.picking_type_out.use_existing_lots = True + + lot = self.env['stock.lot'].create({ + 'name': '0000000001', + 'product_id': self.productlot1.id, + 'company_id': self.env.company.id, + }) + + for product in [self.product1, self.productserial1]: + product.barcode = lot.name + + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + 'state': 'draft', + }) + url = self._get_client_action_url(delivery_picking.id) + self.start_tour(url, 'test_delivery_from_scratch_with_incompatible_lot', login='admin', timeout=180) + + self.assertRecordValues(delivery_picking.move_line_ids, [ + {'product_id': product.id, 'lot_name': False, 'lot_id': False}, + ]) + + product.barcode = False + + def test_delivery_from_scratch_with_common_lots_name(self): + """ + Suppose: + - two tracked-by-lot products + - these products share one lot name + - an extra product tracked by serial number + This test ensures that a user can scan the tracked products in a picking + that does not expect them and updates/creates the right line depending + of the scanned lot + """ + self.clean_access_rights() + group_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, group_lot.id, 0)]}) + + (self.product1 + self.product2).tracking = 'lot' + + lot01, lot02, sn = self.env['stock.lot'].create([{ + 'name': lot_name, + 'product_id': product.id, + 'company_id': self.env.company.id, + } for (lot_name, product) in [("LOT01", self.product1), ("LOT01", self.product2), ("SUPERSN", self.productserial1)]]) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 2, lot_id=lot01) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 3, lot_id=lot02) + self.env['stock.quant']._update_available_quantity(self.productserial1, self.stock_location, 1, lot_id=sn) + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_out + delivery = picking_form.save() + + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_delivery_from_scratch_with_common_lots_name', login='admin', timeout=180) + + self.assertRecordValues(delivery.move_line_ids, [ + # pylint: disable=C0326 + {'product_id': self.product1.id, 'lot_id': lot01.id, 'qty_done': 2}, + {'product_id': self.product2.id, 'lot_id': lot02.id, 'qty_done': 3}, + {'product_id': self.productserial1.id, 'lot_id': sn.id, 'qty_done': 1}, + ]) + + def test_delivery_reserved_lots_1(self): + """ Creates a delivery for product tracked by lots and having some + quantities in stock. Checks reserved lots are correctly visible in the + Barcode app and that they can be processed alongside not reserved lots. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + url = self._get_client_action_url(delivery_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_lots_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.productlot1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 5, + 'picking_id': delivery_picking.id, + }) + + # Creates lot1, lot2 and lot3 for productlot1. + lotObj = self.env['stock.lot'] + lot1 = lotObj.create({'name': 'lot1', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + lot2 = lotObj.create({'name': 'lot2', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + lot3 = lotObj.create({'name': 'lot3', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 2, lot_id=lot1) + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 3, lot_id=lot2) + + delivery_picking.action_confirm() + delivery_picking.action_assign() + self.assertEqual(delivery_picking.move_ids.state, 'assigned') + self.assertEqual(len(delivery_picking.move_ids.move_line_ids), 2) + + self.start_tour(url, 'test_delivery_reserved_lots_1', login='admin', timeout=180) + + self.assertRecordValues(delivery_picking.move_line_ids, [ + {'lot_id': lot1.id, 'quantity': 2, 'picked': True}, + {'lot_id': lot2.id, 'quantity': 2, 'picked': True}, + {'lot_id': lot3.id, 'quantity': 1, 'picked': True}, + ]) + + def test_delivery_different_products_with_same_lot_name(self): + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + self.productlot2 = self.env['product.product'].create({ + 'name': 'productlot2', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'productlot2', + 'tracking': 'lot', + }) + + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + url = self._get_client_action_url(delivery_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_delivery_different_products_with_same_lot_name_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.productlot1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': delivery_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_delivery_different_products_with_same_lot_name_2', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.productlot2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': delivery_picking.id, + }) + + # Create 2 lots with the same name for productlot1 and productlot2 + lot1 = self.env['stock.lot'].create({'name': 'lot1', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + lot2 = self.env['stock.lot'].create({'name': 'lot1', 'product_id': self.productlot2.id, 'company_id': self.env.company.id}) + + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 2, lot_id=lot1) + self.env['stock.quant']._update_available_quantity(self.productlot2, self.stock_location, 2, lot_id=lot2) + + delivery_picking.action_confirm() + delivery_picking.action_assign() + + self.assertEqual(len(delivery_picking.move_ids), 2) + + self.start_tour(url, 'test_delivery_different_products_with_same_lot_name', login='admin', timeout=180) + + self.env.invalidate_all() + lines = delivery_picking.move_line_ids + self.assertEqual(lines[0].lot_id.name, 'lot1') + self.assertEqual(lines[0].product_id.name, 'productlot1') + self.assertEqual(lines[0].qty_done, 2) + self.assertEqual(lines[1].lot_id.name, 'lot1') + self.assertEqual(lines[1].product_id.name, 'productlot2') + self.assertEqual(lines[1].qty_done, 2) + + def test_scan_same_lot_different_products(self): + """ + Checks that the same lot can be scanned for different products and there + is no conflict when trying to retrieve the lot from the cache. + """ + products = self.env['product.product'].create([{ + 'name': name, + 'barcode': name, + 'type': 'product', + 'tracking': 'lot', + } for name in ['aaa', 'bbb']]) + + self.env["stock.lot"].create([{ + 'name': "123", + 'product_id': product.id, + 'company_id': self.env.company.id, + } for product in products]) + + self.picking_type_internal.restrict_scan_product = True + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.shelf1.id, + 'picking_type_id': self.picking_type_internal.id, + }) + url = self._get_client_action_url(internal_picking.id) + + self.start_tour(url, 'test_scan_same_lot_different_products', login="admin") + + def test_delivery_from_scratch_sn_1(self): + """ Scan unreserved serial number on a delivery order. + """ + + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + # Add 4 serial numbers productserial1 + snObj = self.env['stock.lot'] + sn1 = snObj.create({'name': 'sn1', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + sn2 = snObj.create({'name': 'sn2', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + sn3 = snObj.create({'name': 'sn3', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + sn4 = snObj.create({'name': 'sn4', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + + self.env['stock.quant']._update_available_quantity(self.productserial1, self.stock_location, 1, lot_id=sn1) + self.env['stock.quant']._update_available_quantity(self.productserial1, self.stock_location, 1, lot_id=sn2) + self.env['stock.quant']._update_available_quantity(self.productserial1, self.stock_location, 1, lot_id=sn3) + self.env['stock.quant']._update_available_quantity(self.productserial1, self.stock_location, 1, lot_id=sn4) + + # empty picking + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_lots_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.productserial1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': delivery_picking.id, + }) + + delivery_picking.action_confirm() + delivery_picking.action_assign() + + url = self._get_client_action_url(delivery_picking.id) + + self.start_tour(url, 'test_delivery_reserved_with_sn_1', login='admin', timeout=180) + + # TODO: the framework should call invalidate_cache every time a test cursor is asked or + # given back + self.env.invalidate_all() + lines = delivery_picking.move_line_ids + self.assertEqual(lines.mapped('lot_id.name'), ['sn1', 'sn2', 'sn3', 'sn4']) + self.assertEqual(lines.mapped('qty_done'), [1, 1, 1, 1]) + + def test_delivery_using_buttons(self): + """ Creates a delivery with 3 lines, then: + - Completes first line with "+1" button; + - Completes second line with "Add reserved quantities" button; + - Completes last line with "+1" button and scanning barcode. + Checks also written quantity on buttons is correctly updated and only + "+1" button is displayed on new line created by user. + """ + self.clean_access_rights() + + # Creates a new product. + product3 = self.env['product.product'].create({ + 'name': 'product3', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product3', + }) + + # Creates some quants. + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 2) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 3) + self.env['stock.quant']._update_available_quantity(product3, self.stock_location, 4) + + # Create the delivery transfer. + delivery_form = Form(self.env['stock.picking']) + delivery_form.picking_type_id = self.picking_type_out + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 2 + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 3 + with delivery_form.move_ids_without_package.new() as move: + move.product_id = product3 + move.product_uom_qty = 4 + + delivery_picking = delivery_form.save() + delivery_picking.action_confirm() + delivery_picking.action_assign() + + url = self._get_client_action_url(delivery_picking.id) + self.start_tour(url, 'test_delivery_using_buttons', login='admin', timeout=180) + + self.assertEqual(len(delivery_picking.move_line_ids), 4) + self.assertEqual(delivery_picking.move_line_ids.mapped('qty_done'), [2, 3, 4, 2]) + + def test_remaining_decimal_accuracy(self): + """ Checks if the remaining value of a move is correct + """ + self.clean_access_rights() + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4) + + # Create the delivery transfer. + delivery_form = Form(self.env['stock.picking']) + delivery_form.picking_type_id = self.picking_type_out + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 4 + + delivery_picking = delivery_form.save() + delivery_picking.action_confirm() + delivery_picking.action_assign() + + url = self._get_client_action_url(delivery_picking.id) + self.start_tour(url, 'test_remaining_decimal_accuracy', login='admin', timeout=90) + + def test_receipt_reserved_lots_multiloc_1(self): + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + receipts_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + 'user_id': False, + }) + + url = self._get_client_action_url(receipts_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_lots_1', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.productlot1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': receipts_picking.id, + }) + + # Creates lot1 and lot2 for productlot1. + lotObj = self.env['stock.lot'] + lotObj.create({'name': 'lot1', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + lotObj.create({'name': 'lot2', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + + receipts_picking.action_confirm() + receipts_picking.action_assign() + + self.assertEqual(receipts_picking.user_id.id, False) + self.start_tour(url, 'test_receipt_reserved_lots_multiloc_1', login='admin', timeout=180) + self.assertEqual(receipts_picking.user_id.id, self.env.user.id) + self.env.invalidate_all() + lines = receipts_picking.move_line_ids.sorted(lambda ml: (ml.location_id.complete_name, ml.location_dest_id.complete_name, ml.id)) + self.assertEqual(len(lines), 2) + self.assertEqual(lines.mapped('qty_done'), [2, 2]) + self.assertEqual(lines.mapped('location_id.name'), ['Vendors']) + self.assertEqual(lines[0].location_dest_id.name, 'Section 1') + self.assertEqual(lines[0].lot_name, 'lot2') + self.assertEqual(lines[1].location_dest_id.name, 'Section 2') + self.assertEqual(lines[1].lot_name, 'lot1') + + def test_pack_multiple_scan(self): + """ Make a reception of two products, put them in pack and validate. + Then make a delivery, scan the package two times (check the warning) and validate. + Finally, check that the package is in the customer location. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + # set sequence packages to 1000 to find it easily in the tour + sequence = self.env['ir.sequence'].search([( + 'code', '=', 'stock.quant.package', + )], limit=1) + sequence.write({'number_next_actual': 1000}) + + self.start_tour(url, 'test_pack_multiple_scan', login='admin', timeout=180) + + # Check the new package is well delivered + package = self.env['stock.quant.package'].search([ + ('name', '=', 'PACK0001000') + ]) + self.assertEqual(package.location_id, self.customer_location) + + def test_pack_common_content_scan(self): + """ Simulate a picking where 2 packages have the same products + inside. It should display one barcode line for each package and + not a common barcode line for both packages. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + # Create a pack and 2 quants in this pack + pack1 = self.env['stock.quant.package'].create({ + 'name': 'PACK1', + }) + pack2 = self.env['stock.quant.package'].create({ + 'name': 'PACK2', + }) + + self.env['stock.quant']._update_available_quantity( + product_id=self.product1, + location_id=self.stock_location, + quantity=5, + package_id=pack1, + ) + self.env['stock.quant']._update_available_quantity( + product_id=self.product2, + location_id=self.stock_location, + quantity=1, + package_id=pack1, + ) + + self.env['stock.quant']._update_available_quantity( + product_id=self.product1, + location_id=self.stock_location, + quantity=5, + package_id=pack2, + ) + self.env['stock.quant']._update_available_quantity( + product_id=self.product2, + location_id=self.stock_location, + quantity=1, + package_id=pack2, + ) + + self.start_tour(url, 'test_pack_common_content_scan', login='admin', timeout=180) + + def test_pack_multiple_location(self): + """ Create a package in Shelf 1 and makes an internal transfer to move it to Shelf 2. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.picking_type_internal.active = True + self.picking_type_internal.show_entire_packs = True + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + # Create a pack and 2 quants in this pack + pack1 = self.env['stock.quant.package'].create({ + 'name': 'PACK0000666', + }) + + self.env['stock.quant']._update_available_quantity( + product_id=self.product1, + location_id=self.shelf1, + quantity=5, + package_id=pack1, + ) + self.env['stock.quant']._update_available_quantity( + product_id=self.product2, + location_id=self.shelf1, + quantity=5, + package_id=pack1, + ) + + self.start_tour(url, 'test_pack_multiple_location', login='admin', timeout=180) + + # Check the new package is well transfered + self.assertEqual(pack1.location_id, self.shelf2) + + def test_pack_multiple_location_02(self): + """ Creates an internal transfer and reserves a package. Then this test will scan the + location source, the package (already in the barcode view) and the location destination. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + + # Creates a package with 1 quant in it. + pack1 = self.env['stock.quant.package'].create({ + 'name': 'PACK0002020', + }) + self.env['stock.quant']._update_available_quantity( + product_id=self.product1, + location_id=self.shelf1, + quantity=5, + package_id=pack1, + ) + + # Creates an internal transfer for this package. + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.shelf1.id, + 'location_dest_id': self.shelf2.id, + 'picking_type_id': self.picking_type_internal.id, + }) + url = self._get_client_action_url(internal_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_delivery_reserved_2_1', + 'location_id': self.shelf1.id, + 'location_dest_id': self.shelf2.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 5, + 'picking_id': internal_picking.id, + }) + internal_picking.action_confirm() + internal_picking.action_assign() + + self.start_tour(url, 'test_pack_multiple_location_02', login='admin', timeout=180) + + # Checks the new package is well transfered. + self.assertEqual(pack1.location_id, self.shelf2) + + def test_pack_multiple_location_03(self): + """ Creates a delivery and reserves a package. Then this test will scan + a different location source, the package should be removed. + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0), (4, grp_multi_loc.id, 0)]}) + + # Creates a package with a quant in it. + pack1 = self.env['stock.quant.package'].create({ + 'name': 'PACK000666', + }) + self.env['stock.quant']._update_available_quantity( + product_id=self.product1, + location_id=self.shelf1, + quantity=5, + package_id=pack1, + ) + + # Creates a delivery transfer for this package. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_out + picking_form.location_id = self.stock_location + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 1 + delivery_picking = picking_form.save() + delivery_picking.action_confirm() + delivery_picking.action_assign() + url = self._get_client_action_url(delivery_picking.id) + + self.start_tour(url, 'test_pack_multiple_location_03', login='admin', timeout=180) + self.assertFalse(delivery_picking.move_line_ids.package_id) + + def test_put_in_pack_from_multiple_pages(self): + """ In an internal picking where prod1 and prod2 are reserved in shelf1 and shelf2, processing + all these products and then hitting put in pack should move them all in the new pack. + """ + self.clean_access_rights() + # Adapts the setting to scan only the source location. + self.picking_type_internal.restrict_scan_dest_location = 'no' + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf2, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf2, 1) + + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_internal.id, + }) + self.env['stock.move'].create({ + 'name': 'test_put_in_pack_from_multiple_pages', + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': internal_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_put_in_pack_from_multiple_pages', + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': internal_picking.id, + }) + + url = self._get_client_action_url(internal_picking.id) + internal_picking.action_confirm() + internal_picking.action_assign() + + self.start_tour(url, 'test_put_in_pack_from_multiple_pages', login='admin', timeout=180) + + pack = self.env['stock.quant.package'].search([])[-1] + self.assertEqual(len(pack.quant_ids), 2) + self.assertEqual(sum(pack.quant_ids.mapped('quantity')), 4) + + def test_put_in_pack_float_rounding(self): + """ Test that qtyDemand and qtyDone with the value 10.1000001 is rounded to 10.10 """ + self.clean_access_rights() + self.env['res.config.settings'].create({'group_stock_tracking_lot': True}).execute() + + receipt_form = Form(self.env['stock.picking']) + receipt_form.picking_type_id = self.picking_type_in + with receipt_form.move_ids_without_package.new() as move: + move.product_id = self.productlot1 + move.product_uom_qty = 13.5 + + receipt = receipt_form.save() + receipt.action_confirm() + receipt.action_assign() + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_put_in_pack_float_rounding', login='admin', timeout=180) + + def test_reload_flow(self): + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_reload_flow', login='admin', timeout=180) + + move_line1 = self.env['stock.move.line'].search_count([ + ('product_id', '=', self.product1.id), + ('location_dest_id', '=', self.shelf1.id), + ('location_id', '=', self.supplier_location.id), + ('quantity', '=', 2), + ('picked', '=', True), + ]) + move_line2 = self.env['stock.move.line'].search_count([ + ('product_id', '=', self.product2.id), + ('location_dest_id', '=', self.shelf1.id), + ('location_id', '=', self.supplier_location.id), + ('quantity', '=', 1), + ('picked', '=', True), + ]) + self.assertEqual(move_line1, 1) + self.assertEqual(move_line2, 1) + + def test_duplicate_serial_number(self): + """ Simulate a receipt and a delivery with a product tracked by serial + number. It will try to break the ClientAction by using twice the same + serial number. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_receipt_duplicate_serial_number', login='admin', timeout=180) + + self.start_tour(url, 'test_delivery_duplicate_serial_number', login='admin', timeout=180) + + def test_bypass_source_scan(self): + """ Scan a lot, package, product without source location scan. """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + # For the purpose of this test, disable the source scan (mandatory for a deliery otherwise). + self.picking_type_out.restrict_scan_source_location = 'no' + + lot1 = self.env['stock.lot'].create({'name': 'lot1', 'product_id': self.productlot1.id, 'company_id': self.env.company.id}) + lot2 = self.env['stock.lot'].create({'name': 'serial1', 'product_id': self.productserial1.id, 'company_id': self.env.company.id}) + + pack1 = self.env['stock.quant.package'].create({ + 'name': 'THEPACK', + }) + + self.env['stock.quant']._update_available_quantity(self.productlot1, self.shelf1, 2, lot_id=lot1) + self.env['stock.quant']._update_available_quantity(self.productserial1, self.shelf2, 1, lot_id=lot2) + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf2, 4, package_id=pack1) + + # Creates a second pack with some qty in a location the delivery shouldn't have access. + pack2 = self.env['stock.quant.package'].create({'name': 'SUSPACK'}) + other_loc = self.env['stock.location'].create({ + 'name': "Second Stock", + 'location_id': self.stock_location.location_id.id, + 'barcode': 'WH-SECOND-STOCK', + }) + self.env['stock.quant']._update_available_quantity(self.product1, other_loc, 4, package_id=pack2) + + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + url = self._get_client_action_url(delivery_picking.id) + + self.env['stock.move'].create({ + 'name': 'test_bypass_source_scan_1_1', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.productserial1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': delivery_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_bypass_source_scan_1_2', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.productlot1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': delivery_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_bypass_source_scan_1_3', + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 4, + 'picking_id': delivery_picking.id, + }) + delivery_picking.action_confirm() + delivery_picking.action_assign() + + self.start_tour(url, 'test_bypass_source_scan', login='admin', timeout=180) + + def test_put_in_pack_from_different_location(self): + """ Scans two different products from two different locations, then put them in pack and + scans a destination location. Checks the package is in the right location. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.picking_type_internal.active = True + self.picking_type_internal.restrict_scan_source_location = 'no' + self.picking_type_internal.restrict_scan_dest_location = 'optional' + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf3, 1) + + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_internal.id, + }) + self.env['stock.move'].create({ + 'name': 'test_put_in_pack_from_different_location', + 'location_id': self.shelf1.id, + 'location_dest_id': self.shelf2.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': internal_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_put_in_pack_from_different_location2', + 'location_id': self.shelf3.id, + 'location_dest_id': self.shelf2.id, + 'product_id': self.product2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': internal_picking.id, + }) + # Resets package sequence to be sure we'll have the attended packages name. + seq = self.env['ir.sequence'].search([('code', '=', 'stock.quant.package')]) + seq.number_next_actual = 1 + + url = self._get_client_action_url(internal_picking.id) + internal_picking.action_confirm() + internal_picking.action_assign() + + self.start_tour(url, 'test_put_in_pack_from_different_location', login='admin', timeout=180) + pack = internal_picking.move_line_ids.result_package_id + self.assertEqual(len(pack.quant_ids), 2) + self.assertEqual(pack.location_id, self.shelf2) + + def test_put_in_pack_before_dest(self): + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.picking_type_internal.active = True + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf3, 1) + + internal_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_internal.id, + }) + self.env['stock.move'].create({ + 'name': 'test_put_in_pack_before_dest', + 'location_id': self.shelf1.id, + 'location_dest_id': self.shelf2.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': internal_picking.id, + }) + self.env['stock.move'].create({ + 'name': 'test_put_in_pack_before_dest', + 'location_id': self.shelf3.id, + 'location_dest_id': self.shelf4.id, + 'product_id': self.product2.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 1, + 'picking_id': internal_picking.id, + }) + + url = self._get_client_action_url(internal_picking.id) + internal_picking.action_confirm() + internal_picking.action_assign() + + self.start_tour(url, 'test_put_in_pack_before_dest', login='admin', timeout=180) + pack = self.env['stock.quant.package'].search([])[-1] + self.assertEqual(len(pack.quant_ids), 2) + self.assertEqual(pack.location_id, self.shelf2) + + def test_put_in_pack_scan_package(self): + """ Put in pack a product line, then scan the newly created package to + assign it to another lines. + """ + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 1) + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf2, 1) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf1, 1) + + # Resets package sequence to be sure we'll have the attended packages name. + seq = self.env['ir.sequence'].search([('code', '=', 'stock.quant.package')]) + seq.number_next_actual = 1 + + # Creates a delivery with three move lines: two from Section 1 and one from Section 2. + delivery_form = Form(self.env['stock.picking']) + delivery_form.picking_type_id = self.picking_type_out + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 2 + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 1 + + delivery = delivery_form.save() + delivery.action_confirm() + delivery.action_assign() + + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_put_in_pack_scan_package', login='admin', timeout=180) + + self.assertEqual(delivery.state, 'done') + self.assertEqual(len(delivery.move_line_ids), 3) + for move_line in delivery.move_line_ids: + self.assertEqual(move_line.result_package_id.name, 'PACK0000001') + + def test_put_in_pack_new_lines(self): + """ + Receive a product P, put it in a pack PK and validates the receipt. + Then, do the same a second time with the same package PK + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + receipt01 = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + url = self._get_client_action_url(receipt01.id) + self.start_tour(url, 'test_put_in_pack_new_lines', login='admin', timeout=180) + + self.assertRecordValues(receipt01.move_line_ids, [ + {'product_id': self.product1.id, 'qty_done': 1, 'result_package_id': self.package.id}, + ]) + self.assertEqual(self.package.quant_ids.available_quantity, 1) + + receipt02 = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + url = self._get_client_action_url(receipt02.id) + self.start_tour(url, 'test_put_in_pack_new_lines', login='admin', timeout=180) + + self.assertRecordValues(receipt02.move_line_ids, [ + {'product_id': self.product1.id, 'qty_done': 1, 'result_package_id': self.package.id}, + ]) + self.assertEqual(self.package.quant_ids.available_quantity, 2) + + def test_highlight_packs(self): + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + pack1 = self.env['stock.quant.package'].create({ + 'name': 'PACK001', + }) + pack2 = self.env['stock.quant.package'].create({ + 'name': 'PACK002', + }) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4, package_id=pack1) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 4, package_id=pack1) + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 2, package_id=pack2) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 2, package_id=pack2) + + out_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + 'state': 'draft', + }) + + self.picking_type_out.show_entire_packs = True + + self.env['stock.package_level'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'package_id': pack1.id, + 'is_done': False, + 'picking_id': out_picking.id, + 'company_id': self.env.company.id, + }) + + url = self._get_client_action_url(out_picking.id) + out_picking.action_confirm() + out_picking.action_assign() + + self.start_tour(url, 'test_highlight_packs', login='admin', timeout=180) + + def test_picking_owner_scan_package(self): + grp_owner = self.env.ref('stock.group_tracking_owner') + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_owner.id, 0)]}) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 7, package_id=self.package, owner_id=self.owner) + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_picking_owner_scan_package', login='admin', timeout=180) + + move_line = self.env['stock.move.line'].search([('product_id', '=', self.product1.id)], limit=1) + self.assertTrue(move_line) + + line_owner = move_line.owner_id + self.assertEqual(line_owner.id, self.owner.id) + + def test_picking_type_mandatory_scan_settings(self): + ''' Makes some operations with different scan's settings.''' + self.clean_access_rights() + + # Enables packages and multi-locations. + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0), (4, grp_lot.id, 0)]}) + # Creates a product without barcode to check it can always be processed regardless the config. + product_without_barcode = self.env['product.product'].create({ + 'name': 'Barcodeless Product', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + }) + # Adds products' quantities. + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 8) + self.env['stock.quant']._update_available_quantity(product_without_barcode, self.shelf1, 8) + + # First config: products must be scanned, empty picking can't be immediatly validated, + # locations can't be scanned, no put in pack. + self.picking_type_internal.barcode_validation_after_dest_location = False + self.picking_type_internal.barcode_validation_all_product_packed = False + self.picking_type_internal.barcode_validation_full = False + self.picking_type_internal.restrict_scan_product = True + self.picking_type_internal.restrict_put_in_pack = 'optional' + self.picking_type_internal.restrict_scan_source_location = 'no' + self.picking_type_internal.restrict_scan_dest_location = 'no' + + # Creates an internal transfer, from WH/Stock/Shelf 1 to WH/Stock. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_internal + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 4 + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_without_barcode + move.product_uom_qty = 4 + + picking_internal_1 = picking_form.save() + picking_internal_1.action_confirm() + picking_internal_1.action_assign() + + url = self._get_client_action_url(picking_internal_1.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_settings_pick_int_1', login='admin', timeout=180) + self.assertEqual(picking_internal_1.state, 'done') + + # Second picking: change the config (same than before but locations MUST be scanned). + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + # Creates an internal transfer, from WH/Stock/Shelf 1 to WH/Stock. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_internal + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 4 + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_without_barcode + move.product_uom_qty = 4 + + picking_internal_2 = picking_form.save() + picking_internal_2.action_confirm() + picking_internal_2.action_assign() + + url = self._get_client_action_url(picking_internal_2.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_settings_pick_int_2', login='admin', timeout=180) + self.assertEqual(picking_internal_2.state, 'done') + + def test_receipt_scan_package_and_location_after_group_of_product(self): + """ This test ensures when a package or a destination is scanned after a group of product, + if picking type's destination/package destination is on "After group of product" (optional) + then all and only previously scanned line will be packed/go to this location. + """ + # Enables packages and multi-locations. + self.clean_access_rights() + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + # Creates a product without barcode to check it will count even if not + # scanned but processed through the button. + product_without_barcode = self.env['product.product'].create({ + 'name': 'Barcodeless Product', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + }) + # Create an empty package. + package = self.env['stock.quant.package'].create({'name': 'pack-128'}) + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 4 + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_without_barcode + move.product_uom_qty = 4 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.productlot1 + move.product_uom_qty = 6 + + picking_receipt = picking_form.save() + picking_receipt.action_confirm() + picking_receipt.action_assign() + + url = self._get_client_action_url(picking_receipt.id) + self.start_tour(url, 'test_receipt_scan_package_and_location_after_group_of_product', login='admin', timeout=180) + self.assertEqual(picking_receipt.state, 'done') + (lot1, lot2, lot3) = self.env['stock.lot'].search([ + ('product_id', '=', self.productlot1.id), ('name', 'in', ['lot-01', 'lot-02', 'lot-03']) + ]) + move_lines = picking_receipt.move_line_ids.sorted(lambda ml: (ml.product_id.id, ml.location_dest_id.id)) + self.assertRecordValues(move_lines, [ + {'product_id': self.product1.id, 'location_dest_id': self.shelf3.id, 'qty_done': 2, 'lot_id': False, 'result_package_id': package.id}, + {'product_id': self.product1.id, 'location_dest_id': self.shelf1.id, 'qty_done': 2, 'lot_id': False, 'result_package_id': False}, + {'product_id': self.productlot1.id, 'location_dest_id': self.shelf3.id, 'qty_done': 2, 'lot_id': lot3.id, 'result_package_id': package.id}, + {'product_id': self.productlot1.id, 'location_dest_id': self.shelf1.id, 'qty_done': 2, 'lot_id': lot1.id, 'result_package_id': False}, + {'product_id': self.productlot1.id, 'location_dest_id': self.shelf1.id, 'qty_done': 1, 'lot_id': lot2.id, 'result_package_id': False}, + {'product_id': self.productlot1.id, 'location_dest_id': self.shelf2.id, 'qty_done': 1, 'lot_id': lot2.id, 'result_package_id': False}, + {'product_id': product_without_barcode.id, 'location_dest_id': self.shelf1.id, 'qty_done': 4, 'lot_id': False, 'result_package_id': False}, + ]) + + def test_picking_type_mandatory_scan_product_packaging(self): + """ Check a product's packaging can also be scanned when the scan of a product is mandatory. + """ + self.clean_access_rights() + group_packaging = self.env.ref('product.group_stock_packaging') + self.env.user.write({'groups_id': [(4, group_packaging.id)]}) + self.picking_type_in.restrict_scan_product = True + self.env['product.packaging'].create({ + 'barcode': 'product1x10', + 'name': "product1 x10", + 'product_id': self.product1.id, + 'qty': 10, + }) + receipt = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + 'move_ids': [Command.create({ + 'name': 'product1 x 10', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.product1.uom_id.id, + 'product_uom_qty': 10, + })], + }) + receipt.action_confirm() + url = self._get_client_action_url(receipt.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_product_packaging', login='admin') + + def test_picking_type_mandatory_scan_complete_flux(self): + """ From the receipt to the delivery, make a complete flux with each + picking types having their own barcode's settings: + - Starts by receive multiple products (some of them are tracked); + - Stores each product in a different location; + - Makes a picking operation; + - Then makes a packing operation and put all products in pack; + - And finally, does the delivery. + """ + def create_picking(picking_type): + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = picking_type + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 2 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_without_barcode + move.product_uom_qty = 1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.productserial1 + move.product_uom_qty = 3 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.productlot1 + move.product_uom_qty = 6 + return picking_form.save() + + self.clean_access_rights() + # Creates a product without barcode to check it can always be processed regardless the config. + product_without_barcode = self.env['product.product'].create({ + 'name': 'Barcodeless Product', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + }) + + # Enables packages, multi-locations and multiple steps routes. + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_production_lot').id, 0)]}) + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_tracking_lot').id, 0)]}) + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_stock_multi_locations').id, 0)]}) + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_adv_location').id, 0)]}) + warehouse = self.env.ref('stock.warehouse0') + warehouse.reception_steps = 'two_steps' + warehouse.delivery_steps = 'pick_pack_ship' + + # Creates two cluster packs. + self.env['stock.quant.package'].create({ + 'name': 'cluster-pack-01', + 'package_use': 'reusable', + }) + self.env['stock.quant.package'].create({ + 'name': 'cluster-pack-02', + 'package_use': 'reusable', + }) + # Resets package sequence to be sure we'll have the attended packages name. + seq = self.env['ir.sequence'].search([('code', '=', 'stock.quant.package')]) + seq.number_next_actual = 1 + + # Configures the picking type's scan settings. + # Receipt: no put in pack, can not be directly validate. + self.picking_type_in.barcode_validation_full = False + self.picking_type_in.restrict_put_in_pack = 'no' + # Storage (internal transfer): no put in pack, scan dest. after each product. + self.picking_type_internal.barcode_validation_full = False + self.picking_type_internal.restrict_put_in_pack = 'no' + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + # Pick: source mandatory, lots reserved only. + warehouse.pick_type_id.barcode_validation_full = False + warehouse.pick_type_id.restrict_scan_source_location = 'mandatory' + warehouse.pick_type_id.restrict_put_in_pack = 'mandatory' # Will use cluster packs. + warehouse.pick_type_id.restrict_scan_tracking_number = 'mandatory' + warehouse.pick_type_id.restrict_scan_dest_location = 'no' + # Pack: pack after group, all products have to be packed to be validate. + warehouse.pack_type_id.restrict_put_in_pack = 'optional' + warehouse.pack_type_id.restrict_scan_tracking_number = 'mandatory' + warehouse.pack_type_id.barcode_validation_all_product_packed = True + warehouse.pick_type_id.restrict_scan_dest_location = 'no' + # Delivery: pack after group, all products have to be packed to be validate. + self.picking_type_out.restrict_put_in_pack = 'optional' + self.picking_type_out.restrict_scan_tracking_number = 'mandatory' + self.picking_type_out.barcode_validation_all_product_packed = True + self.picking_type_out.show_entire_packs = True + + # Creates and assigns the receipt. + picking_receipt = create_picking(self.picking_type_in) + picking_receipt.action_confirm() + picking_receipt.action_assign() + # Get the storage operation (automatically created by the receipt). + picking_internal = picking_receipt.move_ids.move_dest_ids.picking_id + + # Creates the pick, pack, ship. + picking_pick = create_picking(warehouse.pick_type_id) + picking_pack = create_picking(warehouse.pack_type_id) + picking_delivery = create_picking(self.picking_type_out) + picking_pack.location_dest_id = picking_delivery.location_id + + # Process each picking one by one. + url = self._get_client_action_url(picking_receipt.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_complete_flux_receipt', login='admin', timeout=180) + self.assertEqual(picking_receipt.state, 'done') + + url = self._get_client_action_url(picking_internal.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_complete_flux_internal', login='admin', timeout=180) + self.assertEqual(picking_internal.state, 'done') + + picking_pick.action_confirm() + picking_pick.action_assign() + url = self._get_client_action_url(picking_pick.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_complete_flux_pick', login='admin', timeout=180) + self.assertEqual(picking_pick.state, 'done') + + picking_pack.action_confirm() + picking_pack.action_assign() + for move_line in picking_pack.move_line_ids: # TODO: shouldn't have to do that, reusable packages shouldn't be set in `result_package_id` for the next move. + move_line.result_package_id = False + url = self._get_client_action_url(picking_pack.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_complete_flux_pack', login='admin', timeout=180) + self.assertEqual(picking_pack.state, 'done') + + picking_delivery.action_confirm() + picking_delivery.action_assign() + url = self._get_client_action_url(picking_delivery.id) + self.start_tour(url, 'test_picking_type_mandatory_scan_complete_flux_delivery', login='admin', timeout=180) + self.assertEqual(picking_delivery.state, 'done') + + def test_procurement_backorder(self): + self.clean_access_rights() + product_a, _product_b = self.env['product.product'].create([{ + 'name': p_name, + 'type': 'product', + 'barcode': p_name, + } for p_name in ['PA', 'PB']]) + + customer = self.env["res.partner"].create({"name": "Customer"}) + proc_group = self.env["procurement.group"].create({"partner_id": customer.id}) + + procurement = self.env["procurement.group"].Procurement( + product_a, 1, product_a.uom_id, + self.env.ref('stock.stock_location_customers'), + product_a.name, + "/", + self.env.company, + { + "warehouse_id": self.env['stock.warehouse'].search([], limit=1), + "group_id": proc_group, + } + ) + self.env["procurement.group"].run([procurement]) + + move = self.env['stock.move'].search([('product_id', '=', product_a.id)], limit=1) + url = self._get_client_action_url(move.picking_id.id) + self.start_tour(url, 'test_procurement_backorder', login='admin', timeout=99) + self.assertEqual(len(proc_group.stock_move_ids), 2) + + def test_receipt_delete_button(self): + """ Scan products that not part of a receipt. Check that products not part of original receipt + can be deleted, but the products that are part of the original receipt cannot be deleted. + """ + self.clean_access_rights() + receipt_picking = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + self.env['stock.move'].create({ + 'name': 'test_receipt_1', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.product1.uom_id.id, + 'product_uom_qty': 1, + 'picking_id': receipt_picking.id, + 'picking_type_id': self.picking_type_in.id, + }) + # extra product to test that deleting works + self.env['product.product'].create({ + 'name': 'product3', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product3', + }) + + url = self._get_client_action_url(receipt_picking.id) + receipt_picking.action_confirm() + self.start_tour(url, 'test_receipt_delete_button', login='admin', timeout=180) + self.assertEqual(len(receipt_picking.move_line_ids), 2, "2 lines expected: product1 + product2") + + def test_scrap(self): + """ Checks the scrap button is displayed for when it's possible to scrap + and the corresponding barcode command follows the same rules.""" + # Creates a receipt and a delivery. + receipt_form = Form(self.env['stock.picking']) + receipt_form.picking_type_id = self.picking_type_in + with receipt_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 1 + receipt_picking = receipt_form.save() + receipt_picking.action_confirm() + receipt_picking.action_assign() + receipt_picking.name = "receipt_scrap_test" + + delivery_form = Form(self.env['stock.picking']) + delivery_form.picking_type_id = self.picking_type_out + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 1 + delivery_picking = delivery_form.save() + delivery_picking.action_confirm() + delivery_picking.action_assign() + delivery_picking.name = "delivery_scrap_test" + # Opens the barcode main menu to be able to open the pickings by scanning their name. + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, "test_scrap", login="admin", timeout=180) + + def test_show_entire_package(self): + """ Enables 'Move Entire Packages' for delivery and then creates two deliveries: + - One where we use package level; + - One where we use move without package. + Then, checks it's the right type of line who is shown in the Barcode App.""" + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.picking_type_out.show_entire_packs = True + package1 = self.env['stock.quant.package'].create({'name': 'package001'}) + package2 = self.env['stock.quant.package'].create({'name': 'package002'}) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4, package_id=package1) + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 4, package_id=package2) + + delivery_with_package_level = self.env['stock.picking'].create({ + 'name': "Delivery with Package Level", + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + 'state': 'draft', + }) + self.env['stock.package_level'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'package_id': package1.id, + 'is_done': False, + 'picking_id': delivery_with_package_level.id, + 'company_id': self.env.company.id, + }) + delivery_with_package_level.action_confirm() + delivery_with_package_level.action_assign() + + delivery_with_move = self.env['stock.picking'].create({ + 'name': "Delivery with Stock Move", + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + 'state': 'draft', + }) + self.env['stock.move'].create({ + 'name': 'test_show_entire_package', + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2, + 'picking_id': delivery_with_move.id, + }) + delivery_with_move.action_confirm() + delivery_with_move.action_assign() + + action = self.env["ir.actions.actions"]._for_xml_id("stock_barcode.stock_barcode_action_main_menu") + url = '/web#action=%s' % action['id'] + delivery_with_package_level.action_confirm() + delivery_with_package_level.action_assign() + + self.assertFalse(delivery_with_package_level.package_level_ids.is_done) + self.start_tour(url, 'test_show_entire_package', login='admin', timeout=180) + self.assertTrue(delivery_with_package_level.package_level_ids.is_done) + + def test_define_the_destination_package(self): + """ + Suppose a picking that moves a product from a package to another one + This test ensures that the user can scans the destination package + """ + self.clean_access_rights() + group_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, group_pack.id, 0)]}) + + pack01, pack02 = self.env['stock.quant.package'].create([{ + 'name': name, + } for name in ('PACK01', 'PACK02')]) + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 2, package_id=pack01) + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_out + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 1 + delivery = picking_form.save() + delivery.action_confirm() + + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_define_the_destination_package', login='admin', timeout=180) + + self.assertRecordValues(delivery.move_line_ids, [ + {'product_id': self.product1.id, 'qty_done': 1, 'result_package_id': pack02.id, 'state': 'done'}, + ]) + + def test_avoid_useless_line_creation(self): + """ + Suppose + - the option "Create New Lots/Serial Numbers" disabled + - a tracked product P with an available lot L + On a delivery, a user scans L (it should add a line) + Then, the user scans a non-existing lot LX (it should not create any line) + """ + self.clean_access_rights() + group_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, group_lot.id, 0)]}) + + lot01 = self.env['stock.lot'].create({ + 'name': "LOT01", + 'product_id': self.productlot1.id, + 'company_id': self.env.company.id, + }) + + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 1, lot_id=lot01) + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_out + delivery = picking_form.save() + + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_avoid_useless_line_creation', login='admin', timeout=180) + + self.assertRecordValues(delivery.move_ids, [ + {'product_id': self.productlot1.id, 'lot_ids': lot01.ids, 'quantity': 1}, + ]) + + def test_split_line_reservation(self): + """ Tests new lines created when a line is split to take + from qty in a different location than the reserved + The following cases: + - productlot1 available at given location + - product1 partially available at given location + - product2 not available + """ + self.clean_access_rights() + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_production_lot').id, 0)]}) + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_tracking_lot').id, 0)]}) + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_stock_multi_locations').id, 0)]}) + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_adv_location').id, 0)]}) + lot01 = self.env['stock.lot'].create({ + 'name': "LOT01", + 'product_id': self.productlot1.id, + 'company_id': self.env.company.id, + }) + + lot02 = self.env['stock.lot'].create({ + 'name': "LOT02", + 'product_id': self.productlot1.id, + 'company_id': self.env.company.id, + }) + + lot03 = self.env['stock.lot'].create({ + 'name': "LOT03", + 'product_id': self.productlot1.id, + 'company_id': self.env.company.id, + }) + # all 3 products are available in WH-STOCK + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 5, lot_id=lot01) + self.env['stock.quant']._update_available_quantity(self.productlot1, self.stock_location, 5, lot_id=lot02) + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 5) + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 5) + # lots are available in shelfs + self.env['stock.quant']._update_available_quantity(self.productlot1, self.shelf1, 2, lot_id=lot02) + self.env['stock.quant']._update_available_quantity(self.productlot1, self.shelf2, 2, lot_id=lot03) + # product 1 has some qty in shelf1 + self.env['stock.quant']._update_available_quantity(self.product1, self.shelf1, 1) + # create delivery + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_out + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.productlot1 + move.product_uom_qty = 5 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 4 + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 3 + + delivery = picking_form.save() + delivery.action_confirm() + delivery.action_assign() + + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_split_line_reservation', login='admin', timeout=180) + productlot_mls = delivery.move_ids.filtered(lambda m: m.product_id.id == self.productlot1.id).move_line_ids + product1_mls = delivery.move_ids.filtered(lambda m: m.product_id.id == self.product1.id).move_line_ids + product2_mls = delivery.move_ids.filtered(lambda m: m.product_id.id == self.product2.id).move_line_ids + + # Checks the move lines' quantities. + self.assertRecordValues(productlot_mls, [ + {'quantity': 1, 'picked': True, 'lot_id': lot01.id, 'location_id': self.stock_location.id}, + {'quantity': 1, 'picked': True, 'lot_id': lot02.id, 'location_id': self.stock_location.id}, + {'quantity': 2, 'picked': True, 'lot_id': lot02.id, 'location_id': self.shelf1.id}, + {'quantity': 1, 'picked': True, 'lot_id': lot03.id, 'location_id': self.shelf2.id}, + ]) + self.assertRecordValues(product1_mls, [ + {'quantity': 2, 'picked': True, 'location_id': self.stock_location.id}, + # Only 1 quantity was available for reservation in shelf1 + {'quantity': 2, 'picked': True, 'location_id': self.shelf1.id}, + ]) + self.assertRecordValues(product2_mls, [ + {'quantity': 2, 'picked': True, 'location_id': self.stock_location.id}, + # No qty to reserve in shelf1. + {'quantity': 1, 'picked': True, 'location_id': self.shelf1.id}, + ]) + + def test_split_line_on_destination_scan(self): + """ Ensures a non-complete line is split when a destination is scanned. """ + self.clean_access_rights() + self.env.user.write({'groups_id': [(4, self.env.ref('stock.group_stock_multi_locations').id, 0)]}) + self.picking_type_internal.restrict_scan_dest_location = 'mandatory' + self.picking_type_internal.restrict_scan_source_location = 'mandatory' + # Creates a receipt for 4x product1 and confirm it. + receipt = self.env['stock.picking'].create({ + 'location_dest_id': self.picking_type_in.default_location_dest_id.id, + 'location_id': self.supplier_location.id, + 'name': "receipt_split_line_on_destination_scan", + 'picking_type_id': self.picking_type_in.id, + }) + self.env['stock.move'].create({ + 'location_dest_id': receipt.location_dest_id.id, + 'location_id': receipt.location_id.id, + 'name': "product1 x4", + 'picking_id': receipt.id, + 'product_id': self.product1.id, + 'product_uom_qty': 4, + }) + receipt.action_confirm() + # Create an internal transfer for 7x product2 (reserved from two different locations.) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf1, 3) + self.env['stock.quant']._update_available_quantity(self.product2, self.shelf2, 4) + internal = self.env['stock.picking'].create({ + 'location_dest_id': self.stock_location.id, + 'location_id': self.stock_location.id, + 'name': "internal_split_line_on_destination_scan", + 'picking_type_id': self.picking_type_internal.id, + }) + self.env['stock.move'].create({ + 'location_dest_id': internal.location_dest_id.id, + 'location_id': internal.location_id.id, + 'name': "product2 x7", + 'picking_id': internal.id, + 'product_id': self.product2.id, + 'product_uom_qty': 7, + }) + internal.action_confirm() + # Process the receipt and the internal transfer in a tour, then checks its move lines values. + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_split_line_on_destination_scan', login='admin') + self.assertRecordValues(receipt.move_line_ids, [ + {'quantity': 2, 'picked': True, 'location_dest_id': receipt.location_dest_id.id}, + {'quantity': 2, 'picked': True, 'location_dest_id': self.shelf1.id}, + ]) + self.assertRecordValues(internal.move_line_ids, [ + {'quantity': 2, 'picked': True, 'location_id': self.shelf1.id, 'location_dest_id': self.shelf3.id}, + {'quantity': 2, 'picked': True, 'location_id': self.shelf2.id, 'location_dest_id': self.shelf2.id}, + {'quantity': 1, 'picked': True, 'location_id': self.shelf1.id, 'location_dest_id': self.stock_location.id}, + {'quantity': 2, 'picked': True, 'location_id': self.shelf2.id, 'location_dest_id': self.shelf1.id}, + ]) + + def test_split_line_on_exit_for_delivery(self): + """ Ensures that exit an unfinished operation will split the uncompleted move lines to have + one move line with all picked quantity and one move line with the remaining quantity.""" + self.clean_access_rights() + product3 = self.env['product.product'].create({ + 'name': 'product3', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': 'product3', + }) + # Adds some quantity in stock but not enough to fully complete the delivery. + self.env['stock.quant'].with_context(inventory_mode=True).create([{ + 'product_id': product.id, + 'inventory_quantity': qty, + 'location_id': self.stock_location.id, + } for product, qty in [ + (self.product1, 4), (self.product2, 4), (product3, 2)] + ]).action_apply_inventory() + + # Creates a delivery for 4x product1, 4x product2 and 4x product3. + delivery = self.env['stock.picking'].create({ + 'name': "delivery_split_line_on_exit", + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + self.env['stock.move'].create([{ + 'location_dest_id': delivery.location_dest_id.id, + 'location_id': delivery.location_id.id, + 'name': f"{product.name} x4", + 'picking_id': delivery.id, + 'product_id': product.id, + 'product_uom_qty': 4, + } for product in [self.product1, self.product2, product3]]) + delivery.action_confirm() + + action = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = f"/web#action={action.id}" + self.start_tour(url, 'test_split_line_on_exit_for_delivery', login='admin') + # Checks delivery moves values: + # - product1 line should not be split (completed line) + # - product2 line should be split in two (2 qty picked, 2 qty left) + # - product3 line should not be split (not picked at all) + self.assertEqual(len(delivery.move_ids), 4) + self.assertRecordValues(delivery.move_ids, [ + {'product_id': self.product1.id, 'quantity': 4, 'picked': True}, + {'product_id': self.product2.id, 'quantity': 2, 'picked': True}, + {'product_id': product3.id, 'quantity': 2, 'picked': False}, + {'product_id': self.product2.id, 'quantity': 2, 'picked': False}, + ]) + + def test_split_line_on_exit_for_receipt(self): + """ Ensures that exit an unfinished operation will split the uncompleted move lines to have + one move line with all picked quantity and one move line with the remaining quantity.""" + self.clean_access_rights() + # Enables package to check the split after a put in pack. + group_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, group_pack.id, 0)]}) + # Set packages' sequence to 1000 to find it easily during the tour. + package_sequence = self.env['ir.sequence'].search([('code', '=', 'stock.quant.package')], limit=1) + package_sequence.write({'number_next_actual': 1000}) + + # Creates a receipt for 4x product1 and 4x product2. + receipt = self.env['stock.picking'].create({ + 'name': "receipt_split_line_on_exit", + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + self.env['stock.move'].create({ + 'location_dest_id': receipt.location_dest_id.id, + 'location_id': receipt.location_id.id, + 'name': "product1 x4", + 'picking_id': receipt.id, + 'product_id': self.product1.id, + 'product_uom_qty': 4, + }) + self.env['stock.move'].create({ + 'location_dest_id': receipt.location_dest_id.id, + 'location_id': receipt.location_id.id, + 'name': "product2 x4", + 'picking_id': receipt.id, + 'product_id': self.product2.id, + 'product_uom_qty': 4, + }) + receipt.action_confirm() + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = f"/web#action={action_id.id}" + self.start_tour(url, 'test_split_line_on_exit_for_receipt', login='admin') + # Checks receipt moves values. + self.assertRecordValues(receipt.move_ids, [ + {'product_id': self.product1.id, 'quantity': 3, 'picked': True}, + {'product_id': self.product2.id, 'quantity': 1, 'picked': True}, + {'product_id': self.product1.id, 'quantity': 1, 'picked': False}, + {'product_id': self.product2.id, 'quantity': 3, 'picked': False}, + ]) + + def test_editing_done_picking(self): + """ Create and validate a picking then try editing it.""" + self.clean_access_rights() + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product1 + move.product_uom_qty = 69 + + receipt = picking_form.save() + receipt.action_confirm() + receipt.move_ids.quantity = 69 + receipt.button_validate() + + url = self._get_client_action_url(receipt.id) + self.start_tour(url, 'test_editing_done_picking', login='admin', timeout=180) + + def test_sml_sort_order_by_product_category(self): + """Test the lines are correctly sorted in the Barcode App regarding + their product's category. + """ + self.clean_access_rights() + # Creates two categories and some products using them. + product_categoryB = self.env["product.category"].create({"name": "TestB"}) + product_categoryA = self.env["product.category"].create({"name": "TestA"}) + productA = self.env["product.product"].create( + {"name": "Product A", "categ_id": product_categoryB.id, "type": "product"} + ) + productB = self.env["product.product"].create( + {"name": "Product B", "categ_id": product_categoryA.id, "type": "product"} + ) + productC = self.env["product.product"].create( + {"name": "Product C", "categ_id": product_categoryB.id, "type": "product"} + ) + # Creates a receipt with three move lines (one for each product). + receipt = self.env["stock.picking"].create( + { + "location_id": self.stock_location.id, + "location_dest_id": self.stock_location.id, + "picking_type_id": self.picking_type_in.id, + } + ) + self.env["stock.move.line"].create( + [ + { + "product_id": productA.id, + "product_uom_id": productA.uom_id.id, + "location_id": self.stock_location.id, + "location_dest_id": self.stock_location.id, + "qty_done": 1, + "picking_id": receipt.id, + }, + { + "product_id": productB.id, + "product_uom_id": productB.uom_id.id, + "location_id": self.stock_location.id, + "location_dest_id": self.stock_location.id, + "qty_done": 1, + "picking_id": receipt.id, + }, + { + "product_id": productC.id, + "product_uom_id": productC.uom_id.id, + "location_id": self.stock_location.id, + "location_dest_id": self.stock_location.id, + "qty_done": 1, + "picking_id": receipt.id, + }, + ] + ) + url = self._get_client_action_url(receipt.id) + self.start_tour( + url, "test_sml_sort_order_by_product_category", login="admin", timeout=180 + ) + + def test_create_backorder_after_qty_modified(self): + """ Adding qty to an SML via the edit buttons updates the barcode cache; + we should still be shown the confirmation dialog when validating a partially + complete order, informing the user that a backorder will be created. + """ + self.clean_access_rights() + + receipt = self.env['stock.picking'].create({ + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + }) + self.env['stock.move'].create({ + 'name': 'test_create_backorder_after_qty_modified move', + 'picking_id': receipt.id, + 'product_id': self.product1.id, + 'product_uom_qty': 2.0, + 'product_uom': self.product1.uom_id.id, + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + }) + receipt.action_confirm() + + url = self._get_client_action_url(receipt.id) + self.start_tour(url, 'test_create_backorder_after_qty_modified', login='admin', timeout=180) + + # Original receipt move demand should be modified and the resulting + # backorder move demand should be for the rest of the original demand. + backorder = self.env['stock.picking'].search([('backorder_id', '=', receipt.id)]) + self.assertEqual(backorder.move_ids[0].product_uom_qty, 1.0) + self.assertEqual(receipt.move_ids[0].product_uom_qty, 1.0) + + def test_open_picking_dont_override_assigned_user(self): + """ + Test that clicking on a picking from the barcode view does not replace + the current responsible with the current user. + """ + bob = self.env['res.users'].create({ + 'partner_id': self.env['res.partner'].create({'name': 'Bob'}).id, + 'login': 'bob', + }) + receipt_picking = self.env['stock.picking'].create({ + 'name': "test_responsible_receipt", + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'picking_type_id': self.picking_type_in.id, + 'user_id': bob.id, + 'move_ids': [(0, 0, { + 'name': 'some product', + 'location_id': self.supplier_location.id, + 'location_dest_id': self.stock_location.id, + 'product_id': self.product1.id, + 'product_uom': self.uom_unit.id, + 'product_uom_qty': 2 + })], + }) + receipt_picking.action_confirm() + action = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = f"/web#action={action.id}" + self.start_tour(url, 'test_open_picking_dont_override_assigned_user', login='admin', timeout=180) + self.assertEqual(receipt_picking.user_id.id, bob.id, "Picking responsible should be unchanged after click when previously set") + + def test_multi_company_record_access_in_barcode(self): + """ Test that creating a picking operation wholly in the barcode app will not permit a user + to find records that don't belong to the operation type's company. + """ + self.clean_access_rights() + company2 = self.env['res.company'].create({'name': 'second company'}) + self.env['stock.picking.type'].search([ + ('code', '=', 'incoming'), + ('company_id', '=', company2.id), + ], limit=1).barcode = 'company2_receipt' + self.env.user.company_ids = [(4, company2.id)] + + self.product1.write({ + 'company_id': self.env.company.id, + 'barcode': 'company1_product', + }) + self.product2.write({ + 'company_id': company2.id, + 'barcode': 'company2_product', + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + cids = '-'.join(str(cid) for cid in self.env.user.company_ids.ids) + url = f'/web#action={action_id.id}&cids={cids}' + self.start_tour(url, 'test_multi_company_record_access_in_barcode', login='admin', timeout=180) + + self.assertTrue( + self.env['stock.picking'].search([ + ('company_id', '=', company2.id), + ('product_id', 'in', self.product2.ids), + ], limit=1) + ) + + def test_no_zero_demand_new_line_from_split(self): + """ If a split of incomplete barcode lines is triggered when the line quantity == 0, don't + go through with the split. + """ + self.clean_access_rights() + + self.env['stock.quant']._update_available_quantity(self.product1, self.stock_location, 1) + picking = self.env['stock.picking'].create({ + 'name': 'TNZDNLFS picking', + 'picking_type_id': self.picking_type_internal.id, + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + 'move_ids': [Command.create({ + 'name': 'TNZDNLFS move', + 'product_id': self.product1.id, + 'product_uom_qty': 1, + 'location_id': self.stock_location.id, + 'location_dest_id': self.stock_location.id, + })], + }) + picking.action_confirm() + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_no_zero_demand_new_line_from_split', login='admin', timeout=180) + + self.assertRecordValues( + picking.move_ids, + [{'quantity': 1, 'product_uom_qty': 1, 'picked': False}] + ) + self.assertRecordValues( + picking.move_line_ids, + [{'picked': False, 'quantity': 1}] + ) + + # === GS1 TESTS ===# + def test_gs1_delivery_ambiguous_lot_number(self): + """ + Have a delivery for a product tracked by lots then scan a lot who exists for + two different products and check the move line has the right lot. + Do the same test by scanning a packaging instead of the product. + """ + self.clean_access_rights() + group_packaging = self.env.ref('product.group_stock_packaging') + self.env.user.write({'groups_id': [(4, group_packaging.id)]}) + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + product_a, product_b = self.env['product.product'].create([{ + 'name': name, + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': barcode, + 'tracking': 'lot', + } for (name, barcode) in [('Product A', '22222220'), ('Product B', '44444440')]]) + # Creates 2 lot numbers (same name but different product.) + lot_b, lot_a = self.env['stock.lot'].create([ + {'name': '12345', 'product_id': product.id} for product in [product_b, product_a] + ]) + # Create a product packaging + self.env['product.packaging'].create({ + 'barcode': '10000000240489', + 'name': "Packaging - Product A x1", + 'product_id': product_a.id, + 'qty': 1, + }) + # For the purpose of the test, lot for product_b has to be created first. + for [product, lot] in [[product_b, lot_b], [product_a, lot_a]]: + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': product.id, + 'inventory_quantity': 1, + 'lot_id': lot.id, + 'location_id': self.stock_location.id, + }).action_apply_inventory() + # Run the tour. + action = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action.id) + self.start_tour(url, 'test_gs1_delivery_ambiguous_lot_number', login='admin', timeout=180) + + def test_gs1_delivery_ambiguous_serial_number(self): + """ + Have a delivery for a product tracked by SN then scan a SN who exists for + two different products and check the move line has the right SN. + """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + product_a, product_b = self.env['product.product'].create([{ + 'name': f'product{i}', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': barcode, + 'tracking': 'serial', + } for i, barcode in enumerate(['05711544001952', '05711544001969'])]) + # Creates 2 serial numbers (same name different product). + lot_b, lot_a = self.env['stock.lot'].create([ + {'name': '304', 'product_id': product.id} for product in [product_b, product_a] + ]) + # For the purpose of the test, lot for product_b has to be created first. + for [product, lot] in [[product_b, lot_b], [product_a, lot_a]]: + self.env['stock.quant'].with_context(inventory_mode=True).create({ + 'product_id': product.id, + 'inventory_quantity': 1, + 'lot_id': lot.id, + 'location_id': self.stock_location.id, + }).action_apply_inventory() + # Creates and confirms the delivery. + delivery_picking = self.env['stock.picking'].create({ + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + 'picking_type_id': self.picking_type_out.id, + }) + self.env['stock.move'].create({ + 'name': product_a.name, + 'product_id': product_a.id, + 'product_uom_qty': 1, + 'product_uom': product_a.uom_id.id, + 'picking_id': delivery_picking.id, + 'location_id': self.stock_location.id, + 'location_dest_id': self.customer_location.id, + }) + delivery_picking.action_confirm() + delivery_picking.action_assign() + # Run the tour. + url = self._get_client_action_url(delivery_picking.id) + self.start_tour(url, 'test_gs1_delivery_ambiguous_serial_number', login='admin', timeout=180) + self.assertEqual(delivery_picking.move_line_ids.lot_id, lot_a) + self.assertEqual(delivery_picking.move_line_ids.product_id, product_a) + + def test_gs1_reserved_delivery(self): + """ Process a delivery by scanning multiple quantity multiple times. + """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + + # Creates a product and adds some quantity. + product_gtin_8 = self.env['product.product'].create({ + 'name': 'PRO_GTIN_8', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '11011019', # GTIN-8 format. + 'uom_id': self.env.ref('uom.product_uom_unit').id, + }) + self.env['stock.quant']._update_available_quantity(product_gtin_8, self.stock_location, 99) + + # Creates and process the delivery. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_out + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_gtin_8 + move.product_uom_qty = 10 + + delivery = picking_form.save() + delivery.action_confirm() + delivery.action_assign() + + url = self._get_client_action_url(delivery.id) + self.start_tour(url, 'test_gs1_reserved_delivery', login='admin', timeout=180) + + self.assertEqual(delivery.state, 'done') + self.assertEqual(len(delivery.move_ids), 1) + self.assertEqual(delivery.move_ids.product_uom_qty, 10, "10 units was reserved") + self.assertEqual(delivery.move_ids.quantity, 14, "14 units was processed") + self.assertEqual(len(delivery.move_line_ids), 2) + self.assertEqual(delivery.move_line_ids[0].quantity, 10) + self.assertEqual(delivery.move_line_ids[1].quantity, 4) + + def test_gs1_receipt_conflicting_barcodes(self): + """ Creates some receipts for two products but their barcodes mingle + together once they are adapted for GS1. + """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + + product_gtin_8 = self.env['product.product'].create({ + 'name': 'PRO_GTIN_8', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '11011019', # GTIN-8 format -> Will become 00000011011019. + 'uom_id': self.env.ref('uom.product_uom_unit').id, + }) + + product_gtin_12 = self.env['product.product'].create({ + 'name': 'PRO_GTIN_12', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '000011011019', # GTIN-12 format -> Will also become 00000011011019. + 'uom_id': self.env.ref('uom.product_uom_unit').id, + }) + + # Test for product_gtin_8 only. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_gtin_8 + move.product_uom_qty = 1 + + receipt_1 = picking_form.save() + receipt_1.action_confirm() + receipt_1.action_assign() + + url = self._get_client_action_url(receipt_1.id) + self.start_tour(url, 'test_gs1_receipt_conflicting_barcodes_1', login='admin', timeout=180) + + self.assertEqual(receipt_1.state, 'done') + self.assertEqual(len(receipt_1.move_line_ids), 1) + self.assertEqual(receipt_1.move_line_ids.product_id.id, product_gtin_8.id) + + # Test for product_gtin_12 only. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_gtin_12 + move.product_uom_qty = 1 + + receipt_2 = picking_form.save() + receipt_2.action_confirm() + receipt_2.action_assign() + + url = self._get_client_action_url(receipt_2.id) + self.start_tour(url, 'test_gs1_receipt_conflicting_barcodes_2', login='admin', timeout=180) + + self.assertEqual(receipt_2.state, 'done') + self.assertEqual(len(receipt_2.move_line_ids), 1) + self.assertEqual(receipt_2.move_line_ids.product_id.id, product_gtin_12.id) + + # Test for both product_gtin_8 and product_gtin_12. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_gtin_8 + move.product_uom_qty = 1 + with picking_form.move_ids_without_package.new() as move: + move.product_id = product_gtin_12 + move.product_uom_qty = 1 + + receipt_3 = picking_form.save() + receipt_3.action_confirm() + receipt_3.action_assign() + + self.assertEqual(len(receipt_3.move_line_ids), 2) + url = self._get_client_action_url(receipt_3.id) + self.start_tour(url, 'test_gs1_receipt_conflicting_barcodes_3', login='admin', timeout=180) + + self.assertEqual(receipt_3.state, 'done') + self.assertEqual(len(receipt_3.move_line_ids), 3) + self.assertEqual(receipt_3.move_line_ids[0].product_id.id, product_gtin_8.id) + self.assertEqual(receipt_3.move_line_ids[0].qty_done, 1) + self.assertEqual(receipt_3.move_line_ids[1].product_id.id, product_gtin_12.id) + self.assertEqual(receipt_3.move_line_ids[1].qty_done, 1) + self.assertEqual(receipt_3.move_line_ids[2].product_id.id, product_gtin_8.id) + self.assertEqual(receipt_3.move_line_ids[2].qty_done, 1) + + def test_gs1_receipt_conflicting_barcodes_mistaken_as_gs1(self): + """ Checks if a record has a barcode who can be mistaken for a GS1 barcode, + this record can still be found anyway while using the GS1 nomenclature.""" + self.clean_access_rights() + group_package = self.env.ref('stock.group_tracking_lot') + group_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [ + (4, group_package.id, 0), + (4, group_lot.id, 0), + ]}) + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + # Creates two products and a package with misleading barcode. + self.env['product.product'].create({ + 'name': "Product AI 21", + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '21000000000003', # Can be read as a serial number (AI 21) + 'uom_id': self.env.ref('uom.product_uom_unit').id, + }) + self.env['product.product'].create({ + 'name': "Product AI 30", + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '3000000015', # Can be read as a quantity (15 units, AI 30) + 'uom_id': self.env.ref('uom.product_uom_unit').id, + }) + self.env['stock.quant.package'].create({'name': '21-Chouette-MegaPack'}) + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + self.start_tour(url, 'test_gs1_receipt_conflicting_barcodes_mistaken_as_gs1', login='admin', timeout=180) + + def test_gs1_receipt_lot_serial(self): + """ Creates a receipt for a product tracked by lot, then process it in the Barcode App. + """ + self.clean_access_rights() + grp_lot = self.env.ref('stock.group_production_lot') + self.env.user.write({'groups_id': [(4, grp_lot.id, 0)]}) + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + with picking_form.move_ids_without_package.new() as move: + move.product_id = self.product_tln_gtn8 + move.product_uom_qty = 40 + + receipt = picking_form.save() + receipt.action_confirm() + receipt.action_assign() + + url = self._get_client_action_url(receipt.id) + self.start_tour(url, 'test_gs1_receipt_lot_serial', login='admin', timeout=180) + + self.assertEqual(receipt.state, 'done') + self.assertEqual(len(receipt.move_line_ids), 5) + self.assertEqual( + receipt.move_line_ids.lot_id.mapped('name'), + ['b1-b001', 'b1-b002', 'b1-b003', 'b1-b004', 'b1-b005'] + ) + for move_line in receipt.move_line_ids: + self.assertEqual(move_line.quantity, 8) + self.assertTrue(move_line.picked) + + def test_gs1_receipt_quantity_with_uom(self): + """ Creates a new receipt and scans barcodes with different combinaisons + of product and quantity expressed with different UoM and checks the + quantity is taken only if the UoM is compatible with the product's one. + """ + self.clean_access_rights() + # Enables the UoM and the GS1 nomenclature. + grp_uom = self.env.ref('uom.group_uom') + group_user = self.env.ref('base.group_user') + group_user.write({'implied_ids': [(4, grp_uom.id)]}) + self.env.user.write({'groups_id': [(4, grp_uom.id)]}) + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + # Configures three products using units, kg and g. + uom_unit = self.env.ref('product.product_category_all') + uom_g = self.env.ref('uom.product_uom_gram') + uom_kg = self.env.ref('uom.product_uom_kgm') + product_by_units = self.env['product.product'].create({ + 'name': 'Product by Units', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '15264329', + 'uom_id': uom_unit.id, + }) + product_by_g = self.env['product.product'].create({ + 'name': 'Product by g', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '15264893', + 'uom_id': uom_g.id, + 'uom_po_id': uom_g.id, + }) + product_by_kg = self.env['product.product'].create({ + 'name': 'Product by kg', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '15264879', + 'uom_id': uom_kg.id, + 'uom_po_id': uom_kg.id, + }) + # Creates a new receipt. + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + receipt = picking_form.save() + # Runs the tour. + url = self._get_client_action_url(receipt.id) + self.start_tour(url, 'test_gs1_receipt_quantity_with_uom', login='admin', timeout=180) + # Checks the moves' quantities and UoM. + self.assertEqual(len(receipt.move_ids), 3) + move1, move2, move3 = receipt.move_ids + self.assertEqual(move1.product_id.id, product_by_units.id) + self.assertEqual(move1.quantity, 4) + self.assertTrue(move1.picked) + self.assertEqual(move1.product_uom.id, uom_unit.id) + self.assertEqual(move2.product_id.id, product_by_kg.id) + self.assertEqual(move2.quantity, 5) + self.assertTrue(move2.picked) + self.assertEqual(move2.product_uom.id, uom_kg.id) + self.assertEqual(move3.product_id.id, product_by_g.id) + self.assertEqual(move3.quantity, 1250) + self.assertTrue(move3.picked) + self.assertEqual(move3.product_uom.id, uom_g.id) + + def test_gs1_package_receipt_and_delivery(self): + """ Receives some products and scans a GS1 barcode for a package, then + creates a delivery and scans the same package. + """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + # Set package's sequence to 123 to generate always the same package's name in the tour. + sequence = self.env['ir.sequence'].search([('code', '=', 'stock.quant.package')], limit=1) + sequence.write({'number_next_actual': 123}) + + # Creates two products and two package's types. + product1 = self.env['product.product'].create({ + 'name': 'PRO_GTIN_8', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '82655853', # GTIN-8 + 'uom_id': self.env.ref('uom.product_uom_unit').id + }) + product2 = self.env['product.product'].create({ + 'name': 'PRO_GTIN_12', + 'type': 'product', + 'categ_id': self.env.ref('product.product_category_all').id, + 'barcode': '584687955629', # GTIN-12 + 'uom_id': self.env.ref('uom.product_uom_unit').id, + }) + wooden_chest_package_type = self.env['stock.package.type'].create({ + 'name': 'Wooden Chest', + 'barcode': 'WOODC', + }) + iron_chest_package_type = self.env['stock.package.type'].create({ + 'name': 'Iron Chest', + 'barcode': 'IRONC', + }) + + action_id = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action_id.id) + + self.start_tour(url, 'test_gs1_package_receipt', login='admin', timeout=180) + # Checks the package is in the stock location with the products. + package = self.env['stock.quant.package'].search([('name', '=', '546879213579461324')]) + package2 = self.env['stock.quant.package'].search([('name', '=', '130406658041178543')]) + package3 = self.env['stock.quant.package'].search([('name', '=', 'PACK0000123')]) + self.assertEqual(len(package), 1) + self.assertEqual(len(package.quant_ids), 2) + self.assertEqual(package.package_type_id.id, wooden_chest_package_type.id) + self.assertEqual(package.quant_ids[0].product_id.id, product1.id) + self.assertEqual(package.quant_ids[1].product_id.id, product2.id) + self.assertEqual(package.location_id.id, self.stock_location.id) + self.assertEqual(package2.package_type_id.id, iron_chest_package_type.id) + self.assertEqual(package2.quant_ids.product_id.id, product1.id) + self.assertEqual(package3.package_type_id.id, iron_chest_package_type.id) + self.assertEqual(package3.quant_ids.product_id.id, product2.id) + + self.start_tour(url, 'test_gs1_package_delivery', login='admin', timeout=180) + # Checks the package is in the customer's location. + self.assertEqual(package.location_id.id, self.customer_location.id) + + def test_gs1_receipt_packaging(self): + """ + This test ensures that a user can scan a packaging when processing a receipt + """ + self.clean_access_rights() + + group_packaging = self.env.ref('product.group_stock_packaging') + self.env.user.write({'groups_id': [(4, group_packaging.id)]}) + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + + product = self.env['product.product'].create({ + 'name': 'Bottle', + 'type': 'product', + 'barcode': '1113', + 'packaging_ids': [(0, 0, { + 'name': '6-bottle pack', + 'qty': 6, + 'barcode': '2226', + })], + }) + + picking_form = Form(self.env['stock.picking']) + picking_form.picking_type_id = self.picking_type_in + receipt = picking_form.save() + + url = self._get_client_action_url(receipt.id) + self.start_tour(url, 'test_gs1_receipt_packaging', login='admin', timeout=180) + + move = receipt.move_ids + self.assertEqual(move.product_id, product) + self.assertEqual(move.quantity, 30) + self.assertEqual(move.picked, True) + + def test_gs1_receipt_packaging_with_uom(self): + """ This test ensures that packaging quantity is used when a weight is + scanned but the product uses Units as UoM. + """ + self.clean_access_rights() + group_lot = self.env.ref('stock.group_production_lot') + group_packaging = self.env.ref('product.group_stock_packaging') + group_uom = self.env.ref('uom.group_uom') + self.env.user.write({'groups_id': [(4, group_lot.id), (4, group_packaging.id), (4, group_uom.id)]}) + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + # Create a product and its packaging. + self.env['product.product'].create({ + 'name': 'Product by Units', + 'type': 'product', + 'tracking': 'lot', + 'uom_id': self.uom_unit.id, + 'uom_po_id': self.uom_unit.id, + 'barcode': '03287890001332', + 'packaging_ids': [(0, 0, { + 'name': 'PBUx6', + 'qty': 6, + 'barcode': '10347543011337', + })], + }) + action = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = f'/web#action={action.id}' + self.start_tour(url, 'test_gs1_receipt_packaging_with_uom', login='admin', timeout=180) + + def test_gs1_tracked_packaging(self): + """ Ensures we can scan a GS1 barcode containing a packaging for a + tracked product and the lot in one scan. + """ + self.clean_access_rights() + self.env.company.nomenclature_id = self.env.ref('barcodes_gs1_nomenclature.default_gs1_nomenclature') + group_tracking = self.env.ref('stock.group_production_lot') + group_packaging = self.env.ref('product.group_stock_packaging') + self.env.user.write({'groups_id': [(4, group_tracking.id, 0), (4, group_packaging.id, 0)]}) + + self.env['product.packaging'].create({ + 'name': 'productlot1 6 pack', + 'qty': 6, + 'barcode': '12653256', + 'product_id': self.productlot1.id + }) + + action = self.env.ref('stock_barcode.stock_barcode_action_main_menu') + url = "/web#action=" + str(action.id) + self.start_tour(url, 'test_gs1_tracked_packaging', login='admin', timeout=180) + lot = self.env['stock.lot'].search([('name', '=', 'lot-001')]) + move_lines = self.env['stock.move.line'].search([('product_id', '=', self.productlot1.id)]) + self.assertRecordValues(move_lines, [ + {'quantity': 6, 'lot_id': lot.id, 'location_id': self.supplier_location.id, 'location_dest_id': self.stock_location.id}, + {'quantity': 6, 'lot_id': lot.id, 'location_id': self.stock_location.id, 'location_dest_id': self.customer_location.id}, + ]) + + def test_split_line_on_scan(self): + """ + This test ensures that move lines are split correctly + when a user scans a package on an incomplete move line + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + + self.env['stock.quant']._update_available_quantity(self.product2, self.stock_location, 5) + # Create two empty packs + pack1 = self.env['stock.quant.package'].create({ + 'name': 'THEPACK1', + }) + pack2 = self.env['stock.quant.package'].create({ + 'name': 'THEPACK2', + }) + + delivery_form = Form(self.env['stock.picking']) + delivery_form.picking_type_id = self.picking_type_out + with delivery_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 5 + delivery_with_move = delivery_form.save() + delivery_with_move.action_confirm() + delivery_with_move.action_assign() + + url = self._get_client_action_url(delivery_with_move.id) + self.start_tour(url, 'test_split_line_on_scan', login='admin', timeout=180) + + self.assertEqual(len(pack1.quant_ids), 1) + self.assertEqual(len(pack2.quant_ids), 1) + self.assertEqual(len(delivery_with_move.move_line_ids), 2) + + def test_scan_line_splitting_preserve_destination(self): + """ + This test ensures that move lines, when assigned a new destination + while scanning, properly preserve destination info after scanning + a package + """ + self.clean_access_rights() + grp_pack = self.env.ref('stock.group_tracking_lot') + grp_multi_loc = self.env.ref('stock.group_stock_multi_locations') + self.env.user.write({'groups_id': [(4, grp_pack.id, 0)]}) + self.env.user.write({'groups_id': [(4, grp_multi_loc.id, 0)]}) + + # Create two empty packs + pack1 = self.env['stock.quant.package'].create({ + 'name': 'THEPACK1', + }) + pack2 = self.env['stock.quant.package'].create({ + 'name': 'THEPACK2', + }) + + # Create a receipt and confirm it. + receipt_form = Form(self.env['stock.picking']) + receipt_form.picking_type_id = self.picking_type_in + with receipt_form.move_ids_without_package.new() as move: + move.product_id = self.product2 + move.product_uom_qty = 5 + receipt_picking = receipt_form.save() + receipt_picking.action_confirm() + receipt_picking.action_assign() + + url = self._get_client_action_url(receipt_picking.id) + self.start_tour(url, 'test_scan_line_splitting_preserve_destination', login='admin', timeout=180) + + self.assertEqual(len(pack1.quant_ids), 1) + self.assertEqual(pack1.location_id.id, self.shelf3.id) + self.assertRecordValues(pack1.quant_ids, [ + {'product_id': self.product2.id, 'quantity': 2, 'location_id': self.shelf3.id}, + ]) + + self.assertEqual(len(pack2.quant_ids), 1) + self.assertEqual(pack2.location_id.id, self.shelf4.id) + self.assertRecordValues(pack2.quant_ids, [ + {'product_id': self.product2.id, 'quantity': 3, 'location_id': self.shelf4.id}, + ]) diff --git a/stock_barcode/tests/test_controller.py b/stock_barcode/tests/test_controller.py new file mode 100644 index 0000000..aa558a2 --- /dev/null +++ b/stock_barcode/tests/test_controller.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +import json + +from odoo.tests import HttpCase, tagged + + +@tagged('post_install', '-at_install') +class TestStockBarcodeController(HttpCase): + + def test_search_by_barcode_with_multiple_companies(self): + company_a = self.env.company + company_b = self.env['res.company'].create({'name': 'Test Company'}) + self.env.ref('base.user_admin').company_ids = [(4, company_b.id)] + + products = [ + {'name': 'A1', 'barcode': 'abc1', 'company_id': False}, + {'name': 'A2', 'barcode': 'abc2', 'company_id': False}, + {'name': 'A3', 'barcode': 'abc3', 'company_id': company_a.id}, + {'name': 'A4', 'barcode': 'abc3', 'company_id': company_b.id}, + ] + + for product in products: + self.env['product.product'].create(product) + + expected_responses = { + company_a: [ + ('abc1', 'A1'), + ('abc2', 'A2'), + ('abc3', 'A3'), + ], + company_b: [ + ('abc1', 'A1'), + ('abc2', 'A2'), + ('abc3', 'A4'), + ], + } + + self.authenticate('admin', 'admin') + for company, responses in expected_responses.items(): + for barcode, expected_display_name in responses: + payload = json.dumps({ + 'jsonrpc': '2.0', + 'method': 'call', + 'id': 0, + 'params': { + 'barcode': barcode, + 'domains_by_model': {'all': [['company_id', 'in', [False, company.id]]]}, + 'model_name': False, + }, + }) + self.env.ref('base.user_admin').company_id = company + response = self.url_open( + '/stock_barcode/get_specific_barcode_data', + data=payload, + headers={'Content-Type': 'application/json'}, + ) + received_barcode = response.json()['result']['product.product'][0]['barcode'] + display_name = response.json()['result']['product.product'][0]['display_name'] + + self.assertEqual( + barcode, received_barcode, + f"Expected barcode '{barcode}' for company '{company.name}' " + f"(id: {company.id}), but got '{received_barcode}' instead." + ) + self.assertEqual( + display_name, expected_display_name, + f"Expected product '{expected_display_name}' for company '{company.name}' " + f"(id: {company.id}), but got '{display_name}' instead." + ) diff --git a/stock_barcode/views/res_config_settings_views.xml b/stock_barcode/views/res_config_settings_views.xml new file mode 100644 index 0000000..11acaae --- /dev/null +++ b/stock_barcode/views/res_config_settings_views.xml @@ -0,0 +1,38 @@ + + + + res.config.settings.view.form.inherit.stock.barcode + res.config.settings + + + + +
+
+
+
+
+
+ + + + +
+
+
+
diff --git a/stock_barcode/views/stock_barcode_views.xml b/stock_barcode/views/stock_barcode_views.xml new file mode 100644 index 0000000..1fbfa9d --- /dev/null +++ b/stock_barcode/views/stock_barcode_views.xml @@ -0,0 +1,132 @@ + + + + + + + Barcode + stock_barcode_main_menu + fullscreen + + + + + + + + + + Picking + stock.picking + form + + + + stock.barcode.picking.kanban + stock.picking + + primary + + 100 + + + stock_barcode_list_kanban + false + + + + + + Operations + stock.picking + kanban,form + + { + 'contact_display': 'partner_address', + 'search_default_available': 1, + 'search_default_to_do_transfers': 1, + } + +

+ Create a new transfer +

+ Transfers allow you to move products from one location to another. +

+
+
+ + + + + stock.picking.type.kanban + stock.picking.type + primary + 20 + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+ + To Process + +
+
+
+
+
+
+
+ + + Operations + stock.picking.type + kanban,form + [('code', 'in', ('incoming', 'outgoing', 'internal'))] + + + + + + + + product.list.barcodes + product.product + + + + + + + + + + + + Product Barcodes + product.product + tree + + + +
diff --git a/stock_barcode/views/stock_inventory_views.xml b/stock_barcode/views/stock_inventory_views.xml new file mode 100644 index 0000000..6dd96cc --- /dev/null +++ b/stock_barcode/views/stock_inventory_views.xml @@ -0,0 +1,94 @@ + + + + stock.quant.barcode + stock.quant + 1000 + +
+
+ + +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + + + + + + + + +
+
+
diff --git a/stock_barcode/views/stock_location_views.xml b/stock_barcode/views/stock_location_views.xml new file mode 100644 index 0000000..dc419dd --- /dev/null +++ b/stock_barcode/views/stock_location_views.xml @@ -0,0 +1,13 @@ + + + + stock.location.form.inherit + stock.location + + + + + + + + \ No newline at end of file diff --git a/stock_barcode/views/stock_move_line_views.xml b/stock_barcode/views/stock_move_line_views.xml new file mode 100644 index 0000000..66c6c2a --- /dev/null +++ b/stock_barcode/views/stock_move_line_views.xml @@ -0,0 +1,207 @@ + + + + + stock.product.selector + stock.move.line + 1000 + +
+
+ + + + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ + + + +
+
+ + +
+
+
+
+ +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ + +
+
+
+
+
+ +
+ +
+
+ + + stock.barcode.quant.kanban + stock.quant + 1000 + + + + + + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ + + stock.quant.kanban.barcode + stock.quant + 1000 + + + + +
+
+ +
+
+ + + + +
+
+ +
+
+ +
+
+
+
+
+
+
+ + + stock_barcode.quant.tree.inherit + stock.quant + + primary + + + UoM + show + + + hide + + + hide + + + +
diff --git a/stock_barcode/views/stock_picking_views.xml b/stock_barcode/views/stock_picking_views.xml new file mode 100644 index 0000000..72d1207 --- /dev/null +++ b/stock_barcode/views/stock_picking_views.xml @@ -0,0 +1,164 @@ + + + + stock.move.line.operations.tree.inherit + stock.move.line + + + + + + + + {'barcode_events': True} + field_float_scannable + + + + + + stock.move.line.kanban.inherited + stock.move.line + + + + + + + + + + + + + stock.picking.form.view.barcode + stock.picking + 1000 + +
+ + + + +
+ + + + + + Open picking form + stock.picking + form + { + 'res_id': active_id, + } + + + + + stock.picking.view.kanban.barcode + stock.picking + + + + + + + + + + + + Operation Types + stock.picking.type + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stock_barcode/views/stock_scrap_views.xml b/stock_barcode/views/stock_scrap_views.xml new file mode 100644 index 0000000..aa92786 --- /dev/null +++ b/stock_barcode/views/stock_scrap_views.xml @@ -0,0 +1,34 @@ + + + + + stock.scrap.form.inherit.barcode + stock.scrap + + +
+ + + + validate + + + + discard + + +
+
+ + + stock.scrap.form.inherit.barcode + stock.scrap + + +
+ + +
+
+ +
diff --git a/stock_barcode/wizard/__init__.py b/stock_barcode/wizard/__init__.py new file mode 100644 index 0000000..f62da41 --- /dev/null +++ b/stock_barcode/wizard/__init__.py @@ -0,0 +1,2 @@ +from . import stock_backorder_confirmation +from . import stock_barcode_cancel_operation diff --git a/stock_barcode/wizard/stock_backorder_confirmation.py b/stock_barcode/wizard/stock_backorder_confirmation.py new file mode 100644 index 0000000..373b2c0 --- /dev/null +++ b/stock_barcode/wizard/stock_backorder_confirmation.py @@ -0,0 +1,16 @@ +from odoo import api, fields, models + + +class StockBackorderConfirmation(models.TransientModel): + _inherit = 'stock.backorder.confirmation' + + empty_move_count = fields.Integer(compute="_compute_not_fully_processed_move_count") + partial_move_count = fields.Integer(compute="_compute_not_fully_processed_move_count") + + @api.depends('pick_ids') + def _compute_not_fully_processed_move_count(self): + for backorder in self: + moves = backorder.pick_ids.move_ids + backorder.empty_move_count = len(moves.filtered(lambda mv: mv.product_uom_qty and not mv.picked)) + not_done_count = len(moves.filtered(lambda mv: mv.product_uom_qty > mv.quantity and mv.picked)) + backorder.partial_move_count = not_done_count - backorder.empty_move_count diff --git a/stock_barcode/wizard/stock_backorder_confirmation_views.xml b/stock_barcode/wizard/stock_backorder_confirmation_views.xml new file mode 100644 index 0000000..baab3a0 --- /dev/null +++ b/stock_barcode/wizard/stock_backorder_confirmation_views.xml @@ -0,0 +1,28 @@ + + + + stock_barcode_backorder_confirmation + stock.backorder.confirmation + + + + + context.get('display_detailed_backorder', False) + + + +
+

You have processed less products than the initial demand:

+

+ products were not processed at all. +

+

+ products were partially processed. +

+
+
+
+
+
diff --git a/stock_barcode/wizard/stock_barcode_cancel_operation.py b/stock_barcode/wizard/stock_barcode_cancel_operation.py new file mode 100644 index 0000000..e08290c --- /dev/null +++ b/stock_barcode/wizard/stock_barcode_cancel_operation.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class StockBarcodeCancelPicking(models.TransientModel): + _name = 'stock_barcode.cancel.operation' + _description = 'Cancel Operation' + + picking_id = fields.Many2one('stock.picking', 'Transfer', readonly=True) + picking_name = fields.Char('Transfer Name', readonly=True, related='picking_id.display_name') + + def action_cancel_operation(self): + res = self.picking_id.action_cancel() + return {'type': 'ir.actions.act_window_close', 'infos': {'cancelled': res}} diff --git a/stock_barcode/wizard/stock_barcode_cancel_operation.xml b/stock_barcode/wizard/stock_barcode_cancel_operation.xml new file mode 100644 index 0000000..89b88ab --- /dev/null +++ b/stock_barcode/wizard/stock_barcode_cancel_operation.xml @@ -0,0 +1,22 @@ + + + + stock_barcode_cancel_operation + stock_barcode.cancel.operation + +
+ +

Are you sure you want to cancel this operation?

+
+ +
+ +
+
+
diff --git a/web_tour/__init__.py b/web_tour/__init__.py new file mode 100644 index 0000000..dc5e6b6 --- /dev/null +++ b/web_tour/__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/web_tour/__manifest__.py b/web_tour/__manifest__.py new file mode 100644 index 0000000..71ad088 --- /dev/null +++ b/web_tour/__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/web_tour/i18n/ar.po b/web_tour/i18n/ar.po new file mode 100644 index 0000000..d5cdffd --- /dev/null +++ b/web_tour/i18n/ar.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: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: 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/web_tour/i18n/az.po b/web_tour/i18n/az.po new file mode 100644 index 0000000..34114ef --- /dev/null +++ b/web_tour/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/web_tour/i18n/bg.po b/web_tour/i18n/bg.po new file mode 100644 index 0000000..69871d9 --- /dev/null +++ b/web_tour/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/web_tour/i18n/bs.po b/web_tour/i18n/bs.po new file mode 100644 index 0000000..0c907a5 --- /dev/null +++ b/web_tour/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/web_tour/i18n/ca.po b/web_tour/i18n/ca.po new file mode 100644 index 0000000..c6ea9c2 --- /dev/null +++ b/web_tour/i18n/ca.po @@ -0,0 +1,196 @@ +# 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 +# Santiago Payà , 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: Santiago Payà , 2024\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 els recorreguts" + +#. 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 "Recorreguts d'iniciació" + +#. 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 "Recorregut de prova" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Recorreguts de prova" + +#. 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/web_tour/i18n/cs.po b/web_tour/i18n/cs.po new file mode 100644 index 0000000..882eab5 --- /dev/null +++ b/web_tour/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/web_tour/i18n/da.po b/web_tour/i18n/da.po new file mode 100644 index 0000000..983b188 --- /dev/null +++ b/web_tour/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/web_tour/i18n/de.po b/web_tour/i18n/de.po new file mode 100644 index 0000000..2eef3b9 --- /dev/null +++ b/web_tour/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/web_tour/i18n/el.po b/web_tour/i18n/el.po new file mode 100644 index 0000000..e9bc93c --- /dev/null +++ b/web_tour/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/web_tour/i18n/es.po b/web_tour/i18n/es.po new file mode 100644 index 0000000..27bb439 --- /dev/null +++ b/web_tour/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ú 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 "Comenzar" + +#. 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 "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/web_tour/i18n/es_419.po b/web_tour/i18n/es_419.po new file mode 100644 index 0000000..10d8c11 --- /dev/null +++ b/web_tour/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/web_tour/i18n/et.po b/web_tour/i18n/et.po new file mode 100644 index 0000000..7a94e53 --- /dev/null +++ b/web_tour/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/web_tour/i18n/fa.po b/web_tour/i18n/fa.po new file mode 100644 index 0000000..cb6aa1e --- /dev/null +++ b/web_tour/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/web_tour/i18n/fi.po b/web_tour/i18n/fi.po new file mode 100644 index 0000000..df2ed3f --- /dev/null +++ b/web_tour/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 , 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: Ossi Mantylahti , 2024\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 "Vieritä alaspäin päästäksesi seuraavaan vaiheeseen." + +#. 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 "Siirry seuraavaan vaiheeseen selaamalla ylöspäin." + +#. 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/web_tour/i18n/fr.po b/web_tour/i18n/fr.po new file mode 100644 index 0000000..c68aed5 --- /dev/null +++ b/web_tour/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/web_tour/i18n/gu.po b/web_tour/i18n/gu.po new file mode 100644 index 0000000..078e009 --- /dev/null +++ b/web_tour/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/web_tour/i18n/he.po b/web_tour/i18n/he.po new file mode 100644 index 0000000..d54cebc --- /dev/null +++ b/web_tour/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/web_tour/i18n/hr.po b/web_tour/i18n/hr.po new file mode 100644 index 0000000..416c357 --- /dev/null +++ b/web_tour/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/web_tour/i18n/hu.po b/web_tour/i18n/hu.po new file mode 100644 index 0000000..65c4640 --- /dev/null +++ b/web_tour/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/web_tour/i18n/hy.po b/web_tour/i18n/hy.po new file mode 100644 index 0000000..1b66841 --- /dev/null +++ b/web_tour/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/web_tour/i18n/id.po b/web_tour/i18n/id.po new file mode 100644 index 0000000..bcfb2d9 --- /dev/null +++ b/web_tour/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/web_tour/i18n/is.po b/web_tour/i18n/is.po new file mode 100644 index 0000000..d069ba9 --- /dev/null +++ b/web_tour/i18n/is.po @@ -0,0 +1,187 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Kristófer Arnþórsson, 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: Kristófer Arnþórsson, 2024\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 "Loka" + +#. 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 "Birtingarnafn" + +#. 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 "Auðkenni (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 "Nafn" + +#. 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 "Röð" + +#. 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 "Prufa" + +#. 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/web_tour/i18n/it.po b/web_tour/i18n/it.po new file mode 100644 index 0000000..163d2f8 --- /dev/null +++ b/web_tour/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/web_tour/i18n/ja.po b/web_tour/i18n/ja.po new file mode 100644 index 0000000..0ce1ead --- /dev/null +++ b/web_tour/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/web_tour/i18n/km.po b/web_tour/i18n/km.po new file mode 100644 index 0000000..87a29f6 --- /dev/null +++ b/web_tour/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/web_tour/i18n/ko.po b/web_tour/i18n/ko.po new file mode 100644 index 0000000..3672764 --- /dev/null +++ b/web_tour/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/web_tour/i18n/lb.po b/web_tour/i18n/lb.po new file mode 100644 index 0000000..ad77acd --- /dev/null +++ b/web_tour/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/web_tour/i18n/lt.po b/web_tour/i18n/lt.po new file mode 100644 index 0000000..224c469 --- /dev/null +++ b/web_tour/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/web_tour/i18n/lv.po b/web_tour/i18n/lv.po new file mode 100644 index 0000000..32eb5d6 --- /dev/null +++ b/web_tour/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/web_tour/i18n/mn.po b/web_tour/i18n/mn.po new file mode 100644 index 0000000..30f6db2 --- /dev/null +++ b/web_tour/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/web_tour/i18n/nb.po b/web_tour/i18n/nb.po new file mode 100644 index 0000000..01eedc8 --- /dev/null +++ b/web_tour/i18n/nb.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Marius Stedjan , 2024 +# Henning Herfjord , 2024 +# Martin Trigaux, 2024 +# Jorunn D. Newth, 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: Jorunn D. Newth, 2024\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: 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 "Lukk" + +#. 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 +#: 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 +#: 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/web_tour/i18n/nl.po b/web_tour/i18n/nl.po new file mode 100644 index 0000000..d8414c4 --- /dev/null +++ b/web_tour/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/web_tour/i18n/pl.po b/web_tour/i18n/pl.po new file mode 100644 index 0000000..a36b39f --- /dev/null +++ b/web_tour/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/web_tour/i18n/pt.po b/web_tour/i18n/pt.po new file mode 100644 index 0000000..8ef08b6 --- /dev/null +++ b/web_tour/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/web_tour/i18n/pt_BR.po b/web_tour/i18n/pt_BR.po new file mode 100644 index 0000000..d225231 --- /dev/null +++ b/web_tour/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/web_tour/i18n/ro.po b/web_tour/i18n/ro.po new file mode 100644 index 0000000..65baaeb --- /dev/null +++ b/web_tour/i18n/ro.po @@ -0,0 +1,191 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# sharkutz , 2024 +# Martin Trigaux, 2024 +# Dorin Hongu , 2024 +# Hongu Cosmin , 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: Hongu Cosmin , 2024\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: 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 +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Închide" + +#. 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 +#: 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 +#: 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/web_tour/i18n/ru.po b/web_tour/i18n/ru.po new file mode 100644 index 0000000..bc6e4ca --- /dev/null +++ b/web_tour/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/web_tour/i18n/sk.po b/web_tour/i18n/sk.po new file mode 100644 index 0000000..70cc06c --- /dev/null +++ b/web_tour/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/web_tour/i18n/sl.po b/web_tour/i18n/sl.po new file mode 100644 index 0000000..9337ad2 --- /dev/null +++ b/web_tour/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/web_tour/i18n/sr.po b/web_tour/i18n/sr.po new file mode 100644 index 0000000..e209b39 --- /dev/null +++ b/web_tour/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/web_tour/i18n/sr@latin.po b/web_tour/i18n/sr@latin.po new file mode 100644 index 0000000..e914bfb --- /dev/null +++ b/web_tour/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/web_tour/i18n/sv.po b/web_tour/i18n/sv.po new file mode 100644 index 0000000..2978cdc --- /dev/null +++ b/web_tour/i18n/sv.po @@ -0,0 +1,194 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Chrille Hedberg , 2023 +# Kristoffer Grundström , 2023 +# Martin Trigaux, 2023 +# Anders Wallenquist , 2023 +# Kim Asplund , 2023 +# Jakob Krabbe , 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: Jakob Krabbe , 2024\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-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 "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 rundturer" + +#. 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 "Scrolla ner för att komma till nästa steg." + +#. 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 "Scrolla upp för att komma till nästa steg." + +#. 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 rundturen" + +#. 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 "Testa rundturen" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Testa rundturer" + +#. 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 "Rundtursnamn" + +#. 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 "Rundturer" diff --git a/web_tour/i18n/th.po b/web_tour/i18n/th.po new file mode 100644 index 0000000..bc67159 --- /dev/null +++ b/web_tour/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/web_tour/i18n/tr.po b/web_tour/i18n/tr.po new file mode 100644 index 0000000..a920563 --- /dev/null +++ b/web_tour/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/web_tour/i18n/uk.po b/web_tour/i18n/uk.po new file mode 100644 index 0000000..9d1d85f --- /dev/null +++ b/web_tour/i18n/uk.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Alina Lisnenko , 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: Alina Lisnenko , 2024\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/web_tour/i18n/vi.po b/web_tour/i18n/vi.po new file mode 100644 index 0000000..9e74c41 --- /dev/null +++ b/web_tour/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/web_tour/i18n/web_tour.pot b/web_tour/i18n/web_tour.pot new file mode 100644 index 0000000..2d41fb2 --- /dev/null +++ b/web_tour/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/web_tour/i18n/zh_CN.po b/web_tour/i18n/zh_CN.po new file mode 100644 index 0000000..6e66ddf --- /dev/null +++ b/web_tour/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/web_tour/i18n/zh_TW.po b/web_tour/i18n/zh_TW.po new file mode 100644 index 0000000..dd557ae --- /dev/null +++ b/web_tour/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/web_tour/models/__init__.py b/web_tour/models/__init__.py new file mode 100644 index 0000000..a9f4d6f --- /dev/null +++ b/web_tour/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/web_tour/models/ir_http.py b/web_tour/models/ir_http.py new file mode 100644 index 0000000..1d37ea1 --- /dev/null +++ b/web_tour/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/web_tour/models/tour.py b/web_tour/models/tour.py new file mode 100644 index 0000000..339506d --- /dev/null +++ b/web_tour/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/web_tour/security/ir.model.access.csv b/web_tour/security/ir.model.access.csv new file mode 100644 index 0000000..4c4c1de --- /dev/null +++ b/web_tour/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/web_tour/security/ir.rule.csv b/web_tour/security/ir.rule.csv new file mode 100644 index 0000000..357434c --- /dev/null +++ b/web_tour/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/web_tour/static/src/debug/debug_manager.js b/web_tour/static/src/debug/debug_manager.js new file mode 100644 index 0000000..f4c02fa --- /dev/null +++ b/web_tour/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/web_tour/static/src/debug/tour_dialog_component.js b/web_tour/static/src/debug/tour_dialog_component.js new file mode 100644 index 0000000..3751417 --- /dev/null +++ b/web_tour/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/web_tour/static/src/debug/tour_dialog_component.xml b/web_tour/static/src/debug/tour_dialog_component.xml new file mode 100644 index 0000000..c01d6ba --- /dev/null +++ b/web_tour/static/src/debug/tour_dialog_component.xml @@ -0,0 +1,62 @@ + + + + + + + Onboarding tours + + + + Testing tours + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
SequenceNamePathStartTest
+ +
+
+
+ +
diff --git a/web_tour/static/src/tour_pointer/tour_pointer.js b/web_tour/static/src/tour_pointer/tour_pointer.js new file mode 100644 index 0000000..e671331 --- /dev/null +++ b/web_tour/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/web_tour/static/src/tour_pointer/tour_pointer.scss b/web_tour/static/src/tour_pointer/tour_pointer.scss new file mode 100644 index 0000000..3dc7ce3 --- /dev/null +++ b/web_tour/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/web_tour/static/src/tour_pointer/tour_pointer.xml b/web_tour/static/src/tour_pointer/tour_pointer.xml new file mode 100644 index 0000000..07c3c33 --- /dev/null +++ b/web_tour/static/src/tour_pointer/tour_pointer.xml @@ -0,0 +1,30 @@ + + + +
+
+
+ +
+
+ + diff --git a/web_tour/static/src/tour_service/tour_compilers.js b/web_tour/static/src/tour_service/tour_compilers.js new file mode 100644 index 0000000..327f7d9 --- /dev/null +++ b/web_tour/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/web_tour/static/src/tour_service/tour_pointer_state.js b/web_tour/static/src/tour_service/tour_pointer_state.js new file mode 100644 index 0000000..94cedb4 --- /dev/null +++ b/web_tour/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/web_tour/static/src/tour_service/tour_service.js b/web_tour/static/src/tour_service/tour_service.js new file mode 100644 index 0000000..8659675 --- /dev/null +++ b/web_tour/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/web_tour/static/src/tour_service/tour_state.js b/web_tour/static/src/tour_service/tour_state.js new file mode 100644 index 0000000..b18ae43 --- /dev/null +++ b/web_tour/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/web_tour/static/src/tour_service/tour_utils.js b/web_tour/static/src/tour_service/tour_utils.js new file mode 100644 index 0000000..8c50762 --- /dev/null +++ b/web_tour/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) { + values.$element[0].ownerDocument.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/web_tour/static/tests/debug_manager_tests.js b/web_tour/static/tests/debug_manager_tests.js new file mode 100644 index 0000000..03e47c9 --- /dev/null +++ b/web_tour/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/web_tour/static/tests/tour_service_tests.js b/web_tour/static/tests/tour_service_tests.js new file mode 100644 index 0000000..5f1c70d --- /dev/null +++ b/web_tour/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/web_tour/views/tour_views.xml b/web_tour/views/tour_views.xml new file mode 100644 index 0000000..cba0cc1 --- /dev/null +++ b/web_tour/views/tour_views.xml @@ -0,0 +1,46 @@ + + + + web_tour.tour + +
+ + + + + + + + + + +
+
+
+ + + web_tour.tour + + + + + + + + + tour.search + web_tour.tour + + + + + + + + Tours + web_tour.tour + + + + +
From 8054a8e84c8d8f3d3382370fa54cfe8b72492986 Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Mon, 6 Jan 2025 17:53:22 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- planning/views/planning_views.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/views/planning_views.xml b/planning/views/planning_views.xml index 870c92a..9f5a974 100644 --- a/planning/views/planning_views.xml +++ b/planning/views/planning_views.xml @@ -6,7 +6,7 @@ planning.slot -
+
From 499c41269efeca3b87e3cb468997274ba67b7768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Thu, 20 Mar 2025 09:41:39 +0800 Subject: [PATCH 8/8] 1 --- hr_payroll/models/hr_salary_rule_category.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_payroll/models/hr_salary_rule_category.py b/hr_payroll/models/hr_salary_rule_category.py index bd01701..ee2303a 100644 --- a/hr_payroll/models/hr_salary_rule_category.py +++ b/hr_payroll/models/hr_salary_rule_category.py @@ -22,7 +22,7 @@ class HrSalaryRuleCategory(models.Model): raise ValidationError(_('Error! You cannot create recursive hierarchy of Salary Rule Category.')) def _sum_salary_rule_category(self, localdict, amount): - self.ensure_one() + # self.ensure_one() if self.parent_id: localdict = self.parent_id._sum_salary_rule_category(localdict, amount) localdict['categories'][self.code] = localdict['categories'][self.code] + amount